dポイントプレゼントキャンペーン実施中!

更新されません。
セレクトしたデータをそのまま更新させようとしているからいけないのでしょうか?
<%
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
%>

A 回答 (3件)

いきなりUpdate文を発行してはいけないのでしょうか?


Update stb set name = 'ADSL' where id = 1
処理内容をみるに、Selectする必要性が感じられないのですが。

掲載内容を直すのであれば、
Rs("id"),value= i

Rs("id").value= i
で大丈夫かと。

この回答への補足

SelectしたのはSelectした行を更新させたいからです。
Update stb set name = 'ADSL' where id = 1にしたら
Selectしなくても、Selectしてくれますが

Rs("id").value= i
Rs("name").value=j
Rs.update
の場合だとSELECTしないと、Idにあったデータを更新
してくれないと考えたからです。
他に方法があればぜひ教えてください。

補足日時:2006/05/02 12:23
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
それではデータが更新されませんでした。
CMDの処理をRecordsetに変更してコードを書いたら
正常に動作しました。
よくわかりませんが、CMDの処理で、データ更新はできるのでしょうか?

お礼日時:2006/05/01 15:38

RecordsetのLockTypeがReadOnlyになっているみたいです。


こちらで試してみましたが、変更することができず、更新できませんでした。
DB.ExecuteでUpdate文を投げる方法がやはり無難かもしれません。
回答ならずすみませんでした。

追記。
Loopの外でBeginTransをしている場合、RollbackTrans、CommitTransもLoopの外で行うようにしてくださいね。
    • good
    • 0

#1です。


id=1の条件でSelectしているので、Recordsetに入ってくるデータはid=1のデータのみですよね。
なので、Selectする必要はなく、直接Updateを発行してしまえばよいのでは? と思ったわけです。
Select→RecordsetでUapdateだと2度手間になってしまうじゃないですか。
Updateの発行はこの場合、
db.Execute("Update stb set name = 'ADSL' where id = 1")
だけでできたと。
whereでid=1と条件つけていますから、この条件にあったデータのみUpdateされます。

この回答への補足

回答ありがとうございます。
すこし長いのですが、教えて頂きたいことがあります。
txtファイルには
1,ADSL
2,ISDN
といったデータが入ってます。
データベースは
ID,NAMEになっています。

Update set のSQL分では更新させることができましたが、
Rs("id")=arystr(0)
Rs("name")=arystr(1)
Rs.update
の場合では更新されません、
何故なのでしょうか?
また、Rs("id")=arystr(0)
Rs("name")=arystr(1)
Rs.update
の場合を利用して更新させるには
どうやれば更新させることができますか?
教えてください。
よろしくお願いします。
<%
Dim DB,Rs,Cmd
Set DB = Server.createobject("ADODB.Connection")
On error Resume Next
DB.open "mysql"
DB.BeginTrans
Set Rs=Server.createobject("ADODB.Recordset")
Set Cmd=Server.createobject("ADODB.command")
Cmd.activeconnection = DB
cmd.commandtext="select * from stb where id =?"
set fs = Server.createobject("scripting.filesystemobject")

set ts=fs.opentextfile(Server.Mappath("test.txt"),1)

Set Para=Cmd.createParameter("id",2,1,10)
Cmd.Parameters.append(Para)
do while Not ts.atendofstream
arystr=split(ts.Readline,",")
Para.value=arystr(0)
set Rs=Cmd.execute
Do until Rs.eof
Rs("id")=arystr(0)
Rs("name")=arystr(1)
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
loop




Rs.close
DB.close

set Rs = Nothing
set db = Nothing
%>

補足日時:2006/05/02 15:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!