Access2000のVisualBasicのRecordset、従来のRecordsetと名前は同じなのに 使い方は全く変わりました。 ヘルプには従来のメソッドと新しいメソッドの両方の説明が載っているため、 紛らわしいことこの上なしです。 従来型のRecordsetだけ使いたい場合は、こちらを参照して下さい。
SELECT | レコードの取得方法 | |
AddNew | レコードの追加方法 | |
UPDATE | レコードの更新方法 | |
Find | レコードの検索方法 |
SQLを実行して値を取得したい場合は、以下のようにします。
Dim sql As String sql = "select * from [テーブル] " & _ "where [キー] = 1" Dim rcd As New ADODB.Recordset rcd.Open sql, CurrentProject.Connection MsgBox rcd![項目1].Value rcd.CloseCurrentProject.Connectionは以前のCurrentDBに相当するもので、 「現在開いているmdbファイルが対象」という考えでいいと思います。
Dim rcd As New ADODB.Recordset
Dim rcd As ADODB.Recordset
Set rcd = New ADODB.Recordset
結果が複数レコード有る場合は、以下のようにして全データを処理します。
Dim sql As String sql = "select * from [テーブル] " & _ "where [キー] <= 2 " dim rcd as new adodb.recordset rcd.open sql, currentproject.connection Do Until rcd.EOF MsgBox rcd![項目1].Value rcd.MoveNext Loop rcd.Close
テーブルにレコードを追加するには、以下のようにします。
Dim rcd As New ADODB.Recordset rcd.Open "テーブル", CurrentProject.Connection, adOpenDynamic, adLockPessimistic rcd.AddNew rcd![キー].Value = 4 rcd![項目1].Value = "ほげ〜" rcd.Update rcd.Close
Openの第1引数にテーブル名を指定し、AddNewで新しいレコードを作成して 各項目のデータを設定後、Updateで登録します。
テーブルのレコードを更新するには、以下のようにします。
Dim rcd As New ADODB.Recordset
rcd.Open "テーブル", CurrentProject.Connection, adOpenDynamic, adLockPessimistic
Do Until rcd.EOF
If rcd![キー] <= 2 then
rcd![項目2].value = rcd![項目2].Value + 1
rcd.Update
End If
rcd.MoveNext
Loop
rcd.Close
以前は 項目に値を設定する前にEditを実行しておく必要があったと思いますが、 ADOではその必要はなくなりました。
ちなみに、SQLのSELECTを使って書くことも出来ます。
Dim rcd As New ADODB.Recordset
rcd.Open "select * from [テーブル] where [キー] <= 2", _
CurrentProject.Connection, adOpenDynamic, adLockPessimistic
Do Until rcd.EOF
rcd![項目2].Value = rcd![項目2].Value + 1
rcd.Update
rcd.MoveNext
Loop
rcd.Close
しかし、よほど複雑な演算やSQLでは書けないこと(例:前のレコードの値を使う)でない限り、 SQLのUPDATEを使う方が高速です。
Dim rcd As New ADODB.Recordset
rcd.Open "update [テーブル] set [項目2] = [項目2] + 1 where [キー] <= 2", _
CurrentProject.Connection
この場合は、rcd.Closeは不要です。
以前のRecordsetにはFindFirstを使って検索をすることが出来たのですが、 ADOではFindというものを使います。
Dim rcd As New ADODB.Recordset
rcd.Open "テーブル", CurrentProject.Connection, adOpenStatic, adLockReadOnly
rcd.Find "[キー] = 1"
MsgBox rcd![項目1]
rcd.Close
しかし条件に一致するものが複数ある場合に、以前はFindNextを使って全て扱えたのですが Findにはそれに相当するものが無いようです。
検索には、他にSeekというものもあるんですが、いまいち使い方が分かりません(爆)