|
次のプログラムは、外部のデータベースに格納されているテーブルから読み込んだデータを、フォームのレコードソースとして利用する処理のサンプルです。ADOでデータベースを開き、次にSQLを実行、最後に作成したレコードセットをフォームののレコードセットに保存しています。作成した場所がフォームのイベント「開くとき(Form_Open)」のため、フォームを開いた(フォームビューに切り替えた)瞬間に自動的にセットされます。
ポイントは2カ所あります。一つ目は、SQLを実行する前にCursorLocationにadUseClientを設定している部分です。作成したレコードセットをフォームのレコードセットに保存する場合は、必ずカーソル(=行の管理)をクライアント側に設定しておく必要があるためです。
■CursorLocationに設定する内容
値
|
用途
|
adUseServer
|
規定値。サーバ側(接続先のデータベース)が作成したカーソルを使用する。
|
adUseClient
|
クライアント側(Access)が作成したカーソルを使用する。
|
もう一つは、フォームのレコードセットに保存する際に、Clone(クローン。Closeではない/笑)を使い、レコードセットの複製を保存している部分です。元のレコードセットをそのままセットしても問題ありませんが、レコードセットが確実に別なインスタンスとなるようCloneを使用して複製するのがおすすめです。
Option Compare Database
Option Explicit
Private Sub Form_Open(Cancel As Integer)
Dim objCon As New ADODB.Connection
Dim objRS As New ADODB.Recordset
Dim strSQL As String
'データベースを開く
objCon.Open "Driver={Microsoft Access Driver (*.mdb)};" _
& "DBQ=C:\DATABASE\DBF.mdb;"
'カーソルの設定[ポイント1]
objRS.CursorLocation = adUseClient
'SQLの実行
strSQL = "select *" _
& " from アドレス帳テーブル"
objRS.Open strSQL, objCon, adOpenDynamic
'レコードセットの複製をコピー[ポイント2]
Set Me.Recordset = objRS.Clone
'後処理
objRS.Close
Set objRS = Nothing
End Sub
|
|
|
|