- PR -

ASPで複数のSUBMITボタンがある場合の処理

1
投稿者投稿内容
納涼床
ベテラン
会議室デビュー日: 2006/06/28
投稿数: 53
お住まい・勤務地: 京都市下京区
投稿日時: 2007-08-13 14:34
ASPで各行に「更新」ボタンのついたリストを作成し
「更新」ボタンを押した場合、ボタンを押した行の値を参照して
入力の妥当性を検証し、検証が通った場合
ボタンが押された行に関してデータベースのテーブルの値を
更新するプログラムを作成しています。
検証はVBscriptで行おうと思っているのですが、
ボタンを押して処理を実行しようとした時に
ページでスクリプトエラーが発生します。
フォームはグリッド全体でひとつにして、そこに
各行ごとに「更新」ボタンを配置する案と、
各行ごとにフォームを持たせて、各フォームごとに
ひとつずつ「更新」ボタンを配置する案を検討していて
どちらでもかまいません。
よい案がありましたらよろしくお願いします。
参考に失敗しているASPファイルの
コーディングを記述しておきます。
この場合、各行ごとにフォームを持たせています。


<!--#include FILE="../Common/HyokaHyo.ASP"-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset// EN">
<html>
<head>
<title>
事務事業評価システム
</title>

<meta HTTP-EQUIV="content-type" CONTENT="text/html;charset=SHIFT_JIS">
<SCRIPT LANGUAGE="javaScript">
//チェック後Submit
function f_submit(index){
if (prvChecknum(index) == true) {
document.List.submit();
}
}
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function prvChecknum(index)

Dim frmList
Dim txtCheck

Set frmList=Document.List(index)

prvChecknum(index) = true

Set txtCheck = frmList.Elements("txtTAISYOGAI_KUBUN")

if IsNumeric(txtCheck.Value) Or Trim(txtCheck.Value)="" Then
Set txtCheck = NOTHING
Else
msgRet = msgbox ("数値を入力してください。",vbOKOnly,"事務事業評価表システム")
txtCheck.Focus
prvChecknum(index) = false
Exit Function
End IF

End Function
</SCRIPT>
</head>
<link REL="stylesheet" HREF="List.css" TYPE="text/css">
<body>


<%

Dim OraDatabase 'データベース
Dim OraParameters
Dim OraSqlStmt
Dim OraDynaset
Dim OraFields
Dim Ora_Sql_String

Dim strGengo '元号コード
Dim strNendo '年度
Dim JIGYO_KUBUN '事業区分

Dim strSyusesaku_code '主施策コード
Dim strSyozoku_code '所属コード
Dim RecCount
Dim Error_Flag
Dim intCount 'カウンタ
Dim strQueryString
Dim strKessai

Dim strRGengo '引数格納用元号
Dim strRNendo '引数格納用年度
Dim strRJigyo '引数格納用事業区分
Dim strRSyusesaku '引数格納用主施策
Dim strRShincyoku '引数格納用進捗区分
Dim strRSort '引数格納用ソート
Dim strRSyozoku '引数格納用所属コード
Dim strRSQL_ALL '引数格納用SQL_ALL

strSyozoku_Code = ""
strKessai = ""
strRGengo = ""
strRNendo = ""
strRJigyo = ""
strRSyusesaku = ""
strRShincyoku = ""
strRSort = ""
strRSyozoku = ""
strRSQL_ALL = ""


' 初期設定処理
strSyozoku_Code = Request.QueryString("SCODE")
strKessai = Request.QueryString("KESSAIKUBUN")

strRGengo = Request.QueryString("RGENGO")
strRNendo = Request.QueryString("RNENDO")
strRJigyo = Request.QueryString("RJIGYO")
strRSyusesaku = Request.QueryString("RSYUSESAKU")
strRShincyoku = Request.QueryString("RSHINCYOKU")
strRSort = Request.QueryString("RSORT")
strRSyozoku = Request.QueryString("RSYOZOKU")
strRSQL_ALL= Request.QueryString("RSQL_ALL")


'変数の初期化
Error_Flag = False

'OO4O用の設定(Net*8を使用してOracle8に接続する)
Set OraDatabase = OraSession.GetDatabaseFromPool(10)
Set OraParameters = OraDatabase.Parameters

' データ取得プロシージャ設定
' 引数設定
' 歳出事業基本マスタデータカーソル
OraParameters.Add "curGetDataCursor", 0, ORAPARM_BOTH
OraParameters("curGetDataCursor").ServerType = ORATYPE_CURSOR
OraParameters("curGetDataCursor").DynasetOption = ORADYN_NO_BLANKSTRIP
OraParameters("curGetDataCursor").DynasetCacheParams 256, 16, 20, 2000, 0
' 元号コード
OraParameters.Add "SQL_Gengo", space(1), ORAPARM_INPUT
OraParameters("SQL_Gengo").ServerType = ORATYPE_CHAR
' 年度
OraParameters.Add "SQL_Nendo", space(2), ORAPARM_INPUT
OraParameters("SQL_Nendo").ServerType = ORATYPE_CHAR
' 事業区分
OraParameters.Add "SQL_JIGYO_KUBUN", space(1), ORAPARM_INPUT
OraParameters("SQL_JIGYO_KUBUN").ServerType = ORATYPE_CHAR
' 所属コード
OraParameters.Add "SQL_Sozoku_Code", space(6), ORAPARM_INPUT
OraParameters("SQL_Sozoku_Code").ServerType = ORATYPE_CHAR
' 主施策コード
OraParameters.Add "SQL_Syu_Sesaku_Code", space(12), ORAPARM_INPUT
OraParameters("SQL_Syu_Sesaku_Code").ServerType = ORATYPE_CHAR
' 進捗段階
OraParameters.Add "SQL_Shincyoku", space(1), ORAPARM_INPUT
OraParameters("SQL_Shincyoku").ServerType = ORATYPE_CHAR
' ソート順
OraParameters.Add "SQL_Sort", space(1), ORAPARM_INPUT
OraParameters("SQL_Sort").ServerType = ORATYPE_CHAR
' オールかどうか
OraParameters.Add "SQL_ALL", space(3), ORAPARM_INPUT
OraParameters("SQL_ALL").ServerType = ORATYPE_CHAR
' エラーコード
OraParameters.Add "SQL_Error_Code", 0, ORAPARM_OUTPUT
OraParameters("SQL_Error_Code").ServerType = ORATYPE_NUMBER
' エラーメッセージ
OraParameters.Add "SQL_Error_Message", Space(255), ORAPARM_OUTPUT
OraParameters("SQL_Error_Message").ServerType = ORATYPE_CHAR

If Request.QueryString("RSCODE") = "" Then
strSyozoku_Code = Request.QueryString("SCODE")
strKessai = Request.QueryString("KESSAIKUBUN")
Else
strSyozoku_Code = Request.QueryString("RSCODE")
strKessai = Request.QueryString("RKESSAIKUBUN")
End If

If strRGengo = "" Then
OraParameters("SQL_Gengo").value = Request.Form("cmbGengo")
strRGengo = Request.Form("cmbGengo")
Else
'引数に元号が設定されている場合、その元号をセットする。
OraParameters("SQL_Gengo").value = strRGengo
End If

If strRNendo = "" Then
IF IsNumeric(Request.Form("txtNENDO")) Then
OraParameters("SQL_Nendo").value = Request.Form("txtNENDO")
strRNendo = Request.Form("txtNENDO")
Else
OraParameters("SQL_Nendo").value = "00"
strRNendo = "00"
End IF
Else
OraParameters("SQL_Nendo").value = strRNendo
End If

If strRJigyo = "" Then
OraParameters("SQL_JIGYO_KUBUN").value = Request.Form("radio_Jigyo")
strRJigyo = Request.Form("radio_Jigyo")
Else
OraParameters("SQL_JIGYO_KUBUN").value = strRJigyo
End If

If strRSyozoku = "" Then
If Trim(Request.Form("cmbSyozoku")) = "ALL" THEN
OraParameters("SQL_Sozoku_Code").value = strSyozoku_Code
strRSyozoku = strSyozoku_Code
ELSE
OraParameters("SQL_Sozoku_Code").value = Request.Form("cmbSyozoku")
strRSyozoku = Request.Form("cmbSyozoku")
END IF
Else
OraParameters("SQL_Sozoku_Code").value = strRSyozoku
End If

If strRSyusesaku = "" Then
OraParameters("SQL_Syu_Sesaku_Code").value = Request.Form("txtSyu_Sesaku_Code")
strRSyusesaku = Request.Form("txtSyu_Sesaku_Code")
Else
OraParameters("SQL_Syu_Sesaku_Code").value = strRSyusesaku
End If

OraParameters("SQL_Shincyoku").value = 0

If strRSort = "" Then
OraParameters("SQL_Sort").value = Request.Form("cmbSort")
strRSort = Request.Form("cmbSort")
Else
OraParameters("SQL_Sort").value = strRSort
End If

If strRSQL_ALL = "" Then
If Trim(Request.Form("cmbSyozoku")) = "ALL" THEN
OraParameters("SQL_ALL").value = Trim(Request.Form("cmbSyozoku"))
strRSQL_ALL = Trim(Request.Form("cmbSyozoku"))
Else
IF Trim(strSyozoku_Code) = Trim(Request.Form("cmbSyozoku")) Then
OraParameters("SQL_ALL").value = "SEL"
strRSQL_ALL = "SEL"
Else
OraParameters("SQL_ALL").value = "ELSE"
strRSQL_ALL = "ELSE"
End IF
End IF
Else
OraParameters("SQL_ALL").value = strRSQL_ALL
End If


Ora_Sql_String = "Begin Entry_expenditure_PKG.Get_expenditureList_Data ("
Ora_Sql_String = Ora_Sql_String & ":curGetDataCursor,"
Ora_Sql_String = Ora_Sql_String & ":SQL_Gengo, "
Ora_Sql_String = Ora_Sql_String & ":SQL_Nendo, "
Ora_Sql_String = Ora_Sql_String & ":SQL_JIGYO_KUBUN,"
Ora_Sql_String = Ora_Sql_String & ":SQL_Sozoku_Code, "
Ora_Sql_String = Ora_Sql_String & ":SQL_Syu_Sesaku_Code, "
Ora_Sql_String = Ora_Sql_String & ":SQL_Shincyoku, "
Ora_Sql_String = Ora_Sql_String & ":SQL_Sort, "
Ora_Sql_String = Ora_Sql_String & ":SQL_ALL, "
Ora_Sql_String = Ora_Sql_String & ":SQL_Error_Code, "
Ora_Sql_String = Ora_Sql_String & ":SQL_Error_Message"
Ora_Sql_String = Ora_Sql_String & "); end;"

' SQLステートメント作成
Set OraSqlStmt = OraDatabase.CreateSql(Ora_Sql_String, 2) 'ORASQL_FAILEXEC

If OraParameters("SQL_Error_Code") <> 0 Then
Error_Flag = TRUE
Response.Write(OraParameters("SQL_Error_Message"))
Else
Set OraDynaset = OraParameters("curGetDataCursor").value
Set OraFields = OraDynaset.Fields

Response.Write("<CENTER>")
Response.Write("<TABLE border=2 cellPadding=1 cellSpacing=1 width=520>")
Response.Write("<TR>")
Response.write("<TD style='BACKGROUND-COLOR: springgreen' noWrap>&nbsp;&nbsp;&nbsp;&nbsp;</TD>")
Response.write("<TD style='BACKGROUND-COLOR: springgreen' noWrap >事業区分</TD>")
Response.write("<TD style='BACKGROUND-COLOR: springgreen' noWrap>主施策コード</TD>")
Response.write("<TD style='BACKGROUND-COLOR: springgreen' nowrap>事務事業名</TD>")
Response.write("<TD style='BACKGROUND-COLOR: springgreen' nowrap> 年度</TD>")
Response.write("<TD style='BACKGROUND-COLOR: springgreen' nowrap> 主管課</TD>")
Response.write("<TD style='BACKGROUND-COLOR: springgreen' nowrap>優先度</TD>")
Response.write("<TD style='BACKGROUND-COLOR: springgreen' nowrap>評価対象外区分</TD>")
Response.Write("</TR>")

If Not OraDynaset.EOF Then

RecCount = OraDynaset.RecordCount

For intCount = 0 to RecCount - 1

Response.Write("<FORM name=List(" & intCount & ") method=post action=歳出評価表_ListPL.Asp" & strQueryString & " target=RIGHT>")
Response.Write("<TR>")
Response.Write("<TD>歳出</TD>")
Response.Write("<TD>" & OraFields(10).Value & "</TD>")
Response.Write("<TD nowrap>" & EditSyu_Sesaku_Code(OraFields(3).Value) & "</TD>")
Response.Write("<TD nowrap>" & Trim(OraFields(5).Value) & "</TD>")
Response.Write("<TD nowrap>" & OraFields(12).Value & OraFields(13).Value & "年度</TD>")
Response.Write("<TD nowrap>" & OraFields(11).Value & "</TD>")
Response.Write("<TD align=center nowrap>" & OraFields(16).Value & "<br></TD>")
Response.Write("<TD nowrap><INPUT TYPE='text' name=txtTAISYOGAI_KUBUN size=2 maxlength=2 value=" & OraFields(17).Value & "><input TYPE='button' value=更新 onClick=f_submit(" & intCount & ")>")
Response.Write("<INPUT type='hidden' name=txtTAISYO_NENDO value=" & OraFields(0) & ">")
Response.Write("<INPUT type='hidden' name=txtJIGYO_KUBUN value=" & OraFields(1) & ">")
Response.Write("<INPUT type='hidden' name=txtSyusesaku_code value=" & OraFields(3) & "></td>")
Response.Write("</TR>")
Response.Write("</FORM>")
OraDynaset.MoveNext

Next


Response.Write("</TABLE>")
Response.Write("</CENTER>")
END IF
End IF

' インスタンスの解放
OraParameters.Remove "curGetDataCursor"
OraParameters.Remove "SQL_Gengo"
OraParameters.Remove "SQL_Nendo"
OraParameters.Remove "SQL_JIGYO_KUBUN"
OraParameters.Remove "SQL_Sozoku_Code"
OraParameters.Remove "SQL_Syu_Sesaku_Code"
OraParameters.Remove "SQL_Shincyoku"
OraParameters.Remove "SQL_Sort"
OraParameters.Remove "SQL_ALL"
OraParameters.Remove "SQL_Error_Code"
OraParameters.Remove "SQL_Error_Message"

Set OraFields = Nothing
Set OraDynaset = Nothing
Set OraSqlStmt = Nothing
Set OraParameters = Nothing
Set OraDatabase = Nothing
%>

</body>
</html>

ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-08-13 15:33
ちょっとわかりにくい質問ですね。

引用:

納涼床さんの書き込み (2007-08-13 14:34) より:

検証はVBscriptで行おうと思っているのですが、
ボタンを押して処理を実行しようとした時に
ページでスクリプトエラーが発生します。


まずはどういったエラーが発生するのかをはっきりさせることが重要だと思
います。
「スクリプトエラーが発生します」だけではちょっとわかりません。

引用:

フォームはグリッド全体でひとつにして、そこに
各行ごとに「更新」ボタンを配置する案と、
各行ごとにフォームを持たせて、各フォームごとに
ひとつずつ「更新」ボタンを配置する案を検討していて
どちらでもかまいません。


どちらの案を採用するのかどうかを悩んでいらっしゃるのかと思いましたが
(だとしたらそれはそれで別の質問になるのでこのスレッドの話ではないで
すね)「どちらでもかまいません」とあるので、何を知りたいのかちょっとよく
わからないです。

各行ごとにフォームを持たせても実質遷移先は一つでしょうし、そうなると
フォームを分ける意義はあまり感じられません。私であれば、各行ごとの
ボタンに異なる名前をつけて Request.QueryString で特定の名前の
パラメータが送られていたらそのボタンが押されたと判断する方法を取りま
す。
例えば1行目は btn1、2行目は btn2、3行目は btn3 というような名前
をつけて、btn1 が送られていたら1行目のボタンが押されたと判断します。

ところで、ASP.NET ではなく ASP のようですが、その場合
Insider.NET 会議室で妥当なのかどうかちょっと疑問ですね。
VB業務アプリケーション開発研究室 の方が良かったりしないでしょうか。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
未記入
常連さん
会議室デビュー日: 2007/02/21
投稿数: 29
投稿日時: 2007-08-14 12:58
...さ〜〜くじょっと!

[ メッセージ編集済み 編集者: 未記入 編集日時 2007-08-14 16:44 ]
1

スキルアップ/キャリアアップ(JOB@IT)