- 締切済み
Access 指定したレコードへ移動
お世話になります。 Access2003で在庫管理システムを作っています。 商品マスター登録画面にて商品を検索する際 コマンドボタンで検索画面に移動 テキストボックスに入力した文字列を含む商品を 検索画面内のサブフォームに表示、該当レコードをダブルクリックすると 商品マスター登録画面にその商品が表示される…という ところまでなんとかかんとか作りました。 でもレコードソースを書き換えるところがまずいみたいで 商品マスター登録画面には表示したレコード1件のみしか 表示されなくなってしまいます。 私がやりたいのは単なるレコードの移動です… 調べましたがどうしたらいいのかわかりません。 よろしくお願いします。 検索画面内のサブフォームをダブルクリックしたときのコード Private Sub Form_DblClick(Cancel As Integer) On Error GoTo Err_Form_DblClick Dim strSQL As String With Application.Forms("商品マスター登録") strSQL = "SELECT *" strSQL = strSQL & " FROM 商品マスター" strSQL = strSQL & " WHERE 商品ID = " & Me.商品ID Form_商品マスター登録.RecordSource = strSQL ↑ここをどう変えればいいでしょうか? End With Exit_Form_DblClick: Exit Sub Err_Form_DblClick: MsgBox Err.Description Resume Exit_Form_DblClick End Sub
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- CHRONOS_0
- ベストアンサー率54% (457/838)
>いまいち話が噛み合わないのはそれが原因かも… 分かりにくい表現でしたが、ほぼ正しく受け取っていましたよ 答えは最初のものに戻ります >strSQL = "SELECT *" > strSQL = strSQL & " FROM 商品マスター" > strSQL = strSQL & " WHERE 商品ID = " & Me.商品ID ここで商品IDが指定されたものだけに絞込み > Form_商品マスター登録.RecordSource = strSQL それをフォームのソースにしてしまえば >フォームシートビューなので見た目は1件ごとの表示です 見た目だけでなくそのフォームには1件しかありません 移動したいといっている他のレコードは無くなっています 絞込みではなくレコードの移動をしてください
- CHRONOS_0
- ベストアンサー率54% (457/838)
用語は統一しましょうね いきなり別画面といわれても何のことかわかりませんよ 別画面というのは >そのレコードをダブルクリックすると >商品マスター登録画面に商品ID:2のレコードの内容が表示される これのことですか?だったら商品IDが2のものしかないのでは 別画面が >検索画面内のサブフォームに表示された これなら、 もう一度ダブルクリックしてやらないと登録画面は書き換わりませんね
お礼
解決しました! レコードセットで指定したレコードに移動することができました With Form_商品マスター登録.Recordset .FindFirst "商品ID = " & Me!商品ID If .NoMatch Then MsgBox "該当するレコードはありません" End With フィルタを使って試してみましたが、やはり1件だけしか表示されず 解除すると先頭レコードになってしまうので やりたいことと違ってました 要領を得ない質問をして申し訳ありません 自己解決となりましたが、いろいろご指摘いただいて 勉強になりました ありがとうございました
補足
別画面と言っているのは 商品マスター登録画面のことです 混乱するような言い方してすみません 今回使用しているフォームは3つ 1.商品マスター登録画面 2.検索画面 3.検索画面内のサブフォーム 最初の質問で書いたコードは 3.検索画面内のサブフォームのDblClickに記述してあることです サブフォームには全ての商品、もしくは一部の商品が 抽出されて表示されてますので その中から指定した商品と同じ商品IDを持つレコードに 1.商品マスター登録画面でも移動したいということです 1には商品マスター全てがレコードソースになっていますが フォームシートビューなので見た目は1件ごとの表示です 3で選択(ダブルクリック)した商品IDのレコードに移動したいのです 2.3の画面はダブルクリックされたら 検索終了とみなして閉じます という仕様です サブフォームというのは登録画面にあるのではなく検索画面にあるので そこをちゃんと伝えきれてなかったかもしれないですね いまいち話が噛み合わないのはそれが原因かも…
- CHRONOS_0
- ベストアンサー率54% (457/838)
>メインの商品マスター登録画面の方でもいったんフィルターをかけて >解除すれば該当のレコードが表示されるという意味で >おっしゃっているのでしょうか? 抽出:そのレコードだけを取り出す フィルタ:そのレコードだけを表示する(元のソースはそのまま) 検索:そのレコードのところにジャンプする >私がやりたいのは単なるレコードの移動です… だったら検索ですね だけど >検索画面内のサブフォームに表示、該当レコードをダブルクリックすると >商品マスター登録画面にその商品が表示される… この中でレコードの移動(他の商品に移動)を行いたいだったら、仕様の段階で矛盾してますね もう一度ダブルクリックのところにもどらないと他の商品は表示できないのでは
補足
理解力がなくてすみません >もう一度ダブルクリックのところにもどらないと他の商品は表示できないのでは のところがよくわかりません 具体例でいうと、商品マスターに100件商品があったとして 商品マスター登録画面から 検索画面に飛んでテキストボックス・ないしコンボボックスから 選択した抽出条件に合うレコードが3件抽出されたとします (データシートビューで表示されています) 検索画面内のサブフォームに表示された3件のうちの1件が 商品ID:2だったとしたら そのレコードをダブルクリックすると 商品マスター登録画面に商品ID:2のレコードの内容が表示される (こちらはフォームシートビューなので1件ごとの表示です) という仕様です 別画面の表示を指定したレコードに移動させるということなんですが これは矛盾することなんでしょうか? ちなみに商品マスター登録画面は最初に開いた段階では 新規レコードになっています オペレータが任意で前後のレコードに移動していたら 違うレコードが表示されているかもしれません フォームシートビューなので 表示したい商品があった時に何度もクリックして レコードをさかのぼることになるので 検索画面の方で選択したレコードに 一発で移動ということをやりたいわけです 実際の画面をお見せできれば一番いいと思うのですが 言葉だけで伝えるのは難しいです… >検索:そのレコードのところにジャンプする というのは#2さんがおっしゃっているような FindRecordを使ったりということでしょうか? (今のところうまくいっていませんが^^;) また意図と違うことを言っていたらすみません コメント下さってありがとうございます
- mitarashi
- ベストアンサー率59% (574/965)
参考URLの様な事でしょうか。外していたらすみません。
お礼
回答ありがとうございます リンク先を参考にして 検索画面内サブ画面ダブルクリックのところに 商品マスター登録画面の商品IDにSetForcusし FindRecordする記述を書いてみました 以下の記述です Dim strData As String strData = Me!商品ID Form_商品マスター登録!商品ID.SetFocus DoCmd.FindRecord strData しかしFindRecordのところでエラー 「コマンドまたはアクション'レコードの検索'は無効です。」 と言われてしまいました 商品マスター登録画面の商品IDはオートナンバーになっています それも関係ありますか?それとも画面の設定でしょうか? あるいは全然別の問題なのか…
- CHRONOS_0
- ベストアンサー率54% (457/838)
抽出を行っているのですから >商品マスター登録画面には表示したレコード1件のみしか >表示されなくなってしまいます。 こうなるのは当然ですね フォームのソースは指定した商品IDのもののみになります >私がやりたいのは単なるレコードの移動です… これをしたければ検索をしましょう フィルタなら解除すれば元に戻ります 抽出、フィルタ、検索の違いを勉強された方がいいみたいですね
補足
回答ありがとうございます 言葉が足りなかったかもしれないですが、 検索画面でデータを抽出するところまではうまくいっています。 (フィルタは使わず、if文の入れ子で作ってますが…^^; 今後検索条件が増えたときのためにフィルタも勉強しようと思います) 抽出した中から指定(ダブルクリック)した商品IDを持つ レコードを別画面(商品マスター登録画面)で 同じ商品IDのレコードの内容を表示したい、ということなんですが ブックマークかな??と思って試してみましたがエラー… 使い方が良く分かってないです 的外れなことを言っていたらすみません メインの商品マスター登録画面の方でもいったんフィルターをかけて 解除すれば該当のレコードが表示されるという意味で おっしゃっているのでしょうか?
補足
>答えは最初のものに戻ります というのは、#1のフィルタを使うということでしょうか? #4のお礼に書きましたように、フィルタを使うと見た目上 1件しか表示されなかったので自分の思っていた動きではなかったです 1/1(フィルタ)という具合です 最初の質問で書いたレコードソースを1件だけに書換えてしまった のと見た目上は変わりませんでしたし フィルタを解除しても先頭レコードが表示されるだけでした 私がやりたかったことは3/100といった具合に 全体のレコード数は残した上で、指定レコードに移動したかったので それはレコードセットで実現できました