• 締切済み

データの更新(修正)ができません

恐れ入ります。 ACCESS (mdb)でIIS環境にてASPを使ってwebアプリを作成しようとしています。 データの登録、削除まではうまくいっているのですが、更新(修正)ができません。 やりたいことは、データの内容の詳細が表示されている画面から、更新ボタンを押すと、更新フォームに移動、更新用フォームにはあらかじめデータの登録内容が表示されていて、内容を更新し、ボタンをクリックすると、データが更新される。です。 更新用ページは以下のように表示させました。 ---------------------------------------------------------------- <% Sub koushin() %> <% sCoString = "DBQ=" & Server.MapPath("./FAQdatabase.mdb") & ";" sCoString = sCoString & "DefaultDir=" & Server.MapPath("./") & ";" sCoString = sCoString & "Driver={Microsoft Access Driver (*.mdb)};DriverId=25;" sCoString = sCoString & "FIL=MS Access;ImplicitCommitSync=Yes;" sCoString = sCoString & "MaxBufferSize=512;MaxScanRows=8;PageTimeout=5;" sCoString = sCoString & "SafeTransactions=0;Threads=3;UserCommitSync=Yes;" Set cn = Server.CreateObject("ADODB.Connection") cn.Open sCoString sSQL = "SELECT * FROM メインテーブル where id = " & Request("key") Set rs = Server.CreateObject("ADODB.Recordset") rs.Open sSQL, cn, 3, 3,1 %> <form action="Correction.asp" method="POST" name="correction"> <p>ID(変更不可):<br> <input type="text" size="50" name="ID" readonly value="<% = rs("ID") %>"> <p>案件名:<br> <input type="text" size="50" name="category" value="<% = rs("category") %>"></p> <p> 件名:<br> <input type="text" size="50" name="title" value="<% = rs("title") %>"></p> <p>本文:<br> <textarea name="text" cols="50" rows="20"><% = rs("text") %></textarea></p> <p> <input type="submit" value="送信する"> <input type="reset" value="リセット"> </p></form> ------------------------------------------------------- 更新用スクリプトは以下のようにしました <% sCoString = "DBQ=" & Server.MapPath("./FAQdatabase.mdb") & ";" sCoString = sCoString & "DefaultDir=" & Server.MapPath("./") & ";" sCoString = sCoString & "Driver={Microsoft Access Driver (*.mdb)};DriverId=25;" sCoString = sCoString & "FIL=MS Access;ImplicitCommitSync=Yes;" sCoString = sCoString & "MaxBufferSize=512;MaxScanRows=8;PageTimeout=5;" sCoString = sCoString & "SafeTransactions=0;Threads=3;UserCommitSync=Yes;" Set cn = Server.CreateObject("ADODB.Connection") cn.Open sCoString sSQL = "SELECT * FROM メインテーブル where id = " & Request("key") Set rs = Server.CreateObject("ADODB.Recordset") rs.Open sSQL, cn, 3, 3, 1 RS("category") = REQUEST.FORM("category") RS("title") = Request.Form("title") RS("text") = Request.Form("text") rs.UpDate %> 修正されました。 ------------------------------------------------------- エラーとしては、「クエリ式 'id =' の 構文エラー : 演算子がありません。 」と表示されます。 なんとか御力をお貸し願えませんでしょうか。

みんなの回答

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

こんにゃくはございます。(何。 一般的に、朝はドタバタする人間が多く、自分も例外では無いため、短めな回答で。 >>sSQL = "SELECT * FROM メインテーブル where id = " & Request("key") 更新用スクリプト~の方のコレ。 ホント、SQL文組めてます? 「request("key")」するのはいいですけど、本当に取得出来ているかが疑問です。(送信してるかは、質問文中からじゃ分からない感じなので。 とりあえず、そこらじゅうに、「response.write」を突っ込んで、本当に値のやり取りが出来ているか確認するのがこういうときのお約束です。 後は、必要そうでしたらまた補足させていただきたいと思います。

arimasouitirou
質問者

お礼

試行錯誤の結果なんとかなりました。ありがとうございました。

関連するQ&A

  • エクセルファイルのadoでの編集

    下記のようにエクセルのレコード編集をこころみていますが 下記のように氏名に重複があると、重複レコードが一緒に編集されてしまいます。アドバイスをいただけないでしょうか。「加藤」さんのほうは問題なく編集できます。 id,氏名,住所 15,山田太郎,東京都 18,山田太郎,栃木県 20,加藤太郎,岩手県 sCoString = "DBQ=" & Server.MapPath("" & Session("DB") & "") & "; ReadOnly=False;" sCoString = sCoString & "DefaultDir=" & Server.MapPath("./") & ";" sCoString = sCoString & "Driver={Microsoft Excel Driver (*.xls)};" Set cn = Server.CreateObject("ADODB.Connection") cn.Open sCoString sSQL = Session("SR") & " where id = " & Request("key") Set rs = Server.CreateObject("ADODB.Recordset") rs.Open sSQL, cn, 3, 3, 1 For i = 0 to rs.fields.count - 1 'Each Fld in Rs.fields If rs.fields(i).name <> "id" Then Response.write getcgivalue(rs.fields(i).name) & "<BR>" rs(rs.fields(i).name) = getcgivalue(rs.fields(i).name) End if next rs.UpDate function getcgivalue(str) getcgivalue= Request.Form(str) 'POST if getcgivalue="" then getcgivalue= Request.QueryString(str) 'GET end function

  • DBの更新??

    ソースは下記です。 Set db=Server.CreateObject("ADODB.Connection") db.Provider="Microsoft.Jet.OLEDB.4.0" db.Mode=2 db.ConnectionString=Server.MapPath("../../script/db_dat/crv_haken.mdb") db.Open Set rs=db.Execute("select * from control " ) rs("day-upd") = Request.Form("編集担当") rs("tanto-upd") = date rs.update rs.Close db.Close Set db=Nothing で・・・実行しますと エラー タイプ ADODB.Recordset (0x800A0CB3) 現在の Recordset は更新をサポートしていません。プロバイダか、選択されたロックタイプの限界の可能性があります。 のメッセージがでます。 何が原因でしょうか?お教えください。

  • JScriptでDBへの接続方法について

    JScriptを使用してDBへの接続方法を教えて下さい。 var conn = Server.CreateObject("ADODB.Connection"); var rs = Server.CreateObject("ADODB.Recordset"); conn.Open; rs.Open("sheet2", "DRIVER={Microsoft Excel Driver (*.xls)}; DBQ =" + Server.Mappath("tes.xls")); sSQL = "SELECT * FROM sheet2"; からの接続がうまくいきません。 どこがいけないのでしょうか? それとも、全てがいけないのでしょうか? よろしければ、どなたかご教授下さい。 お願いします。

  • ASPによる アクセス2000のデータベース更新について

    アクセス2000で作成したデータベースに ASPでデータベースを更新しようとしたのですが、エラーとなって更新できずにいます。 (アクセスデータベース内容) ID F1 F2 1 TEST1 TEST2 2 1 2 3 4 5 4 23 ※ID の 5  に 23 を登録したい。 (ASP内容) <% ' データベースへの接続を開始 Set cn = Server.CreateObject("ADODB.Connection") cn.Open "Driver={Microsoft Access Driver (*.mdb)}; " & _ "DBQ=" & Server.Mappath("TESTdb1.mdb") cn.Execute"INSERT INTO TTT(ID,F1) VALUES(5,23);" %> (エラー内容) エラー タイプ Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [Microsoft][ODBC Microsoft Access Driver] 更新可能なクエリであることが必要です。 /SQL-TEST/ncsch1.asp, line 7 アクセスの追加クエリで、INSERT INTO TTT(ID,F1) VALUES(5,23); を 実行したら、問題無く 5 23 が登録できましたので、データベース自体に他からの実行の場合、更新出来ないような 設定になっていると思うのですが、対処方法がわかりません。 どうすればよいか教えて頂けないでしょうか?

  • JScriptでDBへの書き込み方法

    フォームの値をDBへ書き込みたいのですが、エラーになってしまいます。 tes.aspのフォームからw_com.aspで処理し、tes.aspへもどるということが やりたいのですが、どなたかご教授ください。 エラーは、w_com.aspのconn.Execute(sSQL);で落ちているようなのですが 書き方に問題があるのでしょうか? SQL文自体は平気でした。(クライアントで動かしたところ) また、Response.Redirect("tes.asp");というのは、使用できないのでしょうか?使用できないとしたら、どのような方法でしたらできるのでしょうか? 乱筆で申し訳ありませんが、ご教授願います。 宜しくお願い致します。 === tes.asp === <form name="frm2" method="post" action="w_com.asp"> <input type=hidden name="test1"> <input type=Button value=a onclick="a()"> </form> </body> </html> <script> function a(){ btn_onclick3(); document.frm2.submit(); } </script> === w_com.asp === <%@ language=JScript %> <% var sSQL = Request.Form("test1"); var conn = Server.CreateObject("ADODB.Connection"); var rs = Server.CreateObject("ADODB.Recordset"); conn.ConnectionString = "DRIVER={Microsoft Excel Driver (*.xls)}; DBQ=" + Server.Mappath("tes.xls"); conn.Open; conn.Execute(sSQL); conn.Close; Response.Redirect("tes.asp"); %>

  • Response.Writeを使用して更新するには

    いつもお世話になってます。 前のページでIDで検索し、更新ボタンをクリックするとkousin.aspへ表示しているIDのレコードをそのまま表示して更新をしたいのですがうまくいきません。 Response.Writeのせいでしょうか?宜しくお願いします。 <%@LANGUAGE="VBSCRIPT"%> <% Dim ObjConn,ObjRS pickup = Request.Form("uID") MSACFN = Server.MapPath("dbname.mdb") DBFile="Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MSACFN Set ObjConn = Server.CreateObject("ADODB.Connection") Set ObjRS = Server.CreateObject("ADODB.Recordset") ObjConn.Open DBFile sql="select * from tablename where uID = '"&pickup&"'" Set DBexe = ObjConn.Execute(sql) ObjRS.CursorLocation = 3 ObjRS.Open "select * from tablename" ,ObjConn,3,3 Response.Write "<form method=""POST"" action=""kousin.asp"">" Response.Write "<table width=""519"" border=""1"">" Response.Write "<tr>" Response.Write "<tr><td>" & ("ID") & "</td><td>" & ObjRS("uID") & "</td></tr>" Response.Write "<tr><td>" & ("氏名") & "</td><td>"& ObjRS("uNAME") & "</td></tr>" Response.Write "<tr><td>" & "<input type=""hidden"" value=""uID""><input type=""submit"" value=""更新"" onClick='return checkForm()'><input type=""button"" onclick=""del.asp""name=""削除"" value=""削除""></td>" Loop Response.Write "</table>" ObjRS.close Set ObjRS=Nothing ObjConn.close Set ObjConn=Nothing %>

  • ソートの設定

    ASPでアクセス97を使って品番、納期という順番に表示させたいのですが うまくいきません。 SQL文を使って品番順にはならんだのですが、納期がばらばらになってしまいます。どうしたら品番、納期順という並びになるか教えて下さい。 Dim Conn,SQL,RS xxxx=server.mappath("*****.mdb") DBName="Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & xxxx Set Conn = Server.CreateObject("ADODB.Connection") Conn.open DBName SQL = "select * from ******" SQL = SQL & " order by 品番 asc" set RS = Server.CreateObject("ADODB.Recordset") RS.Open SQL, Conn,3,3

  • レコードの更新の記述について

    フォームを作成しています。(mdbです。) 現在、webから編集できるページを作成しています。 お聞きしたいのは管理画面です。 管理画面で「削除」、「新規登録」、「編集」この3つを作成しています。 今は新規登録と、削除は作成・表示ともに成功しました。 が、「編集」がわからないのです。 編集のページは削除のページと同じようなレイアウトにしました。 しかしながら更新の記述がわからないんです…。 削除の場合は SQL = "Delete * FROM [link] where [ID] = (" & p_del&")" というので削除することができました。 レコードの更新はupdateを使う、というのはわかったんですが、ど ういう感じになるか教えていただけないでしょうか。 本を読んで実際にやってみても「update」と載っているくらいで あまり説明もあり理解できませんでした。 よろしくお願いします。 ---------------------------------------- 少しですが記述載です。 db1=server.mappath("link.mdb") DBName="Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & db1 Set Conn = Server.CreateObject("ADODB.Connection") Conn.open DBName SQLD = "Delete * FROM [link] where [ID] = (" & p_hensyu&")" Conn.Execute(SQLD)

  • セレクトしたデータを更新させるにはどうしたらよろしいのでしょうか?

    更新されません。 セレクトしたデータをそのまま更新させようとしているからいけないのでしょうか? <% Dim DB,Rs,Cmd Set DB = Server.createobject("ADODB.Connection") On error Resume Next DB.open "mysql" DB.BeginTrans Set Cmd=Server.createobject("ADODB.command") Cmd.activeconnection=db Cmd.commandtext="select * from stb where id =1" Set Rs = Cmd.Execute i=cint(1) j="ADSL" Do until Rs.eof Rs("id"),value= i Rs("name").value= j Rs.update If DB.Errors.Count >0 then DB.Rollbacktrans response.write "エラー" for idx = 0 to 2 Response.write db.errors(idx).Description & "<br>" next else DB.commitTrans response.write "データが登録されました。" end if Rs.movenext Loop Rs.close DB.close set Cmd = Nothing set Rs = Nothing set db = Nothing %>

  • フォームで複数の条件を入力させて、その条件に対してクエリを組みなおして、結果を出力したい

    以下のフォームを作成しました。 ************1.html************ <form method="POST" action="2.asp"> <table> <tr> <td>氏名</td> <td><input name="simei" file" type="text"></td> </tr> <tr> <td>住所</td> <td><input name="jusho" file" type="text"></td> </tr> <tr> <td>TEL</td> <td><input name="tel" file" type="text"></td> </tr> </table> <input type="submit" value="検索"> 次に入力された値をクエリに入れて、結果を出力しようとしています。 入力された項目が、 空欄の場合は、条件に入れない、 複数の場合は、条件を複数にする、 というようにしたいです。 ************2.asp************ simei = Request.Form("simei") jusho = Request.Form("jusho") tel = Request.Form("tel") Set db=Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" db.ConnectionString = Server.MapPath("test.mdb") db.open ……クエリを1.htmlで入力された条件のみを反映させたい…… ……が、その書き方がわからない………………………………… Set rs = db.Execute("SELECT テーブル名.* FROM テーブル名 WHERE ((テーブル名.氏名)='" & simei & "')") ……条件が”氏名”だけの場合ならできるのですが、フォームで入力された項目のみを反映させる方法がわからない…………………………… ………………クエリ結果を出力する……………… Response.Write ("" & rs.Fields.Item("氏名") & "") 宜しくお願いします。