Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

新着の投稿記事


タイトルRe^4: Accessのフォームで複数あいまい検索条件
記事No172105   [関連記事]
投稿日: 2017/12/14(Thu) 23:16
投稿者hatena
> 丁寧に教えていただきありがとうございます!!
> ひとつひとつクエリを作成する必要が無くなるだけでもすごく楽にはなるのですが,
> もうひとつうかがいたいのは,
> やはり,このやりかたであっても,30以上のパターンすべての
> VBAを記述する必要はありますよね?
>
> (氏名だけで検索する,氏名と生年月日で検索する,氏名と生年月日と住所で検索する,
> 住所と生年月日で検索する,氏名と生年月日と住所で検索する・・・)

いえ、条件を設定したフィールドの数だけ If ・・・ Then 文を記述するだけです。

氏名と生年月日と住所の3つのフィールドが対象なら、If ・・・ Then文は3つです。
私の回答のコードをもういちどよく読んで、コードの意味を理解してください。


あと、前回の回答では完全一致の条件でしたが、あいまい条件(部分一致)にしたいなら、
条件式を生成するコードを下記のようにLike演算子で比較するように変更します。

strWhere = strWhere & " AND 氏名 Like '*" & Me.テキストボックス1 & "*'"

タイトルRe^3: Accessのフォームで複数あいまい検索条件
記事No172104   [関連記事]
投稿日: 2017/12/14(Thu) 16:16
投稿者masunona
ナバ さま
hatena さま

丁寧に教えていただきありがとうございます!!
ひとつひとつクエリを作成する必要が無くなるだけでもすごく楽にはなるのですが,
もうひとつうかがいたいのは,
やはり,このやりかたであっても,30以上のパターンすべての
VBAを記述する必要はありますよね?

(氏名だけで検索する,氏名と生年月日で検索する,氏名と生年月日と住所で検索する,
住所と生年月日で検索する,氏名と生年月日と住所で検索する・・・)

そのパターンを減らすことは難しいですよね・・。
ずうずうしくすみません。

タイトルRe^3: テーブル同士であいまい検索
記事No172103   [関連記事]
投稿日: 2017/12/14(Thu) 13:09
投稿者hatena
> 部分一致しています

部分一致だとインデックスは効かないので効果はないですね。

テーブル1の件数×テーブル2の件数 分の突合せを行うことになるので、件数の乗数に比例して重くなりますね。

残念ながら、ソフト側の設定でどうにかなる問題ではないです。
メモリを増やす、CPUを高速なものにする、ドライブをSSDにするなど、ハードの性能を上げる方向しかないかと。

タイトルRe^2: テーブル同士であいまい検索
記事No172102   [関連記事]
投稿日: 2017/12/14(Thu) 11:12
投稿者PPP
> > ■困っている事
> > 件数が多くて表示するのに1分程度かかる
>
> 抽出対象のフィールド(テーブル2の方)にインデックスは設定してありますか。
> してなければ設定してみてください。
>
> 前方一致ならインデックスは効果があります。

お返事有難う御座います
部分一致しています
言葉足らずで申し訳ありません

タイトルRe^2: Accessのフォームで複数あいまい検索条件
記事No172101   [関連記事]
投稿日: 2017/12/13(Wed) 21:39
投稿者hatena
ナバさんも回答されているように、リストボックスのRowSourceにはSQLも設定できますので、
VBAでSQLを生成すれば、クエリは不必要です。

提示のコードなら、下記のように記述できます。

Dim strSQL As String
Dim strWhere As String

strSQL = "SELECT * FROM テーブル名" '現状のクエリのWHERE句を除いたもの

If Not IsNull(Me.テキストボックス1) Then
    strWhere = strWhere & " AND 氏名='" & Me.テキストボックス1 & "'"
End If

If IsDate(Me.テキストボックス2) Then
    strWhere = strWhere & " AND 生年月日=#" & Me.テキストボックス2 & "#"
End If

If Not IsNull(Me.テキストボックス3) Then
    strWhere = strWhere & " AND 住所='" & Me.テキストボックス2 & "'"
End If

If strWhere = "" Then
   strSQL = strSQL & ";"
Else
   strSQL = strSQL & " WHERE " & Mid(strWhere, 6) & ";"
End If

Me.リスト31.RowSource = strSQL

条件が増えたら、If Nor IsNull(・・・) Then ・・・・の文を追加するだけです。

タイトルRe: Accessのフォームで複数あいまい検索条件
記事No172100   [関連記事]
投稿日: 2017/12/13(Wed) 17:43
投稿者ナバ
こんばんは。

> 今回絞込条件が5つに増えたことで、この方法だと、
> クエリを30以上作らなければならなくなり、困っています。
> もっとよい方法はないでしょうか?

それぞれのクエリはWhere句が違うだけですよね?

フォームの.RowSourceプロパティにクエリ名を代入するのではなく、
テキストボックスの入力状態によりWhere句を組み立てていき、
最後にSQL文として完成させた文字列を代入するようにしたらどうでしょう。

タイトルAccessのフォームで複数あいまい検索条件
記事No172099   [関連記事]
投稿日: 2017/12/13(Wed) 16:27
投稿者masunona
OS:win10
Access Version:2010

氏名、住所、生年月日等フィールドが20程度ある顧客情報のテーブルがあり、それを絞込検索したいです。
フォームにテキストボックスを5つ配置し、最大5つのあいまい一致で検索できるようにしたいです。

いままでは絞込条件が3つ程度でした。
それぞれ、未入力あるなしを調べ、どのテキストボックスが未入力だったらどのクエリ、
というのをひとつずつ作っていました。
今回絞込条件が5つに増えたことで、この方法だと、
クエリを30以上作らなければならなくなり、困っています。

もっとよい方法はないでしょうか?
教えていただけたら嬉しいです。

Dim rsl As Integer, strQry As String

'IsNull関数により、選択状況を確認(未選択で-1、選択済で0が返される)
rsl = -(IsNull([Forms]![MAIN]![テキストボックス1]) * 1 + IsNull([Forms]![MAIN]![テキストボックス2]) * 2 + IsNull([Forms]![MAIN]![テキストボックス3]) * 4)

Select Case rsl
Case 0 '未入力なし(=-{(0*1)+(0*2)+(0*4)})氏名と生年月日と住所で絞込
strQry = "クエリ1"
Case 1 '(=-{(-1*1)+(0*2)+(0*4)})生年月日と住所で絞込
strQry = "クエリ2"
Case 2 '(=-{(0*1)+(-1*2)+(0*4)})氏名と住所で絞込
strQry = "クエリ3"
Case 3 '(=-{(-1*1)+(-1*2)+(0*4)})住所で絞込
strQry = "クエリ4"
    ・・・
    Case Else
MsgBox "不明", , "Error"
End Select

[Forms]![MAIN]![リスト31].RowSource = strQry

タイトルRe: テーブル同士であいまい検索
記事No172098   [関連記事]
投稿日: 2017/12/12(Tue) 19:46
投稿者hatena
> ■困っている事
> 件数が多くて表示するのに1分程度かかる

抽出対象のフィールド(テーブル2の方)にインデックスは設定してありますか。
してなければ設定してみてください。

前方一致ならインデックスは効果があります。

タイトルテーブル同士であいまい検索
記事No172097   [関連記事]
投稿日: 2017/12/12(Tue) 18:22
投稿者PPP
OS:win7
Access Version:2010

お世話になります。

■現在できている事
異なるテーブルのあいまい一致は以下を参考に実現しています。
クエリ内にテーブル2つを表示し、リレーションシップはせずにLIKEで
検索しています
https://oshiete.goo.ne.jp/qa/5306412.html

■困っている事
件数が多くて表示するのに1分程度かかる

もう少し素早く表示する方法をご教授頂ければ幸いです。

タイトルRe^14: フォームでの抽出について
記事No172096   [関連記事]
投稿日: 2017/12/08(Fri) 16:17
投稿者
言葉が変で申し訳ありません。
リセットというか2回目の抽出時に1回目の抽出結果のままなので、1回目をリセットできないかという意味でした。
もう一回、作り直してみます。


> > いえ、作り方がまずいのかなと思って作り直してみました。
> > そしたら出なくなりました。
> > でも前回のものをリセットしてくれないのですよね。
>
> 「リセット」とは、何に対するどういった状態のことを指しているのか分かりませんが、
> 前回の質問の際に提示した手順をもう一度やってみてください、
> としか今はお答えできません。

タイトルRe^13: フォームでの抽出について
記事No172095   [関連記事]
投稿日: 2017/12/08(Fri) 15:45
投稿者ナバ
> いえ、作り方がまずいのかなと思って作り直してみました。
> そしたら出なくなりました。
> でも前回のものをリセットしてくれないのですよね。

「リセット」とは、何に対するどういった状態のことを指しているのか分かりませんが、
前回の質問の際に提示した手順をもう一度やってみてください、
としか今はお答えできません。

タイトルRe^12: フォームでの抽出について
記事No172094   [関連記事]
投稿日: 2017/12/08(Fri) 15:36
投稿者
いえ、作り方がまずいのかなと思って作り直してみました。
そしたら出なくなりました。
でも前回のものをリセットしてくれないのですよね。



> はい、これでいいですね。
>
> なぜ今は出ないのか、不思議です。
>
> メッセージが出ていた時からなにか変えましたか?

タイトルRe^11: フォームでの抽出について
記事No172093   [関連記事]
投稿日: 2017/12/08(Fri) 14:04
投稿者ナバ
はい、これでいいですね。

なぜ今は出ないのか、不思議です。

メッセージが出ていた時からなにか変えましたか?

タイトルRe^10: フォームでの抽出について
記事No172092   [関連記事]
投稿日: 2017/12/08(Fri) 13:33
投稿者
これで合ってますよね?

Private Sub 顧客名_AfterUpdate()

MsgBox "a"
Me![顧客名].Requery
End Sub






> Msgbox"a"
> は残っていますか?

タイトルRe^9: フォームでの抽出について
記事No172091   [関連記事]
投稿日: 2017/12/08(Fri) 13:07
投稿者ナバ
Msgbox"a"
は残っていますか?

ページの先頭へ 前ページへ戻る