データベース操作ADOでのレコード削除時エラーの解決方法

このQ&Aのポイント
  • VBSのデータベース操作ADOにおいて、Accessに接続して値を取得し変数にセットした後、その変数を使用してレコードを削除しようとするとエラーが発生します。
  • 変数をSQL文に組み込む方法がわからないため、エラーが発生しています。
  • このエラーを解決する方法を教えてください。
回答を見る
  • ベストアンサー

VBSのデータベース操作ADOにて、レコード削除時エラー

Accessに接続し、値をとってきて変数にセットし、その変数を使って、レコード削除しようとすると、エラーになります。以下、ソース ~初期化、変数宣言などあり ~ Set objAdoRset = WScript.CreateObject "ADODB.Recordset") strSqlStmt = "SELECT f2 FROM test1 GROUP BY f2 " objAdoRset.Open strSqlStmt, objAdoCon, OpenStatic Do While objAdoRset.EOF <> True StrValue(lngLoop) = objAdoRset"f2") lngLoop = lngLoop + 1 objAdoRset.MoveNext Loop objAdoRset.Close 中略 objAdoCon.Open strSqlStmt = "DELETE FROM test1 WHERE f2 <> " & StrValue(i)  ★★エラー objAdoCon.Execute strSqlStmt,,adExecuteNoRecords 変数をSQL文に組み込みたいのですが、どうすればよいのでしょうか?どうか、教えてください。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

実際に試してはいないのですが & "'" & StrValue(i) & "'" の様にシングルクォートで囲む文字列にするというのはどうでしょう あと、";"はつけなくてもいいのでしょうか

pyontanrie
質問者

お礼

できました!大変ありがとうございます。感謝します!

関連するQ&A

  • DB2のデーターベースに、ADOで接続して、レコードを取得していますが

    DB2のデーターベースに、ADOで接続して、レコードを取得していますが、同じ事をして、取得出来るときと、できないときがあります。 できない時は、objRec.EOF=true になり、処理が終了してしまいます。 誰が、この原因の探り方や、ヒントなどわかる人がいたら、教えていただけませんでしょうか。 以下、ソースの引用 Set objCon = WScript.CreateObject("ADODB.Connection") strCon="DSN=mans;UID=admin;PWD=pass" objCon.Open strCon Set objRec=CreateObject("ADODB.Recordset") objRec.Open strSQL, objCon, adOpenStatic If objRec.EOF Then Wscript.Echo "no data!" WScript.quit End If 後の処理に進む

  • データベース操作時エラーについて

    VB初心者です。 VB6+Access2000の環境下でプログラムを実行すると 「実行時エラー’3219’ このコンテキストで操作は許可されていません」とエラーになります。 下のプログラムの(2)の箇所でエラーになります。 (1)はエラーになりません。 つまり次のレコードに移動は問題ないのですが、前のレコードを表示 させようとするとエラーになります。 原因と解決方法をご教授ください。 ----------------------------------------------------------- プログラム Private mCn As ADODB.Connection Private mRs As ADODB.Recordset --------------------------------- Private Sub Form_Load() Set mCn = New ADODB.Connection mCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data    Source=.\word.mdb" mCn.Open Set mRs = mCn.Execute("Select * From week_cel") End Sub --------------------------------- Private Sub Command1_Click() ’(1) mRs.MovePrevious If mRs.BOF Then mRs.MoveFirst End If End Sub -------------------------------- Private Sub Command2_Click() ’(2)   mRs.MoveNext If mRs.EOF Then mRs.MoveLast End If End Sub   

  • VBSのデータベース操作で、複数mdb扱いたい

    VBSにて、Accessのmdbファイルを操作するのですが、複数mdbファイルを操作することは可能なのでしょうか? 以下は、A.mdbのオブジェクトから、取得した値でフォルダを作成し、A.mdbをコピーして、コピー先のmdbファイルのオブジェクトより、データ削除をしようとしています。ただ、mdbファイルを複数指定したもののどこでファイルが紐づくのかわかりません。 'コピーや、フォルダ作成済、ADO定数ファイルの読み込み済 strDbName1 = A.mdb strDbName2 = Pフォルダ\A.mdb Set objAdoCon = WScript.CreateObject("ADODB.Connection") If Err.Number = 0 Then objAdoCon.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & strDbName1 " & ";" & strDbName2 '複数指定 ※1 objAdoCon.Open Set objAdoRset = WScript.CreateObject("ADODB.Recordset") このあと、strDbName1 , strDbName2 を使い分けるにはどのようなSQL文を書けばよいのでしょうか? もしかしたら、※1のところが間違っているのでしょうか? どうか、教えてください。お願いします。

  • VBSでADO接続に失敗した場合にフリーズする

    VBSでADO接続に失敗した場合にフリーズするのですが、何とか ならないでしょうか。 以下、わたしのコード(戻り値を返(WSCript.Quit Err.Number)したいので、On Error Resume Nextは外せません。) Option Explicit On Error Resume Next Dim objADO Set objADO = CreateObject("ADODB.Connection") objADO.Open "Driver={SQL Server};server=" & WScript.Arguments(0) & _ "; database=" & WScript.Arguments(1) & _ ";uid=" & WScript.Arguments(2) & _ ";pwd=" & WScript.Arguments(3) & ";" objADO.Execute(WScript.Arguments(4)) objADO.Close Set objADO = Nothing WSCript.Quit Err.Number

  • VBS ADO接続について

    VBSCRIPTを使用するのが始めてでなかなかうまくいきません アドバイス頂けますでしょうか。 環境 Windows2000Server 下記のようにしてみたのですが、エラーメッセージとしては 「オブジェクト名'test2'は無効です。」と出てしまいます。 このテーブル'test2'はクエリアナライザでSQLを使って 作成しました。 色々調べてはいますが、できましたらアドバイスの方お願いできますでしょうか。 Private Function DbDataUpdate(id2) Dim sql Dim conObj_ 'DBオブジェクトの生成 Set conObj_ = WScript.CreateObject("ADODB.Connection") conObj_.open "DSN=×××;UID=×××;PWD=×××;" conObj_.BeginTrans sql = "INSERT INTO test (id1, id2) " & _ "SELECT id1, id2 FROM test2 " & _ "WHERE " & _ "del = 0 AND " & _ "id2 = '" & id2 & "'" conObj_.execute(sql) sql = "UPDATE test2 " & _ "SET del = 1," &_ "WHERE " & _ "del = 0 AND " & _ "id2 = '" & id2 & "'" conObj_.execute(sql) conObj_.CommitTrans conObj_.close End Function

  • ADO+ODBCでテーブルに接続する時のエラー

    VB6.0(SP6)から、ADOとODBCでMySQLに接続しました。 '-------------------------------------------- Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim strCn As String Set cn = New ADODB.Connection strCn = "dsn=MySQL;uid=user;pwd=" cn.CursorLocation = adUseClient cn.Open strCn Set rs = New ADODB.Recordset rs.Open "select * from tbl;", cn, adOpenDynamic, adLockPessimistic Set DataGrid1.DataSource = rs '-------------------------------------------- データグリッドコントロールにテーブルの内容を表示させようとしているのですが、rs.Openの行でエラーが出てしまいます。エラーメッセージは「複数ステップの操作でエラーが発生しました。各状態の値を確認してください」です。 SQL文を変えて試してみると、何故かデータ型がDECIMALのカラムが含まれているとエラーになります。 DECIMALだといけないかと思うと、挿入は問題なく出来ます。 cn.Execute "insert into tbl (id,decimal_clm) values (10,900);" ご存知の方がいらっしゃいましたら宜しくお願いします。

    • ベストアンサー
    • MySQL
  • ADOのMoveNextでアプリケーションエラー

    いつもお世話になってます。 質問が下手で申し訳ございません。 ADOでORACLEに接続し、SELECTした結果をCSVへ登録する処理を作成してますが、ADOのMoveNextでアプリケーションエラーが毎回発生します。 そこで、エラーの調査方法を教えて下さい。 環境 OS:NT4.0 SP6 AP:VB6.0 SP5 DB:ORACLE 8.1.7 下記にソースを記述します。 Dim pCon As New ADODB.Connection Dim rs As New ADODB.Recordset pCon.Open "DSN=DSN名;uid=UID名;pwd=PASSWORD" Set rs.ActiveConnection = pCon strSQL = "select * from テーブル名" rs.Open strSQL, pCon, adOpenStatic, adLockReadOnly, adCmdText intFileNo = FreeFile Open CSVファイル For Output As #intFileNo Do Until rs.EOF CSVファイルへの出力処理ですが、   エラー調査のため、条件付きIFで処理を   飛ばしています。 rs.MoveNext Loop Close intFileNo rs.Close 実際には、Selectした内容をMoveNextしているだけなんですが。。。 どうかよろしくお願いします。

  • レコードセットのループ処理でエラー・・・

    簡単なことだと思うのですが、解決できなくこまっております。お助けください。 以下のコーディングで、データの取得は出来ているのですが、「Do Until rs1.EOF」でエラーとなります。 SOURCE----------------------------------------- sql = "Select No from t01" Recordset.Open sql, dbc, 3 If rs1.EOF Then Response.Write "データナシ<BR>" ←表示されません。 else Do Until rs1.EOF ←この行でエラーとなります。 Response.Write "No=" & rs1("No").Value rs1.MoveNext Loop end if Error-------------------------------------------- ADODB.Field (0x80020009) BOF と EOF のいずれかが True になっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。 因みに、Do Untilを使用せず  Response.Write "No=" & rs1("No").Value  rs1.MoveNext  Response.Write "No=" & rs1("No").Value と記述すると正常にデータが表示されます。 「Do Until rs1.EOF」で発生するエラーの回避方法を御教示願います。

  • VBAでレコードセットの総レコード数を取得する方法

    Dim con As ADODB.Connection Dim rsData As ADODB.Recordset Dim DNSname$,USERname$,PASSw$,cnt&  Set con = CreateObject("ADODB.Connection")  con.Open "DSN=" & DNSname & "; UID= " USERname & "; PWD=" & PASSw  Set rsData = New ADODB.Recordset  rsData.Open SQL, con  Do While Not rsData.EOF   rsData.MoveLast   cnt=rsData.RecordCount   rsData.First  LOOP といいコードで総レコード数が取得できるかなとやってみたところ、rsData.MoveLastのところで、「行セットは逆フェッチをサポートしていません」というエラーが出ました。 なにかほかの方法で総レコード数を取得する方法があるのでしょうか? 自分で他に試したことは、rsData.EOFまでrsData.MoveNextでもっていきrsData.EOF-1レコードの.RecordCountを取得すしようと試みましたが、最後のレコードまできても.RecordCountは「-1」のまま変化しませんでした。レコードセットの呼び込み方が不味いのでしょうか?

  • ADOでレコードの値を一部変更したい

    アクセスのテーブル1には 番号(主キー) 内容1 内容2 というフィールドがあります。 エクセルからアクセスへADOを使って内容1フィールドだけを変更したのですがうまく行きません。 もともと 番号には「1」、内容1には「あああ」と入力されているとして 内容1を「いいい」に変更したい場合下記のコードを実行すると 「主キーが重複している」というエラーになるか、 全然関係ない番号の値が変わってしまい、テーブルがぐちゃぐちゃになってしまいます。 Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\○○○\Desktop\test1.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic 番号 = 1 rs("番号") = 番号 rs("内容1") = "いいい" rs.Update '保存 Set rs = Nothing Set cn = Nothing End Sub どうすれば「番号1の内容1の値を変更する」ことが可能なのでしょうか? よろしくお願いします。