- ベストアンサー
Accessフォームパラメータについて
- Access2000(2002のライセンスがあったのでアップグレード予定)でプログラムを作成する際、フォームAにテキストボックスを配置し、ユーザーに文字を入力させます。入力された文字をキーにしてデータベースを検索し、該当する情報をフォームBに表示します。また、複数行の表形式でデータを表示・スクロールできるようにします。
- 具体的な実現方法についてはイメージできないため、パラメータ値の受け渡しについてアドバイスを求めています。フォームAのテキストボックスの値をキーとしてデータベースを読み、該当するレコードを表形式のフォームBに表示します。キーの値が変更され、更新ボタンを押すと再度検索を行い表示を更新します。
- 表示された明細には変更ボタンを配置し、変更フォームでデータを編集し終えたら表形式の画面に戻る機能も追加されます。パラメータ値の受け渡しがうまくいかず困っているため、アドバイスを求めています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
フォームBをサブフォームを使ったフォームにしては? 話しやすくするため、元になる適当なデータを作ります。 テーブル1 フィールド1 フィールド2 フィールド3 フィールド1が主キーまたは重複の無いフィールド、フィールド2が検索するデータのフィールドとします。 そこに適当にデータを入れておきます。 フィールド1 フィールド2 フィールド3 1 あ ああ 2 い いい 3 あ うう 4 あ ええ 5 い おお フォームBリスト(フォームBの中のサブフォーム用) フォームのプロパティを設定します。 「既定のビュー」を「データシート」にします。 「レコードソース」を「テーブル1」にします。 「更新の許可」を「いいえ」にします。 「削除の許可」を「いいえ」にします。 「追加の許可」を「いいえ」にします。 テーブル1の全てのフィールドをフォームBに貼り付けます。(実際は表示したい物だけ) これを保存しておきます。 フォームB サブフォーム/サブレポートと、テキストボックスと、コマンドボタンを貼り付けます。 名前を例えば、 検索結果(サブフォーム/サブレポート) 検索データ(テキストボックス) 修正(コマンドボタン)(表題も同じ) 閉じる(コマンドボタン)(表題も同じ) とします。 検索結果(サブフォーム)のプロパテイーで、 「ソースオブジェクト」を「フォームBリスト」にします。 「リンク子フィールド」を「フィールド2」にします。 「リンク親フィールド」を「検索データ」にします。 各コマンドボタンのクリック時を Private Sub 修正_Click() DoCmd.OpenForm "フォームC", , , "フィールド1=""" & 検索結果!フィールド1 & """" 'フィールド1が文字列の場合 End Sub Private Sub 閉じる_Click() DoCmd.Close acForm, Me.Name End Sub にする。 フォームA テキストボックスと、コマンドボタンを貼り付けます。 検索データ(テキストボックス) 検索(コマンドボタン)(表題も同じ) コマンドボタンのクリック時を Private Sub 検索_Click() DoCmd.OpenForm "フォームB" Forms!フォームB.検索データ = 検索データ End Sub フォームC(データ修正用) フォームのプロパティを設定します。 「レコードソース」を「テーブル1」にします。 「削除の許可」を「いいえ」にします。 「追加の許可」を「いいえ」にします。 テーブル1の全てのフィールドをフォームCに貼り付けます。(実際は表示したい物だけ) 修正(コマンドボタン)(表題も同じ) 中止(コマンドボタン)(表題も同じ) 各イベントのクリック時を Private Sub 修正_Click() DoCmd.Close acForm, Me.Name End Sub Private Sub 中止_Click() Me.Undo DoCmd.Close acForm, Me.Name End Sub にする。 これでフォームAを表示してみてください。 フォームAで、テキストボックスに「あ」または「い」または他の文字を入れて、「検索」ボタンを押すと、フォームBが表示されます。 フォームBで、表示されているデータを選択して修正を押すと、フォームCが表示されます。 こんな感じでしょうか? あと、エラーチェックが必要ですが・・・ p.s. キーを入力するテキストボックスもフォームBに置いた方が使いやすいような気もしますが・・・
お礼
アドバイスを元に、試行錯誤しながら、やってきました。 なんとか、実現できました。 ありがとうございました。