人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MS Access パラメータクエリについての質問です。

いままで選択クエリの「抽出条件」に
[Forms]![フォーム名]![テキストボックスの名前]
を書いて実行していましたが、
複数のフォームからクエリを呼び出す必要がでてきました。

「抽出条件」の記述はどうすればよいでしょうか?
他の方法が必要なのでしょうか?

他の方法が必要、ということでしたら、
実現方法を教えてください。


なるべく手間がかからずに簡単にできる方法をさがしてます。



●質問者: ever_blue
●カテゴリ:コンピュータ
✍キーワード:access MS クエリ テキスト パラメータ
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● freemann
●19ポイント

いまいち把握しきれてませんが、一つのテーブルから複数の条件(複数のフォームからのクエリ複数の条件でクエリする)でクエリすると考えて、

クエリの抽出条件をANDなら、同じ横並びのところに条件を[Forms]![フォームの名前]![テキストボックスの名前]を複数書く、OR条件なら横並びにならないように条件に[Forms]![フォームの名前]![テキストボックスの名前]を書くでいいのかな?

的はずれでしたらごめんなさい。

◎質問者からの返答

freemannさん、ご回答ありがとうございます。

知りたいのは、以下のような状況です。

画面Aからクエリ1を呼出し、結果を画面Cに表示。

画面Bからもクエリ1を呼出し、結果を画面Cに表示。

具体的に言うと、画面A,Bとも顧客noのテキストボックスがあり、画面Cでその顧客noに対する履歴を

表示させたいのです。

お知恵をお貸しください。


2 ● husigi
●19ポイント

複数の抽出条件で選択クエリを実行するケースですが、

この条件が「and」の場合と「or」があると思います。

下記のように、

「and」の場合は同じ抽出条件列の複数のフィールドに条件を挿入し、

「or」の場合は異なる抽出条件列の複数のフィールドに条件を挿入するとよいでしょう。


http://www.seta.media.ryukoku.ac.jp/manual/office/access/query/s...

◎質問者からの返答

husigiさん,ご回答ありがとうございます。

状況はfreemannさんへの返信にて

ご説明させていただきました。

要は、呼出し元画面によって、

クエリの抽出条件の値(SQLの右辺)を変えたい

場合、どうすればよいかっていうことになります。

[Forms]![フォームの名前]![テキストボックス]

の記述が呼出し元によって変わりますので。


3 ● zaikk
●18ポイント

画面Aからは画面Cのテキストボックスに顧客noをコピーし、画面Cを開く。

画面Bからも画面Cのテキストボックスに顧客noをコピーし、画面Cを開く。

クエリの「抽出条件」では、

[Forms]![画面C]![テキストボックス]

のように、画面Cのテキストボックスを参照するようにしてはいかがでしょうか?

◎質問者からの返答

zaki-kさん、ご回答ありがとうございます。

zaki-kさんのご回答で解決しそうです。

私はAccess初心者なので、画面Cへのコピーの仕方がわかりませんでした。(試しては見たのですが。。)

画面Cを開いていなくても、画面A,Bから

画面Cにコピーできるのでしょうか?

プログラミングが必要でしたら、

お手本を教えていただければ幸いです。

よろしくおねがいします!


4 ● freemann
●18ポイント

フォームAとBからフォームCへ顧客noを伝えるということだけなら、以下の方法があります。

<<<標準モジュール内>>>

'モジュールレベルでの宣言

Private 顧客No As Integer

Sub setNo(ByVal i As Integer)

顧客No = i

End Sub

Function getNo() As Integer

getNo = 顧客No

End Function

<<<フォームA>>>

'テキストオブジェクトはフォームAの顧客noを入力するテキストボックス

'フォームAでのモジュールレベルでの宣言

Private No As Integer

Private Sub コマンド_Click()

Call setNo(No)

DoCmd.OpenForm ("フォームC")

'フォームCでは、テキストボックスがフォーカスを取るとフォームCのテキストボックスに顧客noをコピーするので一応やっておく(もしかしたらいらないかも・・)

Call Form_フォームC.テキスト.SetFocus

End Sub

Private Sub テキスト_Change()

No = Val(テキスト.Text)

End Sub

<<<フォームC>>>

'モジュールレベルで宣言する

Private No As Integer

Private Sub Form_Activate()

No = getNo

テキスト.SetFocus

End Sub

Private Sub テキスト_GotFocus()

'ここで顧客noを更新する

テキスト.Text = Str(No)

End Sub

フォームBのコードはフォームAと同じなので割愛します。

ただ、フォームA&Bの顧客noをフォームCにコピーしても、一番欲しい履歴情報がどうやったら取れるかまではわかりませんでした・・・


5 ● zaikk
●18ポイント

フォームCのクエリの条件に書き込むことにこだわらず、フォームを開くときの条件を設定することとすれば簡単では無いでしょうか?

フォームAまたはBからフォームCを開くボタンのサンプルコードです。

Private Sub Btn開く_Click()

Dim stLinkCriteria As String

stLinkCriteria = "[顧客No]=" & "'" & Me![顧客No条件] & "'"

DoCmd.OpenForm "フォームC", , , stLinkCriteria

End Sub


ここでフォームCのレコードソースは、フィールド「顧客No」が含まれるクエリであることとします。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ