- ベストアンサー
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の値を変更する」ことが可能なのでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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へ読み込む時点でレコードを特定します
その他の回答 (1)
- ShowMeHow
- ベストアンサー率28% (1424/5027)
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を確認することができます。(”→’などの配慮は必要です)
お礼
ありがとうございます。大変参考になりました。
お礼
なるほど!複数のやり方があるのですね!大変参考になりました。ご回答ありがとうございます。