こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ASP更新・変更ができない

毎々お世話になってます。
ASP(VBScript)で更新・変更ができないのです。
db.Execute(StrSQL)
部分でエラーになり、
//db.Execute(StrSQL)
を使用しない状態にするとエラーは出ませんが、更新・変更ができません。
<%
//DB接続
Set ObjConn = Server.CreateObject("ADODB.Connection")
ObjConn.Open "Driver={Microsoft Access Driver (*.mdb)};" & _
"DBQ=" & Server.Mappath("dbname.mdb")

// 1. SELECT文:SELECT * FROM テーブル名
// 2. INSERT文:INSERT INTO テーブル名 (フィールド名) VALUES (値)
// 3. UPDATE文:UPDATE テーブル名 SET フィールド名=値
// 4. DELETE文:DELETE * FROM テーブル名
//データ変更
//--- 追加する文字列を変数にセット ---
uID = Request.Form("uID")
uTYPE = Request.Form("uTYPE")
uNAME= Request.Form("uNAME")
uMNAME = Request.Form("uMNAME")

//--- データ変更SQL ---
SQLstr = "UPDATE " & tablename & " SET "
SQLstr = SQLstr & "[uID]=#" & uID & "#,"
SQLstr = SQLstr & "[uTYPE]=" & uTYPE & ","
SQLstr = SQLstr & "[uNAME]=" & uNAME & ","
SQLstr = SQLstr & "WHERE ID=" & uID
//--- データ追加実行 ---
db.Execute(StrSQL)
//DB接続解除

ObjConn.Close
Set ObjConn = Nothing

%>

投稿日時 - 2006-03-26 13:57:42

QNo.2052572

すぐに回答ほしいです

質問者が選んだベストアンサー

お疲れ様です。

提案です。
一度問題点を整理した上で、再度質問を掲載してみませんか?
既にこのスレッドは私以外見られていないと思いますので、もう一度新規にご質問を掲載されることで、より良い回答が得られるかもしれません。

※実は私も問題点がどこなのか判らなくなってきているので、一度整理いただくとありがたいです。(^^;

投稿日時 - 2006-04-13 11:09:17

お礼

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といったようにフィールドを宣言したところうまく行きました。
有難うございました。

投稿日時 - 2006-04-17 20:49:30

このQ&Aは役に立ちましたか?

15人が「このQ&Aが役に立った」と投票しています

回答(12)

ANo.11

お疲れ様です。

Request.QueryString()は、FORMタグでMETHOD=GETを使用した際に、受取り側のページで使用する関数ですので、送り側(FORM側)では値は得られません。
※URLの「?」の後ろの変数の値をASPプログラムで取得するための物です。
用途が違っているため、ご記入された結果になられたのだと思います。

とりあえずMETHOD=GETは忘れていただいても結構です(これはパラメタ確認が簡単という理由で提案しただけです)ので、
(1)uIDが正しく受け渡されている
(2)UPDATE文の内容がACCESSのSQL文法に沿っている
ことを重点にご確認ください。

投稿日時 - 2006-04-05 11:54:46

補足

chinensisさん
いつも有難うございます。
SQL文ですが、再度設定しなおしました。
更に、DIM uID
といったように宣言してみたところエラーは吐かなくはなりましたが、更新できません。
ODBCのトレースをしてもlogは吐き出さない状態です。(T^T)

投稿日時 - 2006-04-10 21:52:43

ANo.10

お疲れ様です。

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)で印字された文をわかる方に検証をお願いします。

投稿日時 - 2006-03-31 17:39:39

補足

<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が問題なような気がしないでもないです。

投稿日時 - 2006-04-04 11:13:51

ANo.9

お疲れ様です。

整理しますと、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が正しく受け渡されるようにしてみてください。
※現在私から言えるのはこのくらいです。

投稿日時 - 2006-03-31 13:34:16

補足

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では表示されません。)

投稿日時 - 2006-03-31 16:16:39

ANo.8

お疲れ様です。

あまり役に立たないアドバイスですが、せっかくソースをご提示いただいているので、ちょっとだけ。

確認画面では、ちゃんとuIDは見えているのでしょうか?

それと、以下の行が変に見えます。
<form ACTION="<%=MM_editAction%>" name="form" METHOD="POST" ="form">

あと、Server.HTMLEncode()は、HTMLとしてブラウザに表示する際に使用しますが、valueで指定する必要はないと思います。(使ってもいいのかもしれませんが、私は使ったことがありませんので)

以上、あまりあてにならないアドバイスばかりで申し訳ありませんが、がんばってください。

投稿日時 - 2006-03-30 18:26:13

補足

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>

投稿日時 - 2006-03-31 10:38:20

ANo.7

お疲れ様です。(月末でバタバタしてます)

入力項目の値が見れたのであれば、同じ要領でSQL文の内容を確認出来ませんか?

そのSQL文を見ることが出来たら、何が間違っているのか判るかもしれませんので、ご確認よろしくお願いします。

投稿日時 - 2006-03-30 11:17:08

補足

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>

投稿日時 - 2006-03-30 15:47:11

ANo.6

お疲れ様です。

最近ASPを書いていないので、Response.Writeの記述を間違えたかもしれません。(--;
要はSQL文の内容(SQLstr変数内の文字列)が正しいか否かが判ればいいので、お手数ですが何とか取り出してみてください。
本日はちょっとこの後忙しいので、明日また回答(アドバイス)を提示させていただきます。
※もはやリモートでデバッグしている感覚です。

投稿日時 - 2006-03-29 17:46:16

補足

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>

投稿日時 - 2006-03-30 09:20:45

ANo.5

お疲れ様です。

No.4の(1)の結果でエラーなしであれば、残る問題点はUPDATE文ということになります。(もう少しです)

SQLstr変数の内容を印字します。以下の3行を<body>と</body>の中に入れてください。(<body>の直後で結構です)
<%
Response.Write "SQLstr = <" + SQLstr + ">"
%>
このSQL文が期待通りであれば、後はテーブル内の項目の名前、属性とのマッチングを確認します。
(Accessの場合に文字列を指定する方法が正しいか等)

がんばってください。

投稿日時 - 2006-03-29 15:53:11

補足

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 おねがいします。

投稿日時 - 2006-03-29 16:44:03

お礼

chinensisさん
失礼しました。
エラーは表示されませんが、画面上部にSQLstr=が表示され、変更しました。画面が表示されましたが、データは更新できません。もう少しなんですけどね

投稿日時 - 2006-03-29 17:32:39

ANo.4

#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文の内容を印字して確認する。

以上、結果が出ましたらご面倒でしょうがお知らせください。

投稿日時 - 2006-03-29 14:46:41

補足

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>

投稿日時 - 2006-03-29 15:16:56

ANo.3

#1&2です。

解説込みで。

Set ObjConn = Server.CreateObject("ADODB.Connection")
この行でObjConnと言う名前のコネクションオブジェクトを作成しています。

ObjConn.Open
この行でOpenメソッドを使用してコネクションをオープンしています。

ご質問では
db.Execute(StrSQL)
でStrSQL変数に記述されたSQL文を実行しようとしていますが、いかんせん指定しているオブジェクト名が「db」になっていますので、
ObjConn.Execute(StrSQL)
としなければ、オープンしたコネクションになりません。

すなわち、「db」を「ObjConn」に変更すればいいと思われます。

投稿日時 - 2006-03-29 13:02:29

補足

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
%>

投稿日時 - 2006-03-29 13:54:21

ANo.2

db.Execute()でエラーになっていませんか?

ご提供いただいたURLの例題では
ObjConn.Execute(StrSQL)
と、ObjConnオブジェクトを使用していますので、
多分「db」オブジェクトが無いとされていると思います。

投稿日時 - 2006-03-29 09:50:43

補足

chinensisさん
毎々有難うございます。感謝感謝です。
ずばりchinensisさんの言う通り、db.Execute()でエラーでエラーになっています。ObjConnをDBConnにするのでしょうか。
イマイチ分からずじまいです。もう少し教えてください。m(._.)m おねがいします

投稿日時 - 2006-03-29 11:00:39

ANo.1

uNAMEとWHEREの間のカンマが不要?

一度お試しください。(ここに文法上カンマは無いはず)

投稿日時 - 2006-03-28 14:04:41

補足

chinensisさん
有難うございます。
カンマをはずしてみましたが、うまくいきません。(T^T)
何か他におかしいのでしょうか。
http://asp.dataweb.ne.jp/text/new_page_23.htmのサイトの変更も試したのですが動かないです。(実行時エラー、オブジェクトがありません)
<%@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 &";"
//--- データ追加実行 ---
db.Execute(SQLstr)

ObjConn.Close
Set ObjConn = Nothing
%>

投稿日時 - 2006-03-28 17:10:37

あなたにオススメの質問