- - PR -
ASPで複数のSUBMITボタンがある場合の処理
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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> </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> | ||||||||
|
投稿日時: 2007-08-13 15:33
ちょっとわかりにくい質問ですね。
まずはどういったエラーが発生するのかをはっきりさせることが重要だと思 います。 「スクリプトエラーが発生します」だけではちょっとわかりません。
どちらの案を採用するのかどうかを悩んでいらっしゃるのかと思いましたが (だとしたらそれはそれで別の質問になるのでこのスレッドの話ではないで すね)「どちらでもかまいません」とあるので、何を知りたいのかちょっとよく わからないです。 各行ごとにフォームを持たせても実質遷移先は一つでしょうし、そうなると フォームを分ける意義はあまり感じられません。私であれば、各行ごとの ボタンに異なる名前をつけて Request.QueryString で特定の名前の パラメータが送られていたらそのボタンが押されたと判断する方法を取りま す。 例えば1行目は btn1、2行目は btn2、3行目は btn3 というような名前 をつけて、btn1 が送られていたら1行目のボタンが押されたと判断します。 ところで、ASP.NET ではなく ASP のようですが、その場合 Insider.NET 会議室で妥当なのかどうかちょっと疑問ですね。 VB業務アプリケーション開発研究室 の方が良かったりしないでしょうか。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||
|
投稿日時: 2007-08-14 12:58
...さ〜〜くじょっと![ メッセージ編集済み 編集者: 未記入 編集日時 2007-08-14 16:44 ] |
1