アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
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

A 回答 (5件)

>いまいち話が噛み合わないのはそれが原因かも…


分かりにくい表現でしたが、ほぼ正しく受け取っていましたよ
答えは最初のものに戻ります

>strSQL = "SELECT *"
>    strSQL = strSQL & " FROM 商品マスター"
>    strSQL = strSQL & " WHERE 商品ID = " & Me.商品ID
ここで商品IDが指定されたものだけに絞込み

>    Form_商品マスター登録.RecordSource = strSQL
それをフォームのソースにしてしまえば
>フォームシートビューなので見た目は1件ごとの表示です
見た目だけでなくそのフォームには1件しかありません
移動したいといっている他のレコードは無くなっています
絞込みではなくレコードの移動をしてください

この回答への補足

>答えは最初のものに戻ります
というのは、#1のフィルタを使うということでしょうか?

#4のお礼に書きましたように、フィルタを使うと見た目上
1件しか表示されなかったので自分の思っていた動きではなかったです
1/1(フィルタ)という具合です

最初の質問で書いたレコードソースを1件だけに書換えてしまった
のと見た目上は変わりませんでしたし
フィルタを解除しても先頭レコードが表示されるだけでした

私がやりたかったことは3/100といった具合に
全体のレコード数は残した上で、指定レコードに移動したかったので
それはレコードセットで実現できました

補足日時:2008/07/29 07:21
    • good
    • 0

用語は統一しましょうね


いきなり別画面といわれても何のことかわかりませんよ

別画面というのは
>そのレコードをダブルクリックすると
>商品マスター登録画面に商品ID:2のレコードの内容が表示される
これのことですか?だったら商品IDが2のものしかないのでは

別画面が
>検索画面内のサブフォームに表示された
これなら、
もう一度ダブルクリックしてやらないと登録画面は書き換わりませんね

この回答への補足

別画面と言っているのは
商品マスター登録画面のことです
混乱するような言い方してすみません

今回使用しているフォームは3つ
1.商品マスター登録画面
2.検索画面
3.検索画面内のサブフォーム

最初の質問で書いたコードは
3.検索画面内のサブフォームのDblClickに記述してあることです
サブフォームには全ての商品、もしくは一部の商品が
抽出されて表示されてますので
その中から指定した商品と同じ商品IDを持つレコードに
1.商品マスター登録画面でも移動したいということです
1には商品マスター全てがレコードソースになっていますが
フォームシートビューなので見た目は1件ごとの表示です
3で選択(ダブルクリック)した商品IDのレコードに移動したいのです

2.3の画面はダブルクリックされたら
検索終了とみなして閉じます
という仕様です

サブフォームというのは登録画面にあるのではなく検索画面にあるので
そこをちゃんと伝えきれてなかったかもしれないですね
いまいち話が噛み合わないのはそれが原因かも…

補足日時:2008/07/28 13:28
    • good
    • 0
この回答へのお礼

解決しました!
レコードセットで指定したレコードに移動することができました

  With Form_商品マスター登録.Recordset
    .FindFirst "商品ID = " & Me!商品ID
    If .NoMatch Then MsgBox "該当するレコードはありません"
  End With

フィルタを使って試してみましたが、やはり1件だけしか表示されず
解除すると先頭レコードになってしまうので
やりたいことと違ってました

要領を得ない質問をして申し訳ありません
自己解決となりましたが、いろいろご指摘いただいて
勉強になりました
ありがとうございました

お礼日時:2008/07/28 16:20

>メインの商品マスター登録画面の方でもいったんフィルターをかけて


>解除すれば該当のレコードが表示されるという意味で
>おっしゃっているのでしょうか?

抽出:そのレコードだけを取り出す
フィルタ:そのレコードだけを表示する(元のソースはそのまま)
検索:そのレコードのところにジャンプする

>私がやりたいのは単なるレコードの移動です…
だったら検索ですね

だけど
>検索画面内のサブフォームに表示、該当レコードをダブルクリックすると
>商品マスター登録画面にその商品が表示される…
この中でレコードの移動(他の商品に移動)を行いたいだったら、仕様の段階で矛盾してますね

もう一度ダブルクリックのところにもどらないと他の商品は表示できないのでは

この回答への補足

理解力がなくてすみません
>もう一度ダブルクリックのところにもどらないと他の商品は表示できないのでは
のところがよくわかりません

具体例でいうと、商品マスターに100件商品があったとして
商品マスター登録画面から
検索画面に飛んでテキストボックス・ないしコンボボックスから
選択した抽出条件に合うレコードが3件抽出されたとします
(データシートビューで表示されています)
検索画面内のサブフォームに表示された3件のうちの1件が
商品ID:2だったとしたら
そのレコードをダブルクリックすると
商品マスター登録画面に商品ID:2のレコードの内容が表示される
(こちらはフォームシートビューなので1件ごとの表示です)
という仕様です

別画面の表示を指定したレコードに移動させるということなんですが
これは矛盾することなんでしょうか?

ちなみに商品マスター登録画面は最初に開いた段階では
新規レコードになっています
オペレータが任意で前後のレコードに移動していたら
違うレコードが表示されているかもしれません
フォームシートビューなので
表示したい商品があった時に何度もクリックして
レコードをさかのぼることになるので
検索画面の方で選択したレコードに
一発で移動ということをやりたいわけです

実際の画面をお見せできれば一番いいと思うのですが
言葉だけで伝えるのは難しいです…

>検索:そのレコードのところにジャンプする
というのは#2さんがおっしゃっているような
FindRecordを使ったりということでしょうか?
(今のところうまくいっていませんが^^;)

また意図と違うことを言っていたらすみません
コメント下さってありがとうございます

補足日時:2008/07/27 18:00
    • good
    • 0

参考URLの様な事でしょうか。

外していたらすみません。

参考URL:http://www.accessclub.jp/bbs/0088/beginers31959. …
    • good
    • 0
この回答へのお礼

回答ありがとうございます

リンク先を参考にして
検索画面内サブ画面ダブルクリックのところに
商品マスター登録画面の商品IDにSetForcusし
FindRecordする記述を書いてみました

以下の記述です
  Dim strData As String

    strData = Me!商品ID

    Form_商品マスター登録!商品ID.SetFocus
    DoCmd.FindRecord strData


しかしFindRecordのところでエラー
「コマンドまたはアクション'レコードの検索'は無効です。」
と言われてしまいました

商品マスター登録画面の商品IDはオートナンバーになっています
それも関係ありますか?それとも画面の設定でしょうか?
あるいは全然別の問題なのか…

お礼日時:2008/07/27 14:40

抽出を行っているのですから


>商品マスター登録画面には表示したレコード1件のみしか
>表示されなくなってしまいます。
こうなるのは当然ですね
フォームのソースは指定した商品IDのもののみになります

>私がやりたいのは単なるレコードの移動です…
これをしたければ検索をしましょう

フィルタなら解除すれば元に戻ります

抽出、フィルタ、検索の違いを勉強された方がいいみたいですね

この回答への補足

回答ありがとうございます

言葉が足りなかったかもしれないですが、
検索画面でデータを抽出するところまではうまくいっています。
(フィルタは使わず、if文の入れ子で作ってますが…^^;
今後検索条件が増えたときのためにフィルタも勉強しようと思います)

抽出した中から指定(ダブルクリック)した商品IDを持つ
レコードを別画面(商品マスター登録画面)で
同じ商品IDのレコードの内容を表示したい、ということなんですが
ブックマークかな??と思って試してみましたがエラー…
使い方が良く分かってないです

的外れなことを言っていたらすみません
メインの商品マスター登録画面の方でもいったんフィルターをかけて
解除すれば該当のレコードが表示されるという意味で
おっしゃっているのでしょうか?

補足日時:2008/07/27 14:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A