- ベストアンサー
別フォームから主フォームに反映させるには?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#1です > おそらくこの質問を返されたということは、 >「F01-1(メインフォーム)とF02(検索フォーム)のレコードは一致していなければならない」 > ということでしょうか? いえいえ、 ご質問内容で、フォーム「F01-1」「F02」の表示が同じだったので、 レコードソースも一緒と考えた方が楽だったものですから。 > F01-1を作成するときは、 > > T03商品コード > 日付 > 顧客コード > T01会社名 > 住所 > 電話番号 > > を選択しています。 > F01-2(サブフォーム)は、T02を選択しています。 > F02(検索フォーム)は、T01のみを元に作成しました。 という事なので、 検索フォームが持っているのは、「顧客コード」 主フォームが持っているのは、多側の「顧客コード」 Forms("F01-1").Recordset.FindFirst "顧客コード = " & Me!顧客コード と検索するだけでは、 主フォームの先頭で一致するものしか表示することが出来なかったと思います。 「一致する顧客コードのもの」という位置づけと思うので、 Filter を使った方が良いと思います。(あったら絞り込まれます) With Forms("F01-1") .Filter = "顧客コード = " & Me!顧客コード .FilterOn = True End With ※ #1で主キーと言っていたのは、同じレコードソースで1件のみの検索を考えていました。 ※ 上記等コード部分は、イベントプロシージャの中に記述します。 Private Sub ボタン_Click() With Forms("F01-1") .Filter = "顧客コード = " & Me!顧客コード .FilterOn = True End With End Sub のように ※ 使い方わかりませんが、商品の仕入れ関係でしょうか。 「商品名」は、「T02」ではなく「T03」?・・・ 同じ「商品コード」に違う「商品名」を付ける?・・・・ 「T03」は「単価」等変更があった時の、各商品の履歴的なものでしょうか であれば、「T03」に「日付」が必要な気も・・・・ でもフォーム上で「合計」を出しているので?・・・・・ この辺わかりません。 ※ 未検証 ※※ 反映部分、解釈が近ければよいのですが
その他の回答 (5)
- 30246kiku
- ベストアンサー率73% (370/504)
#5です > 画面が被っていたために見えないですが、顧客CDも商品CDもきちんと表示されています。 これ、 あまり多くを推測させない方が良いと思います。 各CDは数値型で右側に配置しているのかな(一例)・・・等々と推測はできますが・・・ それを隠して話が進むのなら、それはそれで良いと思います。 ただ、私が見たい(見たかった)ものが隠れていた、というだけですので。 見たいものが無い・・・・スルーってことにも。 マウスホイール云々に関して) はじめに、お詫びします。 質問者さんの環境での動きが私が知っている動きと同じなのかわからなかったので こういう動きではないんだろうな・・・ でも、こういう事があればそうなるのかな・・・・と思いつつ記述してました。 > マウスホイール(コロコロ)をすると編集中でもレコードが移動します。 > (テーブルにある元データは編集中までのところで変更されます) > 「たまたま、画面下に表示されるレコード移動ボタンで移動していても」 > と置き換えても構いません。 私が知っている動きと同じようだと思います。 でも、最初のレコードに移動する・・・・・これ、未だにわかりません。 ちなみに、私の 2000 のバージョンは、SP-3 になってます。 無印 → SR-1 → SP-2 → SP-3 と変わってきていたような・・・・ 無印では、全体的に動きがおかしかったような記憶があります。 (これ、私の感覚だけです:提示できるもの等ありません) 添付図は他フォームから値を設定するものになります(#3の動き) (2000でも2007でも動きに違いがなかったので、2007にて図採取) ・主フォーム「F1」は単票(面倒だったのでサブフォームなし) テーブル「T01」:顧客ID(数値:主キー)、会社名 テーブル「T02」:売上ID(数値:主キー)、日付、顧客ID これをクエリで SELECT T02.売上ID, T02.日付, T02.顧客ID, T01.会社名 FROM T01 INNER JOIN T02 ON T01.顧客ID=T02.顧客ID; このクエリを元にフォームウィザードで作成 ・検索もどきフォーム「FK_T02C」は帳票 テーブル「T01」を帳票:フォームウィザードで作成 フォーム「FK_T02C」のボタン「btn1」(標題:設定)に以下を記述 Private Sub btn1_Click() Forms("F1").顧客ID = Me.顧客ID DoCmd.Close acForm, Me.Name, acSaveNo End Sub 動き:添付図上側より) 「F1」:3レコード目を表示し「検索」ボタン押下 (顧客IDは2) 「FK_T02C」:顧客ID=1 のレコードに移動した状態で「設定」ボタン押下 (「F1」への設定と同時にフォームを閉じます) 「F1」:「顧客ID」と「会社名」が変わっていて、編集状態になってます ※ ここで主フォーム「F1」では、他のレコードに表示が移動することはありません ※※ ご質問の画像 会社名が一覧になっている検索フォームで「反映」ボタンをクリックする時の操作は どのようにしてますか。 マウスホイールでコロコロ移動しボタン押下・・・・でしょうか その余韻で主フォームをコロコロしているという事はないでしょうか ※※ マウスホイールは、2000/2003 でレコード移動に使えますが、 2007 ではできなくなっています。(2010 は持っていないので?) レコードが編集中ならマウスホイールで移動できなくする方法等あるので 検討されてみてはいかがですか。(保存する操作が増えますけど・・・) http://okwave.jp/qa/q5129734.html の#5とか ※※ 添付図の動きを「反映」と言えなくはない、かな・・・・ 後から追加された画像があると、なおさらそう思えたり・・・・ 表示が同じで「反映」なら、同じ情報を複数のテーブルに重複して持つ・・・ これは考えにくいので、表示を切り替えるものと・・・ その切り替えに、主キーを使いましょうか・・・・ あ、多側なら Filter の方が良いのかな・・・・・ #2の後 やりたいことは、表示を変えることなんだろうか・・・ 「商品コード」に対して「顧客コード」を設定し直すこと・・・???・・・で、#3に あれあれ、この「商品コード」は、「け会社」じゃなく「い会社」だった・・・ という流れでした。 結果、#2で解決されたようなので・・・・ 確認しなかった落ち度もありますし、うまく説明(回答)できていなかった・・・ 今後に活かしていきたいと思います。 私からは以上です。 失礼しました。
お礼
返事が遅くなりました。 いつもありがとうございます。 画面が見えなかった件 本当にすみませんでした。 とくに何も考えておらず、画面のコピーカットができたできたと喜んで 深く考えず貼り付けた結果です。 申し訳ありません。 アクセスのバージョンの件 無印でした。 どうりで… マウスホイールの件 こちらこそ説明下手で、申し訳ありませんでした。 ご親切に指摘いただいたのですが、マウスホイールを固定するのも以前やってみて、 テスト段階では上手くいったのですが、本段階になると他のクエリや モジュールに書かれた命令が効かなくなる… など、自分で解決できない問題が発生したので諦めました。 画像とその解説の件 詳しくありがとうございます。 #3でのご説明の事、改めて理解できました。 別窓フォームで編集先を指定し、主フォームで編集が行えるということですね。 登録画面とは別に、編集画面もいずれ作成したいと思っていたのでとても助かりました。 幾度に渡り、私のために説明をいただき本当にありがとうございました。 また、私の説明に対するご指摘は大変貴重な意見です。 今後気を付けていきます。 ありがとうございました。
- 30246kiku
- ベストアンサー率73% (370/504)
#4です あれ、画像・・・前からありました? > 私も質問の意図がわかりかねますが、私が行いたいのは、 ご質問に > 主フォーム(F01-1)単票 > 会社名、住所、電話番号 > 検索フォーム(F02)帳票 ※別窓 > 会社名、住所、電話番号、コマンドボタン という記述とともに「反映」ということだったので、 「同じものを書きこむ」とは思えませんでした。 また、サブフォームは元としているクエリで抽出条件に何かを設定しているのかな・・・と なので、#2までは、検索・絞り込む方法を書いていました。 これは表示を変更するだけなので、主フォームのデータを書き換えることはありません。 頂いた補足の中に > F01-1を作成するときは、 > > T03商品コード > 日付 > 顧客コード > T01会社名 > 住所 > 電話番号 という記述があり、 主フォームで選択しているレコードの「顧客コード」に、 別窓で検索した「顧客コード」を更新/変更設定する・・・ これを「反映」と言われているのか・・・ 「商品コード」「日付」「顧客コード」が表示されていないので、新規ではない・・・ いろいろ考えてみて・・・・で、#3で設定する記述を。 Private Sub ボタン_Click() Forms("F01-1").顧客コード = Me!顧客コード End Sub とすると主フォームで選択しているレコードの「顧客コード」を書き換えます。 この直後は、主フォームは編集状態になっていると思います。 (ESCキー等でキャンセルすることが出来ます) 主フォームの表示が最初のレコードに戻る・・・これはないと思います。 #3は、#2の「できた」お言葉より前にした回答で、「反映」とはどんな動き/操作?・・・ で、迷った結果のものとなります。 #4は、#3の補足で頂いた内容に、えっっ・・・って思ったので書かせてもらいました。 今後質問される時があると思います。 その時には「検索」「絞り込み」「更新」「新規設定」等々、 イメージしやすい言葉を使われた方が良いと思います。 ※ 今、画像を見ると、 ・主フォームの「顧客CD」が空欄 ・主フォームの「会社名」以降が埋まっている ・主フォームの「商品CD」が空欄 ・でもサブフォームには何かが表示されている 私にはわからない部分が多いので、多分回答しなかったと思います。 回答するとしたら#3の値を設定する方法を最初に書いたと思います。 (文章&画像から、「反映」は「設定」と解釈したと思います) (「検索」「絞り込み」ではない、と判断したと思います) ※※ フォーム上でマウスホイールを使ったことがあまりないのでわかりませんが マウスホイールで動かした時、選択されたレコードは ・何らかを操作したレコードから動かない? ・コロコロ動かして表示されたものが選択されたレコード? もし、コロコロ動かしても、選択したレコードが元のままだったら、 値を設定する時に選択していたレコードに表示が切り替わるのはあり、かなと思います。 この辺わかりません。
補足
お返事ありがとうございます。 私からの返事が遅くなり申し訳ございません。 画像はわかりやすくなるかと、#4の補足の後に付けました。 最初に付けておけば良かったですね… >サブフォームは元としているクエリで抽出条件に何かを設定しているのかな・・・と クエリはこの中では一切使用していません。 そのため、フォームがたくさんのテーブルから作られています。 >主フォームで選択しているレコードの「顧客コード」に、 >別窓で検索した「顧客コード」を更新/変更設定する・・・ >これを「反映」と言われているのか・・・ すみません、私の伝達不足でした。 なんと表現して良いのかわからず、「反映」という言葉を使ってしまいました。 実際行いたかったことは、表示を変更するだけで、F02の検索フォームでの編集は行いません。 おそらく、#3での設定というのは、 「F02で何かしらの編集作業を行い、それをF01-1またはF01-2に反映させる」 ということでよろしかったでしょうか? でしたら、私が望んでいたのは#2の設定でした。 説明不足、語彙不足でお手数をおかけしました。 ご指摘の通り、以後言葉に気をつけたいと思います。 > 今、画像を見ると、 >・主フォームの「顧客CD」が空欄 >・主フォームの「会社名」以降が埋まっている >・主フォームの「商品CD」が空欄 >・でもサブフォームには何かが表示されている 画面が被っていたために見えないですが、顧客CDも商品CDもきちんと表示されています。 マウスホイールの件はややこしくなることを書いてしまいましたね…。 > ・何らかを操作したレコードから動かない? マウスホイール(コロコロ)をすると編集中でもレコードが移動します。 (テーブルにある元データは編集中までのところで変更されます) > ・コロコロ動かして表示されたものが選択されたレコード? そういうわけではありません。 #4の補足の「マウスホイールで他の会社名のレコードに移動していても」 「たまたま、画面下に表示されるレコード移動ボタンで移動していても」 と置き換えても構いません。 >もし、コロコロ動かしても、選択したレコードが元のままだったら、 >値を設定する時に選択していたレコードに表示が切り替わるのはあり、かなと思います。 >この辺わかりません。 F01-1を立ち上げた時、メインフォーム、サブフォームで「あ会社」のレコードが 最初に表示されていたとします。 それは私が意識的に「選択」しているわけではありません。 (フォームの設定で常に「新規」から始まるようにしていなかったら、 テーブルの一番最初に書かれたレコード(この場合「あ会社」)が表示されるはずです。) その状態で検索を行い、#3の設定で「反映」のコマンドボタンを押したら 「あ会社」が「選択」されているから、「あ会社」が表示されてしまう。 ということでしょうか? ややこしいやり取りをさせてしまい、本当にすみません…。
- 30246kiku
- ベストアンサー率73% (370/504)
#3です > ""と&とがあるないでこのような差がでるのですね。 > 奥が深いです… いやいや #2は主フォームを「顧客コード」で絞り込むもので、データは変わりませんが、 #3はデータ(顧客コード)を変更・設定しに行きます。 「反映」がどっちなのかわからなくなってきたので#3を追加したのですが・・・ 動作を確認されたのは、テスト用の環境ですよね #3を確認された時のデータが変わっていると思われます ※ 最初のレコードに戻る・・・・これチョッと理解できてません
補足
お返事ありがとうございます。 >#2は主フォームを「顧客コード」で絞り込むもので、データは変わりませんが、 データが変わらないというのがわかりません。 新規レコードも追加できるし、追加、更新について問題なく行えます。 >#3はデータ(顧客コード)を変更・設定しに行きます。 顧客コードは変更してもらっては困るのですが… >「反映」がどっちなのかわからなくなってきたので#3を追加したのですが・・・ 私も質問の意図がわかりかねますが、私が行いたいのは、 F01-1を開いていて、F02を開く。 F02で顧客を検索し (このとき会社名を入力しボタンを押したら、 帳票で何件かの会社に絞られるというテキストボックスと コンボボックスを用意しておきます。) 検索結果から、必要な項目を選び、「反映」ボタンを押す。 (「反映」ボタンは、会社名、住所、電話番号、の横にある。) F02で選択したものが、F01-1に反映される。 ということが行いたいのです。 説明が下手で、言葉だけではわかりかねるやも知れません…。 >動作を確認されたのは、テスト用の環境ですよね >#3を確認された時のデータが変わっていると思われます このデータ(この情報?)自体は練習用にごく簡易化したものです。 #2の時と#3の時とで、大きくデータが変わっていることはないと思われます。 商品レコードを追加したり削除したりは行いましたが…。 >※ 最初のレコードに戻る・・・・これチョッと理解できてません フォームを作成した場合、特にいじらなければ、 フォームを開いた時に登録してあるデータが表示されますよね? マウスホイールで移動できる。 例えば、 あ会社 い会社 う会社 ・ ・ ・ け会社 こ会社 とレコードがあった場合、#3の指示通りに行い、 F02で「お会社」で「反映」をクリックすると、 F01-1が「あ会社」のレコードを表示します。 マウスホイールで他の会社名のレコードに移動していても、 「あ会社」のレコードに戻ってしまう。 ということです。
- 30246kiku
- ベストアンサー率73% (370/504)
#2です 申し訳ありませんが、解釈違いをしていたかも・・・ 「反映」を、主フォームの検索(絞り込み)表示と思っていましたが、 主フォームに表示されている商品に対して「顧客コード」を設定する という事になりますか。 であれば、 Forms("F01-1").顧客コード = Me!顧客コード でどうなりますか。 (設定された主フォームは編集状態になると思います) ※ 未検証
補足
ありがとうございます。 Forms("F01-1").顧客コード = Me!顧客コード こちらもやってみましたが、 会社を選び反映のコマンドボタンを押したら、 なぜかメインフォームが最初のレコードに戻り、反映されません。 #2の状態だとうまく反映されます。 ""と&とがあるないでこのような差がでるのですね。 奥が深いです…
- 30246kiku
- ベストアンサー率73% (370/504)
> 別窓から主フォームへ反映することはできないのでしょうか と言われておりますが、ただ単に値を代入と言う事ではないですよね。 主フォーム(F01-1)単票 と、 検索フォーム(F02)帳票 のソースレコードは同じものでしょうか。 各フォームは連結されたものでしょうか。 同じレコードを表示しているつもり・・・であれば、 各レコードには主キーがあると思います。 検索フォーム(F02)帳票で選択した主キー値を元に、 主フォーム(F01-1)単票 内を検索するようにします。 Forms("F01-1").Recordset.FindFirst "主キーフィールド = " & 検索フォーム(F02)内主キー値 ※ 主キーフィールドがテキスト型なら、主キー値を ' ' で囲みます。 Forms("F01-1").Recordset.FindFirst "主キーフィールド = '" & 主キー値 & "'" この方法以外にも、主フォーム(F01-1)単票 に Filter をかけるのもあります。 例えば、 With Forms("F01-1") .Filter = "主キーフィールド = " & 主キー値 .FilterOn = True End With ※ 未検証(メモ帳に直接書いていたので) ※ 解釈違い等々、補足してください。
補足
お返事ありがとうございます! 先日の質問にもお答えいただいたのに加え、ありがとうございます。 そして返事が遅くて申し訳ありません…。 >主フォーム(F01-1)単票 と、 >検索フォーム(F02)帳票 のソースレコードは同じものでしょうか。 >各フォームは連結されたものでしょうか。 テーブルについては下記の通りです。 T01 顧客コード(主キー、オートナンバー) 会社名 住所 電話番号 T02 コード(主キー、オートナンバー) 商品コード(数値型) 商品名 数量 単位 単価 T03 商品コード(主キー、オートナンバー) 日付 顧客コード(数値型) 各フォームの連結…というのはよくわからなかったのですが、 リレーションについては T01顧客コード(一対多)T03顧客コード T03商品コード(一対多)T02商品コード と、組んであります。 F01-1を作成するときは、 T03商品コード 日付 顧客コード T01会社名 住所 電話番号 を選択しています。 F01-2(サブフォーム)は、T02を選択しています。 F02(検索フォーム)は、T01のみを元に作成しました。 そのため、検索フォームとすべてが一致というわけではありません。 おそらくこの質問を返されたということは、 「F01-1(メインフォーム)とF02(検索フォーム)のレコードは一致していなければならない」 ということでしょうか? あと、初歩的な質問なのですが… Forms("F01-1").Recordset.FindFirst "主キーフィールド = " & 検索フォーム(F02)内主キー値 というコードは、検索のコマンドボタンのイベントプロジャー、 つまりモジュールに書くものなのでしょうか?
お礼
さっそくのお返事ありがとうございます! できましたーーー!! >「商品名」は、「T02」ではなく「T03」?・・・ >「T03」は「単価」等変更があった時の、各商品の履歴的なものでしょうか >であれば、「T03」に「日付」が必要な気も・・・・ >でもフォーム上で「合計」を出しているので?・・・・・ 商品名はT02ですよ? T03は、T01とT02を繋げるためのクッション的なものです。 こうしないとメインフォームとサブフォームがうまく連動して動かないので…。(多分) 会社ごとに、なんの商品を買っているかを見るためのF01-1とF01-2です。 >同じ「商品コード」に違う「商品名」を付ける?・・・・ 商品コードというより、売上コードと書いたほうが良かったですね。 すみませんでした。 少し身の上話なのですが… 会社でアクセスを使って商品管理のプログラム?を作るように言われています。 私は、低レベルの文型大学を出た新入社員で、アクセスに触れるのはこれがほぼ初めてです。 こんな私に、上司がこの仕事を任せたということは、学ぶ機会を与えてくれたと思い、 日々勉強しています。 しかし、勉強して作るというよりも、どうしても作りながらの勉強になり、 今現在のアクセスについての知識は付け焼刃です。 また、会社でアクセスが使える人もいません。 そのためわからない事も多く、回答者様の言葉に付いていけないことも多々で、 同じこと簡単なことを何度もお伺いし、大変申し訳なく思います。 こうしてわからないことは多いですが、それは可能性だと思い(笑) これからも精進し、30246kiku様のように親切な回答者になりたいと思います! ただまだ、どうしても自己解決できず質問してしまうことがあると思います。 その時は、しょうがないなと思い手を貸していただけたら嬉しいです。 あと、30246kiku様のアクセスについて紹介されているHPも見ました! また困ったら参考にさせていただきます。 この度は本当にありがとうございました!