• ベストアンサー

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の値を変更する」ことが可能なのでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic rs.MoveFirst do until rs.EOF   番号 = 1   if rs("番号") = 番号 then     rs("内容1") = "いいい"     rs.Update '保存     exit do   end if loop rs.Close cn.Close といった具合に自前で検索するか filterプロパティで抽出します rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic rs.Filter = "番号=1" if rs.RecordCount = 1 then   rs.MoveFirst   rs("内容1") = "いいい"   rs.Update '保存 end if といった具合か rs.Open "SELECT * FROM テーブル1 WHERE 番号=1", cn, adOpenStatic, adLockPessimistic if rs.RecordCount = 1 then   rs.MoveFirst   rs("内容1") = "いいい"   rs.Update end if rs.Close cn.Close といった具合に RecordSetへ読み込む時点でレコードを特定します

bmgjtu
質問者

お礼

なるほど!複数のやり方があるのですね!大変参考になりました。ご回答ありがとうございます。

その他の回答 (1)

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.2

ADO経由でsqlを発行し、データ変更する方法もあります。 Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\○○○\Desktop\test1.mdb" cn.Execute "UPDATE テーブル1 SET テーブル1.内容 = 'いいい' WHERE テーブル1.番号=1" cn.close: Set cn = Nothing End Sub アクセスで更新クエリを作って、それをSQLビューにすると、上記SQLを確認することができます。(”→’などの配慮は必要です)

bmgjtu
質問者

お礼

ありがとうございます。大変参考になりました。

関連するQ&A

専門家に質問してみよう