• 締切済み

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

みんなの回答

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.5

>いまいち話が噛み合わないのはそれが原因かも… 分かりにくい表現でしたが、ほぼ正しく受け取っていましたよ 答えは最初のものに戻ります >strSQL = "SELECT *" >    strSQL = strSQL & " FROM 商品マスター" >    strSQL = strSQL & " WHERE 商品ID = " & Me.商品ID ここで商品IDが指定されたものだけに絞込み >    Form_商品マスター登録.RecordSource = strSQL それをフォームのソースにしてしまえば >フォームシートビューなので見た目は1件ごとの表示です 見た目だけでなくそのフォームには1件しかありません 移動したいといっている他のレコードは無くなっています 絞込みではなくレコードの移動をしてください

milk1215
質問者

補足

>答えは最初のものに戻ります というのは、#1のフィルタを使うということでしょうか? #4のお礼に書きましたように、フィルタを使うと見た目上 1件しか表示されなかったので自分の思っていた動きではなかったです 1/1(フィルタ)という具合です 最初の質問で書いたレコードソースを1件だけに書換えてしまった のと見た目上は変わりませんでしたし フィルタを解除しても先頭レコードが表示されるだけでした 私がやりたかったことは3/100といった具合に 全体のレコード数は残した上で、指定レコードに移動したかったので それはレコードセットで実現できました

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.4

用語は統一しましょうね いきなり別画面といわれても何のことかわかりませんよ 別画面というのは >そのレコードをダブルクリックすると >商品マスター登録画面に商品ID:2のレコードの内容が表示される これのことですか?だったら商品IDが2のものしかないのでは 別画面が >検索画面内のサブフォームに表示された これなら、 もう一度ダブルクリックしてやらないと登録画面は書き換わりませんね

milk1215
質問者

お礼

解決しました! レコードセットで指定したレコードに移動することができました   With Form_商品マスター登録.Recordset     .FindFirst "商品ID = " & Me!商品ID     If .NoMatch Then MsgBox "該当するレコードはありません"   End With フィルタを使って試してみましたが、やはり1件だけしか表示されず 解除すると先頭レコードになってしまうので やりたいことと違ってました 要領を得ない質問をして申し訳ありません 自己解決となりましたが、いろいろご指摘いただいて 勉強になりました ありがとうございました

milk1215
質問者

補足

別画面と言っているのは 商品マスター登録画面のことです 混乱するような言い方してすみません 今回使用しているフォームは3つ 1.商品マスター登録画面 2.検索画面 3.検索画面内のサブフォーム 最初の質問で書いたコードは 3.検索画面内のサブフォームのDblClickに記述してあることです サブフォームには全ての商品、もしくは一部の商品が 抽出されて表示されてますので その中から指定した商品と同じ商品IDを持つレコードに 1.商品マスター登録画面でも移動したいということです 1には商品マスター全てがレコードソースになっていますが フォームシートビューなので見た目は1件ごとの表示です 3で選択(ダブルクリック)した商品IDのレコードに移動したいのです 2.3の画面はダブルクリックされたら 検索終了とみなして閉じます という仕様です サブフォームというのは登録画面にあるのではなく検索画面にあるので そこをちゃんと伝えきれてなかったかもしれないですね いまいち話が噛み合わないのはそれが原因かも…

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

>メインの商品マスター登録画面の方でもいったんフィルターをかけて >解除すれば該当のレコードが表示されるという意味で >おっしゃっているのでしょうか? 抽出:そのレコードだけを取り出す フィルタ:そのレコードだけを表示する(元のソースはそのまま) 検索:そのレコードのところにジャンプする >私がやりたいのは単なるレコードの移動です… だったら検索ですね だけど >検索画面内のサブフォームに表示、該当レコードをダブルクリックすると >商品マスター登録画面にその商品が表示される… この中でレコードの移動(他の商品に移動)を行いたいだったら、仕様の段階で矛盾してますね もう一度ダブルクリックのところにもどらないと他の商品は表示できないのでは

milk1215
質問者

補足

理解力がなくてすみません >もう一度ダブルクリックのところにもどらないと他の商品は表示できないのでは のところがよくわかりません 具体例でいうと、商品マスターに100件商品があったとして 商品マスター登録画面から 検索画面に飛んでテキストボックス・ないしコンボボックスから 選択した抽出条件に合うレコードが3件抽出されたとします (データシートビューで表示されています) 検索画面内のサブフォームに表示された3件のうちの1件が 商品ID:2だったとしたら そのレコードをダブルクリックすると 商品マスター登録画面に商品ID:2のレコードの内容が表示される (こちらはフォームシートビューなので1件ごとの表示です) という仕様です 別画面の表示を指定したレコードに移動させるということなんですが これは矛盾することなんでしょうか? ちなみに商品マスター登録画面は最初に開いた段階では 新規レコードになっています オペレータが任意で前後のレコードに移動していたら 違うレコードが表示されているかもしれません フォームシートビューなので 表示したい商品があった時に何度もクリックして レコードをさかのぼることになるので 検索画面の方で選択したレコードに 一発で移動ということをやりたいわけです 実際の画面をお見せできれば一番いいと思うのですが 言葉だけで伝えるのは難しいです… >検索:そのレコードのところにジャンプする というのは#2さんがおっしゃっているような FindRecordを使ったりということでしょうか? (今のところうまくいっていませんが^^;) また意図と違うことを言っていたらすみません コメント下さってありがとうございます

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

参考URLの様な事でしょうか。外していたらすみません。

参考URL:
http://www.accessclub.jp/bbs/0088/beginers31959.html
milk1215
質問者

お礼

回答ありがとうございます リンク先を参考にして 検索画面内サブ画面ダブルクリックのところに 商品マスター登録画面の商品IDにSetForcusし FindRecordする記述を書いてみました 以下の記述です   Dim strData As String     strData = Me!商品ID     Form_商品マスター登録!商品ID.SetFocus     DoCmd.FindRecord strData しかしFindRecordのところでエラー 「コマンドまたはアクション'レコードの検索'は無効です。」 と言われてしまいました 商品マスター登録画面の商品IDはオートナンバーになっています それも関係ありますか?それとも画面の設定でしょうか? あるいは全然別の問題なのか…

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

抽出を行っているのですから >商品マスター登録画面には表示したレコード1件のみしか >表示されなくなってしまいます。 こうなるのは当然ですね フォームのソースは指定した商品IDのもののみになります >私がやりたいのは単なるレコードの移動です… これをしたければ検索をしましょう フィルタなら解除すれば元に戻ります 抽出、フィルタ、検索の違いを勉強された方がいいみたいですね

milk1215
質問者

補足

回答ありがとうございます 言葉が足りなかったかもしれないですが、 検索画面でデータを抽出するところまではうまくいっています。 (フィルタは使わず、if文の入れ子で作ってますが…^^; 今後検索条件が増えたときのためにフィルタも勉強しようと思います) 抽出した中から指定(ダブルクリック)した商品IDを持つ レコードを別画面(商品マスター登録画面)で 同じ商品IDのレコードの内容を表示したい、ということなんですが ブックマークかな??と思って試してみましたがエラー… 使い方が良く分かってないです 的外れなことを言っていたらすみません メインの商品マスター登録画面の方でもいったんフィルターをかけて 解除すれば該当のレコードが表示されるという意味で おっしゃっているのでしょうか?

関連するQ&A

  • Access2000でフォームを開くときに常に新規レコードで開きたいのですが

    Access2000で、あるイベントに参加した人のデータベースを作りました。 検索用フォームで「氏名」と「生年月日」で検索し、その人の情報を別の フォームで見ることができるようになっています。 該当者がいない場合は、新しいレコードにそのデータを追加します。 検索結果を表示するフォームに個人情報を表示・書き込みできる画面を開く ためのボタンがあるのですが、このボタンをクリックした時に、常に新規 レコードで開きたいのですが、コードはどのように記述すればよろしいの でしょうか? ちなみに、いまは下記のようなコードになっています。 「新規登録ボタン」は個人情報を表示・書き込みできる画面を開くためのボタン 「応募者」は個人情報を表示・書き込みできるフォーム です。 Private Sub 新規登録ボタン_Click() On Error GoTo Err_新規登録ボタン_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "応募者" DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_新規登録ボタン_Click: Exit Sub Err_新規登録ボタン_Click: MsgBox Err.Description Resume Exit_新規登録ボタン_Click End Sub

  • access2000"社員管理システム"を利用しています。

    access2000"社員管理システム"を利用しています。 社員マスタサブフォームがあり、レコードソースは社員履歴QUE(社員履歴TBL、所属TBL)です。 社員コード 開始日 終了日 社内区分 所属コード 役職名 内線電話番号 呼出詳細 所属名 部署名 を入力していて、以下がコードです。 Sub Form_Load() On Error GoTo Form_Load_Err If ParentFormIsOpen() Then Forms![社員マスタFRM]!ToggleLink = True Form_Load_Exit: Exit Sub Form_Load_Err: MsgBox Error$ Resume Form_Load_Exit End Sub Sub Form_Unload(Cancel As Integer) On Error GoTo Form_Unload_Err If ParentFormIsOpen() Then Forms![社員マスタFRM]!ToggleLink = False Form_Unload_Exit: Exit Sub Form_Unload_Err: MsgBox Error$ Resume Form_Unload_Exit End Sub Private Function ParentFormIsOpen() ParentFormIsOpen = (SysCmd(acSysCmdGetObjectState, acForm, "社員マスタFRM") And acObjStateOpen) <> False End Function Private Sub 終了_Click() On Error GoTo Err_終了_Click DoCmd.Close Exit_終了_Click: Exit Sub Err_終了_Click: MsgBox Err.Description Resume Exit_終了_Click End Sub 終了日を入力したら次のレコードの開始日に終了日の翌日が自動的に入力されるようにしたいです。 宜しくお願いします!!

  • 新規レコードへ移動しない

    Access2010を使用しています。 サブフォームからメインフォームの「登録」ボタンプロシージャをCallした時、メイン・サブフォーム共に新規レコードへ移動しなくて困っています。 具体的には、サブフォームにフォーカスがある時に「F12」を押すと画面の入力項目の内容刃そのままでメインフォームの「注文番号」テキストボックスにフォーカスが移動します。 メインフォームにフォーカスがあるか、マウスで「F12」をクリックすると画面の入力項目がクリアされて新規レコードへ移動します。 コードは以下の内容が記述してあります。 ーーーーーサブフォーム----- Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case 123 Call Me.Parent.Form_KeyDown(KeyCode, Shift) KeyCode = 0 End Select End Sub -----メインフォーム----- Public Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case 123 Call 登録_Click KeyCode = 0 End Select End Sub Private Sub 登録_Click() DoCmd.GoToRecord , , acNewRec Me.注文番号.SetFocus End Sub

  • ACCESSの検索結果のレコード移動時イベント

    Access2010です。 F_マスタにF_サブのサブフォームが組み込まれています。 F_マスタには検索ボタンがあって、その検索結果がF_サブに表示されます。 その検索結果についてレコード移動時イベントを使い、クリックしたレコードの処理を行っています。 ところが、検索結果の1行目だけイベントが発生しません。 1行目以外ではイベントが発生し、その後は1行目でも発生するようになります。 表示直後はカレントレコードが1行目に存在するため、1行目をクリックしても移動とみなされない? そこで、表示直後でも1行目のイベントを発生させる何か良い方法はないでしょうか?

  • Access サブフォームのレコードソースを変更するには

    Accessのプロシージャについて教えてください。 フォーム FM0020 上に、2つのサブフォーム FS002001 と、FS002002 があります。 メインフォームにある値を使って、サブフォームのレコードソースを変更したい のですが、どうもうまくできません。 FS002001のレコードソースは下記の1行目のコードで変数strSQLに代入出来るのですが、 FS002002のレコードソースは下記の2行目のようにしても 「オブジェクトまたはクラスがこのイベントセットをサポートしていません」 となり、代入出来ないのです。 2つ目のサブフォーム上にあるテキストボックス HMCD が下記3行目のように すると代入できるので、サブフォームの名前を間違えているわけではないと思うのですが...。 他に原因としては何が考えられますか? 下記の3行を同じモジュール内に続けて書いても2行目だけがひっかかるのでもうお手上げ 状態です..。 なんとか助けてください。 お願いします。 strSQL = Forms!FM0020.FS002001.Form.RecordSource strSQL = Forms!FM0020.FS002002.Form.RecordSource strSQL = Forms!FM0020.FS002002!HMCD

  • レコード移動について

    単票フォームで何件かレコードがあります。 それを DoCmd.GoToRecord , , acNext で1つずつ移動させ、今何番目のデータなのか?をメッセージで出し、 最後のレコードになったら「最後のレーコード」というメッセージの後に Exit Sub させたいのですが... F8 で1つ1つコンパイルさせるとできるのですが、 データベース画面から直接フォームをDBCLして開こうとすると いきなり「最後のレコード」になってしまいます。 記述のが悪いのでしょうか?それともフォーム自体が悪いのでしょうか? 教えてください Private Sub Form_Current() If Me.CurrentRecord >= Me.RecordsetClone.RecordCount Then MsgBox "最後のレコード" Exit Sub Else MsgBox "途中のレコード" DoCmd.GoToRecord , , acNext   End If End Sub

  • Access レコード移動時イベントでサブフォーム

    お世話になります。 親フォーム Aがあります。(データソースが存在します) その中にサブフォームBがあります。(データソースが存在します) 親フォームのレコード移動時のイベントで、いつもサブフォームのレコードの最後を表示したいのです。そこで・・・ 親フォームAの レコード移動時イベントに Private Sub Form_Current() Me.B.SetFocus DoCmd.GoToRecord , , acLast End Sub 上記を記述すると、一番初めはきちんとサブフォームBのレコードは最後を表示するのですが、以後、親フォームのレコードを動かすと、親フォームの最後のレコードをさしっぱなしになってしまいます。 Me.B.SetFocus DoCmd.GoToRecord , , acLast これの後にどんな記述をすれば、親フォームのレコードを動かすと同時にサブフォームBも最後の行に移るようにできますでしょうか? 何卒よろしくお願いいたします。

  • Access レコード削除時に「カレントレコードがありません」エラーが表示されてしまう

    いつもお世話になっております。 フォームに「レコードの削除」ボタンを作成して実行したところ、 「カレントレコードがありません」と表示されてしまいます。 削除そのものは、正しく行われている(削除したいレコードが削除されている)のですが、 なぜ、そのようなメッセージが出てしまうのか分かりません。 他のフォームでは、削除するレコードが最後のレコードで無い限り、 そのようなメッセージは出ません。 また、そのフォームのレコードソースになっているクエリでは、 問題なく削除が実行されます。 削除ボタンの作成は、コントロールウィザードを使って行いました。 ちなみにVBAでは下記のような記述になっています。 Private Sub 削除テスト_Click() On Error GoTo Err_削除テスト_Click DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70 Exit_削除テスト_Click: Exit Sub Err_削除テスト_Click: MsgBox Err.Description Resume Exit_削除テスト_Click End Sub メッセージを表示させないためには、どのようにしたら良いでしょうか?? また、最後のレコードを削除した場合にも、 「カレントレコードがありません」メッセージを表示させなくするには どのようにしたら良いでしょうか? 教えてください。

  • Accessのレコードセレクタについて

    はじめまして、質問です。 フォーム画面にサブフォームがあり、検索するとサブフォームにワークテーブルからのレコードが出力されるのですが、ある画面では初期表示からレコードセレクタをホイールで移動でき、もう一方はできないものがあります。 レコードセレクタのデフォルトはどんな動きなのでしょうか? キーボードの方向キーで移動できるものとできないものがありのですが、何で制御しているのか? 漠然でしたら質問にはお答えしますので宜しくお願いします。

  • Accessでの VBのコーディングを教えて下さい。

    今回、初めてAccessで「顧客管理」を作成しています。 1対多のテーブルで、フォームを作成して、 サブフォームに表示されている多側のテーブルのレコードを、1レコードづつフォームで開きたいのですが、 今のコーディング(下記に表示)では、 既存のレコードしか開けません。 これに、新規のフォームを開いてレコードの追加も行いたいので、良かったらどなたかコーディングを教えて頂けませんでしょうか?宜しくお願いします。 Private Sub 売上メインボタン_Click() On Error GoTo Err_売上メインボタン_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "売上登録メインフォーム" stLinkCriteria = "[売上キー]=" & Me![売上キー] DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_売上メインボタン_Click: Exit Sub Err_売上メインボタン_Click: MsgBox Err.Description Resume Exit_売上メインボタン_Click End Sub

専門家に質問してみよう