- ベストアンサー
ASP更新・変更ができない
- ASP更新・変更ができず、エラーが発生する
- ASP(VBScript)でのデータ更新・変更に関するエラーを解決したい
- db.Execute(StrSQL)を使用するとエラーが発生し、更新・変更ができない
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
お疲れ様です。 提案です。 一度問題点を整理した上で、再度質問を掲載してみませんか? 既にこのスレッドは私以外見られていないと思いますので、もう一度新規にご質問を掲載されることで、より良い回答が得られるかもしれません。 ※実は私も問題点がどこなのか判らなくなってきているので、一度整理いただくとありがたいです。(^^;
その他の回答 (11)
- chinensis
- ベストアンサー率40% (54/132)
お疲れ様です。 Request.QueryString()は、FORMタグでMETHOD=GETを使用した際に、受取り側のページで使用する関数ですので、送り側(FORM側)では値は得られません。 ※URLの「?」の後ろの変数の値をASPプログラムで取得するための物です。 用途が違っているため、ご記入された結果になられたのだと思います。 とりあえずMETHOD=GETは忘れていただいても結構です(これはパラメタ確認が簡単という理由で提案しただけです)ので、 (1)uIDが正しく受け渡されている (2)UPDATE文の内容がACCESSのSQL文法に沿っている ことを重点にご確認ください。
補足
chinensisさん いつも有難うございます。 SQL文ですが、再度設定しなおしました。 更に、DIM uID といったように宣言してみたところエラーは吐かなくはなりましたが、更新できません。 ODBCのトレースをしてもlogは吐き出さない状態です。(T^T)
- chinensis
- ベストアンサー率40% (54/132)
お疲れ様です。 METHOD=GETで、パラメタがアドレス部分に「?~」で追加されて表示されますので、ご指摘いただいたとおりの結果でOKです。 METHOD指定を変更すると、変数取り出し方法が変わりますので(GETではRequest.QueryStringを用います)、パラメタの確認が終わりましたらPOSTに戻していただいて結構です。 どうやら「uID=2(数値)」が上手く取り扱えていないようですね。 現在のSQL文は、 SQLstr = "UPDATE tablename SET " SQLstr = SQLstr & "uID =" & uID &"," SQLstr = SQLstr & "uTYPE ='" & uTYPE & "'," SQLstr = SQLstr & "uNAME ='" & uNAME & "'" SQLstr = SQLstr & "WHERE uID =" & uID &";" で作成されているとすれば、 UPDATE tablename SET uID =2,uTYPE ='てすと',uNAME ='てすと'WHERE uID =2; となります。(WHEREの前にデリミタが無いのが気になりますが)これがhenkou.aspで確認とれなければなりません。 ※しかし、これがAccessで正しいSQL文であるかどうか、申し訳ありませんが少し判りかねています。(各DB項目の属性と絡みますので) 出来ましたら、 (1)METHOD=POSTに戻し、 (2)henkou.aspでuIDに値が入っていることを確認し、 (3)作成されたSQL文が表示されることを確認してください。 ※Accessの正しいSQL文記述(属性ごとの値の指定方法)が私はあまり詳しくないので、(3)で印字された文をわかる方に検証をお願いします。
補足
<td width="125">uID</td> chinensisさん 毎々大変有難うございます。 色々と試しました。 <td>width="357"> <input name="uID" type="hidden" id="uID" value="<%=equest.QueryString("uID")%>"><%Request("uID")%></td></tr> とすると http://localhost/henkou.asp?uID=&uTYEP=&・・・・・・ となり入力値は表示されません。 <%= Request("uID")%><input name="uID" type="hidden" id="uID" value="<request("uID"%>とすると表示されます。 なんとなく、henkou.aspが問題なような気がしないでもないです。
- chinensis
- ベストアンサー率40% (54/132)
お疲れ様です。 整理しますと、uIDは、 ・kakuninn.aspでは正しく表示されている ・henkou.aspではResponse.Writeで正しく表示されない ということでしょうか? インタフェースを簡単に確認方法として、FORMのMETHOD=POSTをMETHOD=GETとすると、切り替えられたページのアドレスにパラメタが表示されますので、それを参照するのも手段のひとつです。 とりあえず、現段階の目標を「uIDを正しくhenkou.aspに渡す」ことに専念して、 ・uIDのvalue設定からHTMLEncodeを外す ・METHOD=GETとして内容をアドレスで確認する ・henkou.asp内でResponse.Writeによる印字で確認する 等を行って、uIDが正しく受け渡されるようにしてみてください。 ※現在私から言えるのはこのくらいです。
補足
chinensisさん お疲れ様です。 有難うございます。 kakunin.asp,henkou.aspとも正しく表示されています。 ・uIDのvalue設定からHTMLEncodeを外しました ・METHOD=GETとして内容をアドレスで確認する METHODをGETに切り替えても、http://localhost/henkou.asp?uID=2&uTYPE=%82T%82%~~~と表示されます。 ・henkou.asp内でResponse.Writeによる印字で確認する ・METHOD=postにしたところhenkou.asp内で印字されます。(getでは表示されません。)
- chinensis
- ベストアンサー率40% (54/132)
お疲れ様です。 あまり役に立たないアドバイスですが、せっかくソースをご提示いただいているので、ちょっとだけ。 確認画面では、ちゃんとuIDは見えているのでしょうか? それと、以下の行が変に見えます。 <form ACTION="<%=MM_editAction%>" name="form" METHOD="POST" ="form"> あと、Server.HTMLEncode()は、HTMLとしてブラウザに表示する際に使用しますが、valueで指定する必要はないと思います。(使ってもいいのかもしれませんが、私は使ったことがありませんので) 以上、あまりあてにならないアドバイスばかりで申し訳ありませんが、がんばってください。
補足
chinensisさん お疲れ様です。 <form ACTION="<%=MM_editAction%>" name="form" METHOD="POST" ="form">はDreamWeaverで編集した際のゴミです。失礼しました。 確認画面ではUIDは見えます。ソースにも表示されています。 kensaku.asp→open.asp→kousin.asp→kakunin.asp→henkou.asp まで問題なく内容は表示されます。 受け渡しの部分の問題なのでしょうか。それともデータベースに接続できていないのでしょうか。色々試している最中です。 ----kakunin.asp---- <td width="357"><%= Server.HTMLEncode( Request("uID") ) %> <input name="uID" type="hidden" id="ID" value="<%= Server.HTMLEncode( Request("uID") ) %>"></td> </tr> ----kousin.asp---- <tr><td width="200">uID </td><td width="280"><input type="hidden" size="70" name="uID" value="<%= DBexe("uID")%>"><%= DBexe("uID")%> </td></tr>
- chinensis
- ベストアンサー率40% (54/132)
お疲れ様です。(月末でバタバタしてます) 入力項目の値が見れたのであれば、同じ要領でSQL文の内容を確認出来ませんか? そのSQL文を見ることが出来たら、何が間違っているのか判るかもしれませんので、ご確認よろしくお願いします。
補足
chinensisさん 毎々お世話になります。 SQL文ですが <% Response.Write "SQLstr = <" + SQLstr + ">" %>で試すと下記のように表示されます。 SQLstr= uID: uTYPE:てすと uNAME:てすと 今日気がついたのですが、henkou.asp画面において前のkakuninn.aspページのuIDに表示している内容を表示することができません。 この部分が問題なのでしょうか。 ----kakunin.asp---- <form method="POST" action="henkou.asp"> <form ACTION="<%=MM_editAction%>" name="form" METHOD="POST" ="form"> <table width="494" border="1"> <tr><td width="125">uID </td> <td width="357"><%= Server.HTMLEncode( Request("uID") ) %> <input name="uID" type="hidden" id="uID" value="<%= Server.HTMLEncode( Request("uID") ) %>"></td></tr> <tr><td>TYPE </td> <td><%= Server.HTMLEncode( Request("uTYPE") ) %> <input name="uTYPE" type="hidden" id="uTYPE" value="<%= Server.HTMLEncode( Request("uTYPE") ) %>"></td></tr> <tr><td>uNAME </td> <td><%= Server.HTMLEncode( Request("uNAME") ) %> <input name="uNAME" type="hidden" id="uNAME" value="<%= Server.HTMLEncode( Request("uNAME") ) %>"></td></tr> </tr> <tr><td> </td><td align="right"><input type="submit" value="登録" onClick='return checkForm()'> </td></tr><br></table> <input type="hidden" name="form" value="go"> <input type="hidden" name="MM_insert" value="form"> </form><br><tr></tr></table><br>
- chinensis
- ベストアンサー率40% (54/132)
お疲れ様です。 最近ASPを書いていないので、Response.Writeの記述を間違えたかもしれません。(--; 要はSQL文の内容(SQLstr変数内の文字列)が正しいか否かが判ればいいので、お手数ですが何とか取り出してみてください。 本日はちょっとこの後忙しいので、明日また回答(アドバイス)を提示させていただきます。 ※もはやリモートでデバッグしている感覚です。
補足
chinensisさん お疲れ様です。 本当に毎々即レス有難うございます。 リモートでも出来たらと思うくらいですよね(^_^;) Response.Write "<p>uID:" & uID にて取り出しは出来ました。 変更した内容が表示されましたが、データベースには変更がかかっていない状態です。 <body> <% Response.Write "<p>uID:" & uID Response.Write "<p>uTYPE:" & uTYPE Response.Write "<p>uNAME:" & uNAME %> <h1>変更しました。</h1><br> <a href="./kensaku.asp">戻る</a> </body>
- chinensis
- ベストアンサー率40% (54/132)
お疲れ様です。 No.4の(1)の結果でエラーなしであれば、残る問題点はUPDATE文ということになります。(もう少しです) SQLstr変数の内容を印字します。以下の3行を<body>と</body>の中に入れてください。(<body>の直後で結構です) <% Response.Write "SQLstr = <" + SQLstr + ">" %> このSQL文が期待通りであれば、後はテーブル内の項目の名前、属性とのマッチングを確認します。 (Accessの場合に文字列を指定する方法が正しいか等) がんばってください。
お礼
chinensisさん 失礼しました。 エラーは表示されませんが、画面上部にSQLstr=が表示され、変更しました。画面が表示されましたが、データは更新できません。もう少しなんですけどね
補足
chinensisさん お忙しい中有難うございます。 //--- データ追加実行 --- ObjConn.Execute("select * from tablename") ObjConn.Close Set ObjConn = Nothing %> <html><head><title>変更完了</title></head><body> <% Response.Write "SQLstr = <" + SQLstr + ">" %> <h1>変更しました</h1><a href="./kensaku.asp"></body></html> としましたが、Microsoft VBScriptコンパイルエラー(0x800A400)ステートメントがありません。と表示されてしまいます。 m(._.)m おねがいします。
- chinensis
- ベストアンサー率40% (54/132)
#1,2,3です。 手元にASP関係の資料が無いので、記憶のみをたよりに回答を書いています。ご容赦ください。 ちょっと動作確認になりますが、SQL文を簡単にしてみて、DBとの接続が正しく出来ているか確認してみませんか? 方法として、 (1)「ObjConn.Execute('select * from tablename')」を「ObjConn.Execute(SQLstr)」と置き換えて実行。 OK→(2)へ NG→以下のチェック ・DB名称「dbname.mdb」は存在するか? ・テーブル名称「tablename」テーブルがdbname.mdb内に存在するか? ・Accessへのコネクションストリングは合っているか? (2)(selectでOKだった場合)実行しようとしているupdate文の内容を印字して確認する。 以上、結果が出ましたらご面倒でしょうがお知らせください。
補足
chinensisさん 毎々有難うございます。 ご指示の通り(1)の方法を行いましたがエラーは出ませんでしたが、更新できません。 db名、テーブル名とも存在します。(>_<) <%@LANGUAGE="VBSCRIPT"%> <% Set ObjConn = Server.CreateObject("ADODB.Connection") ObjConn.Open "Driver={Microsoft Access Driver (*.mdb)};" & _ "DBQ=" & Server.Mappath("dbname.mdb") //================================================= //----- データ変更 //================================================= //--- 追加する文字列を変数にセット --- uID = Request.Form("uID") uTYPE = Request.Form("uTYPE") uNAME= Request.Form("uNAME") //--- データ変更SQL --- SQLstr = "UPDATE tablename SET " SQLstr = SQLstr & "uID =" & uID &"," SQLstr = SQLstr & "uTYPE ='" & uTYPE & "'," SQLstr = SQLstr & "uNAME ='" & uNAME & "'" SQLstr = SQLstr & "WHERE uID =" & uID &";" //--- データ追加実行 --- ObjConn.Execute("select * from tablename") ObjConn.Close Set ObjConn = Nothing %> <html><head><title>変更完了</title></head><body><h1>変更しました</h1><a href="./kensaku.asp"></body></html>
- chinensis
- ベストアンサー率40% (54/132)
#1&2です。 解説込みで。 Set ObjConn = Server.CreateObject("ADODB.Connection") この行でObjConnと言う名前のコネクションオブジェクトを作成しています。 ObjConn.Open この行でOpenメソッドを使用してコネクションをオープンしています。 ご質問では db.Execute(StrSQL) でStrSQL変数に記述されたSQL文を実行しようとしていますが、いかんせん指定しているオブジェクト名が「db」になっていますので、 ObjConn.Execute(StrSQL) としなければ、オープンしたコネクションになりません。 すなわち、「db」を「ObjConn」に変更すればいいと思われます。
補足
chinensisさん 解説込み即レス有難うございます。 早速、「db」を「ObjConn」に変更しましたが、0x80040E0C CommandオブジェクトのCommandTextが設定されていません。とエラーが表示され、ObjConn.Execute(StrSQL)の部分の行数が太字で表示されています。 お手上げ状態です。度々申し訳ありませんが教えてください。 <%@LANGUAGE="VBSCRIPT"%> <% Set ObjConn = Server.CreateObject("ADODB.Connection") ObjConn.Open "Driver={Microsoft Access Driver (*.mdb)};" & _ "DBQ=" & Server.Mappath("dbname.mdb") //================================================= //----- データ変更 //================================================= //--- 追加する文字列を変数にセット --- uID = Request.Form("uID") uTYPE = Request.Form("uTYPE") uNAME= Request.Form("uNAME") //--- データ変更SQL --- SQLstr = "UPDATE tablename SET " SQLstr = SQLstr & "uID =" & uID &"," SQLstr = SQLstr & "uTYPE ='" & uTYPE & "'," SQLstr = SQLstr & "uNAME ='" & uNAME & "'" SQLstr = SQLstr & "WHERE uID =" & uID &";" //--- データ追加実行 --- ObjConn.Execute(SQLstr) ObjConn.Close Set ObjConn = Nothing %>
- chinensis
- ベストアンサー率40% (54/132)
db.Execute()でエラーになっていませんか? ご提供いただいたURLの例題では ObjConn.Execute(StrSQL) と、ObjConnオブジェクトを使用していますので、 多分「db」オブジェクトが無いとされていると思います。
補足
chinensisさん 毎々有難うございます。感謝感謝です。 ずばりchinensisさんの言う通り、db.Execute()でエラーでエラーになっています。ObjConnをDBConnにするのでしょうか。 イマイチ分からずじまいです。もう少し教えてください。m(._.)m おねがいします
- 1
- 2
お礼
chinensisさん お返事遅くなりごめんなさい。 あれから色々と作り直した所できました。 色々とお世話になりました。 確認画面の内容を<form method="POST" action="henkou.asp"> <form ACTION="<%=MM_editAction%>" name="stamform" METHOD="POST" ="stamform"> <table width="494" border="1"> <tr><td width="125">ID </td> <td width="357"><%= Server.HTMLEncode( Request("uID") ) %> <input name="ID" type="hidden" id="ID" value="<%= Server.HTMLEncode( Request("uID") ) %>"></td> </tr>として、henkou.aspでDim uIDといったようにフィールドを宣言したところうまく行きました。 有難うございました。