切断されたレコードセットに基づくフォームに、レコード選択チェック ボックスを含めることができます。これはメモリ内に作成する ADO レコードセットであり、どのデータ ソースにもバインドされていません。レコードセットの主キーを使用すると、コマンド ボタンのクリック プロシージャでレコードセットを調べて、"選択した" レコードの主キーのリストを取得できます。このアプローチが有用であると思われる場合は、Database Journal の Danny Lesandrini によるこの記事を参照してください:インメモリ ADO レコードセットの作成
その記事のコードに基づいてこのフォームを作成しました。メイン フォームには、サブフォームの実行中に読み込まれる切断されたレコードセットに基づくサブフォームが含まれますForm_Open
。

ID
フォームに主キー ( ) を実際に表示する必要はないことに注意してください。レコードセットに含まれている限り、レコードセットをウォークするときに取得できます。
Private Sub Form_Open(Cancel As Integer)
Dim dbs As DAO.Database
Dim fld As ADODB.Field
Dim rstAdo As ADODB.Recordset
Dim rstDao As DAO.Recordset
Dim strSql As String
Set rstADO = New ADODB.Recordset
With rstAdo
.Fields.Append "EmployeeID", adInteger, , adFldKeyColumn
.Fields.Append "FirstName", adVarChar, 10, adFldMayBeNull
.Fields.Append "LastName", adVarChar, 20, adFldMayBeNull
.Fields.Append "Selected", adBoolean
.CursorType = adOpenKeyset
.CursorLocation = adUseClient
.LockType = adLockPessimistic
.Open
End With
Set dbs = CurrentDb
strSql = "SELECT EmployeeID, FirstName, LastName " & _
"FROM Employees ORDER BY LastName, FirstName"
Set rstDao = dbs.OpenRecordset(strSql, dbOpenSnapshot)
Do Until rstDao.EOF
rstAdo.AddNew
rstAdo!EmployeeID = rstDao!EmployeeID
rstAdo!FirstName = rstDao!FirstName
rstAdo!LastName = rstDao!LastName
rstAdo!Selected = False
rstAdo.Update
rstDao.MoveNext
Loop
Set Me.Recordset = rstAdo
rstDao.Close
Set rstDao = Nothing
Set dbs = Nothing
End Sub
このコード サンプルでは、 Microsoft ActiveX Data Objectsのバージョンの参照を設定する必要がある ADO の事前バインディングを使用しています。ただし、遅延バインディング用に適切な変更を加えることで、正常に動作する可能性があります。
このアプローチは必ずしも軽量ではありません。ただし、実際のデータ テーブルの Yes/No フィールドにバインドせずに、選択チェック ボックスを使用できます。これは、ユーザーが共有テーブルで他のユーザーの選択を上書きする可能性がある場合、マルチユーザー アプリケーションでは課題となります。切断されたレコードセットは、このような競合をうまく回避します。