4

簡単な Access フォーム (連続ビュー) を作成しています。詳細セクションにチェックボックスがあり、フッターにコマンド ボタンがあります。

このように、ユーザーはチェックボックスを使用して複数のレコードを「選択」し、ボタンのコマンド ボタンをクリックして、選択したレコードを更新するスクリプトを実行できます。これらのチェック値を永続的に保存する必要はありません。

通常、基になるテーブルにブール型フィールドを追加し、チェックボックスをそのフィールドに関連付けます。しかし、テーブルを変更せずにこれを行う方法はありますか? つまり、チェックボックスの値をメモリに保存しますか?

4

3 に答える 3

3

いいえ、ありません。連続フォームは多数のアクティブなレコードではなく、他の多数のレコードのビューを持つ 1 つのアクティブなレコードです。非バインド コントロールへの更新は、現在のレコードにのみ適用されます。レコードセレクターを使用して一連のレコードを選択し、それらを操作できます: http://wiki.lessthandot.com/index.php/Allow_the_User_to_Select_Multiple_Records_for_Processing

于 2013-01-18T16:11:18.393 に答える
2

切断されたレコードセットに基づくフォームに、レコード選択チェック ボックスを含めることができます。これはメモリ内に作成する 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 フィールドにバインドせずに、選択チェック ボックスを使用できます。これは、ユーザーが共有テーブルで他のユーザーの選択を上書きする可能性がある場合、マルチユーザー アプリケーションでは課題となります。切断されたレコードセットは、このような競合をうまく回避します。

于 2013-01-18T17:31:37.163 に答える