• ベストアンサー

ACCESSのBookmarkプロパティの使い方

Stressmanと言います。 環境は、Windows98SEでACCESS2002を使っています。 質問というのは、ACCESSのBookmarkプロパティの意味、使い方 を教えていただきたいのです。 ヘルプを読んだのですが、よく分かりません… ちなみに、ヘルプには 「フォームの基になるテーブル、クエリ、またはSQLステートメント に含まれる測定のレコードを個別に識別するためのブックマークを設定 します。値の取得および設定が可能です。バリアント型の値を使用します。」 と書いてあります。 具体的に、「こういう意味」「こういう使い方をする」というのを 教えて頂きたいのです。 #サブフォームのレコード移動について調べていたら、「Bookmark」が #よくでてきたので、「これを理解しないと先に進めない」と判断して #投稿させていただきました。 #これぐらい知っておけよ、とつっこまないでください…

質問者が選んだベストアンサー

  • ベストアンサー
  • ryuu001
  • ベストアンサー率61% (46/75)
回答No.2

>2 、001    、4/5  、田中 >へ移動することも可能なのでしょうか? その通りです。 この場合は 次のようになります。 Dim Rs As DAO.Recordset ' フォームのレコードを Rs にセット Set Rs = Me.サブフォームB.form.RecordsetClone ' Rs で No が 2を検索 Rs.FindFirst "[No]=2" ' Rs で Noが2の場所を サブフォームB に反映 Me.サブフォームB.form.Bookmark = Rs.Bookmark

stressman
質問者

お礼

ryuuさん、ありがとうございます。 早速試してみます。 「できた」という報告は補足にて記載したいと思います。

stressman
質問者

補足

すいません。 できた、という報告ではなくエラーが出てきました。 --------------------------------- コンパイルエラー ユーザ定義型は、定義されていません --------------------------------- というエラーがでて、 Dim Rs As DAO.Recordset の部分が反転しています。 VBAをあまり理解していないので、 このエラーだけでは、何がどう悪いのか 分かりません。宜しくお願いします。

その他の回答 (2)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 Bookmarkの他の用途は、あるレコードにマークしておいて、レコードをいろいろ移動した後で、そのレコードに簡単に戻ってくるというものです。 ヘルプの説明としてはこちらの使い方になるのでしょう。 具体的な方法は、現時点のカレントレコードにマークしておきます。 Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim bmark As Variant 'ブックマーク、バリアント型 Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open テーブル名, cn, adOpenKeyset, adLockOptimistic 'ブックマークを取得 bmark = rs.Bookmark (Move系メソッドなどで別のレコードへ移動) '元のレコードへ戻る rs.Bookmark = bmark rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing

stressman
質問者

お礼

ありがとうございました。 Private Sub コマンド_Click() Dim Rs As DAO.Recordset Set Rs = Me![サブフォーム].[Form].RecordsetClone Rs.FindFirst "ID =" & Str(Me![コンボ]) Me![サブフォーム].[Form].Bookmark = Rs.Bookmark End Sub をコマンドボタンのクリック時のイベント処理で 実行したら、出来ましたぁぁ~♪ 説明べたでご迷惑をおかけしました。 また、行き詰まりましたら宜しくお願いします。

stressman
質問者

補足

maruru01さん、ありがとうございます。 maruru01さんのコードはまだ試していないのですが、 下記のryuu001さんのコードを、元に Private Sub コマンド_Click() Dim Rs As DAO.Recordset Set Rs = Me![サブフォーム].[Form].RecordsetClone Rs.FindFirst "ID = Me![サブフォーム]![コンボ]" Me![サブフォーム].[Form].Bookmark = Rs.Bookmark End Sub というコードを書きました。すると、 ------------------------------------------------------ Me![サブフォーム]![コンボ]を、有効なフィールド名、または 式として認識できません。 ------------------------------------------------------ とエラーがでてしまいました。 コンボで指定したレコードに移動したいと思ってやったのですが うまくいきませんでした…

  • ryuu001
  • ベストアンサー率61% (46/75)
回答No.1

「Bookmark」は、フォーム上で、あるレコードを検索し、 フォームの画面を そのレコードへ移すときに使います。 その場合、「Recordsetclone」と組み合わせて 使用します。

stressman
質問者

お礼

ryuu001さん、ありがとうございます。 フォーム上でレコードを検索し、 そのレコードに移動するときに使う、ってことは… テーブルA 顧客コード、顧客名、住所 テーブルB No、顧客コード、打合せ日、担当者 というテーブルがあって、それぞれをソースにした フォームがあるとします。 フォームA→テーブルAをソース フォームB→テーブルBをソース で、フォームBをフォームAのサブフォームとして、 「顧客コード」でリンクさせるとします。 そのとき、 テーブルA 顧客コード、顧客名、住所 001    、山本 、東京都 002    、鈴木 、大阪府 003    、太田 、京都府 テーブルB No、顧客コード、打合せ日、担当者 1 、001    、3/2  、田中 2 、001    、4/5  、田中 3 、002    、3/15  、小川 4 、001    、5/10  、近藤 5 、002    、4/11  、小川 6 、003    、6/14  、工藤 とすると、フォームAで顧客コード「001」を選択すると、 サブフォームB(単票形式、移動ボタン有り)は、 1 、001    、3/2  、田中 2 、001    、4/5  、田中 4 、001    、5/10  、近藤 となります。このとき何らかの処理で、いきなり 2 、001    、4/5  、田中 へ移動することも可能なのでしょうか? 説明べたですいません。 宜しくお願いします。

関連するQ&A

  • Accessのクエリのプロパティ

    クエリのプロパティの「最大レコード数」について教えてください!! 「ODBCデータベースからAccessデータベースにデータを返すクエリやSQLデータベースからAccessプロジェクトにデータを返すビューで返される最大レコード数を指定します。」 という説明を見たのですが、なんのことやら。。。 わかりやすく教えてほしいのです。

  • Accessの選択クエリの選択を切り替えたい

    Accessで、フォームにコンボボックスとサブフォームを作成してコンボボックスで選択したテキストをキーワードにサブフォームに選択クエリを表示させようと考えています。 コンボボックスの項目は、値集合ソースでテーブルを設定して、選択された項目は、my_Text = Me.コンボ1.Textで取得して クエリのSQL文を変更すればいいのかなぁ?って想像しています。 でも、サブフォームに設定したクエリのSQL文の変更の仕方が解りません。どなたか?詳しい方いらっしゃいましたら教えて頂けないでしょうか?宜しくお願い致します。

  • フォームのレコードソース(Access2000)

    質問させていただきます。 フォームの「レコードソース」でテーブルとクエリーのほかに、「SELECT テーブル名、フィールド名・・・」というのがあります。これもクエリーなのでしょうか? ちなみに、レコードソースの右にある「---」をクリックすると「SQLステートメント:クエリビルダ」というものが開きます(クエリー画面と同じ?)。 また、フォームのレコードソースはテーブル、クエリー、SOLステートメントのどれにすれば良いのでしょうか?

  • ms accessでのフォームの開き方

    アクセス初心者です。 アクセスで「サブフォームa(~n)」を持つ「フォーム1」を参照用(ユーザー用read only)と追加変更用(管理者用)を開きたいのです。 (サブフォームは「フォーム1」の主キーで選択されたクエリを基にしたフォームを使用) 私の不勉強さもあるのか、マクロでは、フォームをread onlyに設定できないようですし、「フォーム1」のプロパティの設定をしてしまうと、「フォーム1」は参照専用のフォームとなってしまうようです。 また、サブフォームについては、追加・編集モードの選択もできず、結局コピーではできず、苦労しきりです。 こういう場合、初心者レベルの私としては、「フォーム1」を基に、プロパティを変えることで対応せざるを得ません。(サブフォームも二通りで二度手間) 実務上は、手間とボリウムの問題ですので構わないのですが、「そんなはずはない」という思いもありますし、でもVBEのコードを書くには、私の「バカさ加減」が許しませんし・・・・ こういう場合は、一般的にはどうしたらよいのでしょう。 現状サブフォームには、検索結果としてクエリを基にしたフォーム(表形式)に詳細表示ボタンを貼り付けています。メインフォームの主キーにリンクしたレコードがサブフォームに表示されるわけですが、そのサブフォームに詳細表示ボタン(マクロ)で詳細情報を、read onlyと編集を選択させたいのですが。 私の能力とユーザーのレベルからは、別々のフォームでプロパティをそれぞれ設定して、メニューで分岐させるのが、不意なレコードの書き換えや削除を防止する最良の方法でしょうか? どなたかアドヴァイスお願いします。 質問もままならないほど、初心者です。

  • Access 行番号について質問です。

    Access 行番号について質問です。 現在1000レコードあるクエリに行番号を振りたいと考えています。 他サイト等を参考にDcount(*,クエリ名,条件)としてカウントする事はできたのですが、 マシンが非常に重たくなります。 また、親フォーム上にて行数を表示しているのですが、重たくなっている為、エラーのまま中々表示されません。少しおいておくと表示される次第です。 なお、クエリは条件によってサブフォームのSQLを差し替えて実行しています。 サブフォームのクエリの行数を軽く取得する方法はないのでしょうか? また、行番号を生成&取得する方法はDcountしか出来ないでしょうか? ちなみに行番号の利用方法は、親フォームで全レコード数を表示、 サブフォーム内のレコードを条件付き書式によって、奇数と偶数によって色分けする為に使用しています。 上記について詳しい方、アドバイスよろしくお願いいたします。m(_ _)m

  • Accessのサブフォームからフォームフィルタを使ってメインフォームも含めたレコードの抽出が出来ないのは何故でしょうか?

    フォームフィルタを利用してサブフォームに入力されている値でレコードの抽出を行いたいのですが、うまくできません。 メインフォームが持っているレコード全てを持ってきます。 メインフォームに含まれているデータが100件なら、それ全てを表示してしまうということです。 私が抽出したいレコードは2件だけです。 メインフォームからフォームフィルタを利用して抽出すると正しい結果が得られます。 これはどうしてでしょうか? サブフォームへの設定が何か足りないのでしょうか? 親・子のフォームのテーブルは同一のものです。 カテゴリーで親と子にフォームを分けました。 親にはクエリはなくて、リレーションシップしたテーブル数種から直接フォームにひっぱってあります。 子は一つのテーブルからクエリを作って、そのクエリからフォームに引っ張っています。 Access2003です。 どなたかご教示いただきますようお願いいたします。

  • Access 2003でサブフォームが更新されません。

    リストボックスの値を変更すると、サブフォームが更新されるようにしたいのです。 サブフォームのレコードソースはクエリから引用しています。 Dim db As Database Dim qry As QueryDef Set db = CurrentDb Set qry = db.QueryDefs("計画クエリ") qry.SQL = newSQL qry.OpenRecordset qry.Close db.Close Set db = Nothing Me!計画クエリのサブフォーム.Form.Requery という形で、更新しようとしても更新されません。詳しい方教えてください。

  • Access2000の件です。

    OSがWIN98で、Access2000をやってます。 1)カレンダーコントロールで選択した日付のデータを、 2)テーブルから抜き出して、サブフォームで表示し、 3)コマンドボタンで新しいレコードの追加を行い、 4)追加したレコードに、年月日+通し番号の識別IDのみを   デフォルトで与え、その通し番号を、テキストBoxに、   表示させようとしています。 私なりの作業 1)カレンダーにクリック時のイベントが無かったので、   年月日という名のテーブルに、現在選択されている   日付を代入するマクロを、コマンドボタンのイベントにしました。 2)クエリを作り、抽出条件に   ≪[年月日]![年月日]≫が日付と等しい、にしたフォームを   作り、サブフォームに設定しました。 ところが、この時点で、サブフォームに検索されません。 前回終了時に年月日テーブルに保存された日付でしか、 検索されません。 いろいろ考えてましたので、各コントロールの設定も、 かなりいじってます。 ひょっとしたら簡単なことなのかも、しれません。 が、煮詰まってしまってますので、考え付きません。 どうか、助けてください。

  • Access詳しい人教えて

    Accessでテーブル、クエリ、フォーム、サブフォームを作りました。フォームの「列車コード」を選択すると該当する列車コードのレコードがサブフォームに表示されるようになっていますが、列車コードを何番にしても、必ずレコードの1番が表示され、しかも列車コードが変わります。どうすればよいか教えてください。 レコードソースは「クエリ1」列車コードのコントロールソースは「列車コード」であり、クエリ1の中に列車コードの項目があることは確認しています。

  • access 簡単な関数

    access2007で売上管理を作ろうと始めたのですが、クエリで金額:[単価]*[数量]と入れると 指定されたフィールド’○○○’がSQLステートメントのFROM句にある複数のテーブルを参照しました とエラーになってしまいます 在庫のテーブルの[数量]の名前を変えて解決はしたのですが、 テキストを買ってきてそれをその通りにしたのになぜできないのか ヘルプを見てもよくわからないので、気が向いたらどなたか回答お願いします