次の方法で共有


Bookmark プロパティ

Microsoft Access Visual Basic のリファレンス

Bookmark プロパティ

フォームの基になるテーブル、クエリ、または SQL ステートメントに含まれる特定のレコードを固別に識別するためのブックマークを設定します。値の取得および設定が可能です。バリアント型 (Variant) の値を使用します。

expression.Bookmark

expression 必ず指定します。対象となるオブジェクトへの参照を表すオブジェクト式を指定します。

設定値

設定値には、Access で作成された文字列式が含まれます。

このプロパティは、マクロまたは Visual Basic で設定できます。

メモ 基になるテーブルまたはクエリの ADO の Bookmark プロパティまたは DAO の Bookmark プロパティから、フォームの Bookmark プロパティを個別に取得または設定することができます。

解説

フォーム ビューで連結フォームを開くと、各レコードに固有のブックマークが与えられます。カレント レコードのブックマークは、Visual Basic でフォームの Bookmark プロパティの値を文字列変数に代入することによって保存できます。他のレコードに移動した後でも、この変数をフォームの Bookmark プロパティに指定すると、ブックマークを保存したレコードに戻ることができます。StrComp 関数を使用して、変数と文字列変数を比較、またはブックマークどうしを比較することができます。StrComp 関数の 3 番目の引数は、値が 0 に設定されている必要があります。

メモ ブックマークは、示しているレコードと共に保存されません。また、フォームが開いているときにのみ有効です。ブックマークは、連結フォームが開かれるたびに再作成されます。

各ブックマークを固有の文字列変数で保存する場合、保存できるブックマークの数に制限はありません。

Bookmark プロパティは、フォームのカレント レコードでのみ有効です。カレント レコード以外のレコードのブックマークを保存するには、目的のレコードに移動してから、そのレコードを識別する文字列変数に Bookmark プロパティの値を代入します。

ブックマークは、Access 形式のテーブルを基にしたフォームであれば、どのようなフォームでも使用できます。ただし、Access 以外のデータベース製品ではブックマークがサポートされていないことがあります。たとえば、主インデックスのないリンク テーブルを基に作成したフォームでは、ブックマークを使用することはできません。

フォームの再クエリを行うと、そのフォームのレコードに設定されたすべてのブックマークが無効になります。[レコード] メニューの [最新の情報に更新] をクリックした場合は、ブックマークは影響を受けません。

フォームを開くと、フォームのレコードセットの各レコードに固有のブックマークが作成されます。したがって、2 つのレコードセットが同じテーブル、クエリ、または SQL ステートメントを基に作成されている場合でも、フォームのブックマークは別のレコードセットでは使うことができません。たとえば、[得意先] テーブルを基にしているフォームを開くとします。Visual Basic を使って [得意先] テーブルを開き、ADO の Seek メソッドまたは DAO の Seek メソッドを使ってテーブルの特定のレコードを検索する場合は、カレント レコードにフォームの Bookmark プロパティを使うことはできません。この種の操作を実行するには、フォームの RecordsetClone プロパティと共に、ADO の Find メソッドまたは DAO の Find メソッドを使うことができます。

Bookmark プロパティに文字列の変数を設定し、レコードが削除された後にそのレコードを取得しようとすると、エラーが発生します。

Bookmark プロパティの値は、レコード番号と同一ではありません。

使用例

次の使用例をノースウィンド データベースを使ってテストするには、[仕入先] フォームに cmdFindContactName という名前のコマンド ボタンを追加し、次にこのボタンの Click イベント用に以下のコードを加えておく必要があります。このボタンがクリックされると、検索する担当者名を入力するようにユーザーにメッセージが表示されます。名前が見つかると、フォームの Bookmark プロパティが Recordset オブジェクトの DAO の Bookmark プロパティに設定されます。このプロパティによって、フォームのカレント レコードが見つかった名前のレコードになります。

Private Sub cmdFindContactName_Click()

    Dim rst As DAO.Recordset
    Dim strCriteria As String

    strCriteria = "[担当者名] Like '*" & InputBox("検索する担当者名の最初の文字を" _
        & "入力します。") & "*'"

    Set rst = Me.RecordsetClone
    rst.FindFirst strCriteria
    If rst.NoMatch Then
        MsgBox "検索できませんでした。", vbInformation
    Else
        Me.Bookmark = rst.Bookmark
    End If

    Set rst = Nothing

End Sub