• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アクセス2003の質問5種)

アクセス2003の質問5種

このQ&Aのポイント
  • アクセス2003での作りこみに悩んでいる初心者の方への5つの質問です。
  • 1つ目の質問は、bin-chanさんの「まとめ~」の意味についてです。
  • 2つ目の質問は、テーブル内の全フィールドから検索する方法についてです。

質問者が選んだベストアンサー

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

> ・where条件の列は、フィールド名ではないのですか? フィールドはフィールドでも、テーブル(またはクエリ)のフィールドです。 フォームのフィールドではありません。慣れるしか無いと思いますよ。 > すると、クエリで全テーブルをまとめることを思いつきました。 (1)の「まとめ」の疑問解消に到ったと考えてOKですか? > ・空欄の場合は、orではだめで、andだとどこかにかかれていたものですから。 全フィールドからキーワードに一致したもの、なら(1)でOK。 キーワード選択の横に、ラジオ(オプション)ボタンでも設けて ANDかORかを指定して、前回答のVBAで”and”を結合してるとこを改造して”or”にできなくも無い。 ただし項目多いとカッコを考える必要が出てきます。 strFliterを画面上のテキストボックスにして、手直しさせるのもひとつの方法ですね。

anthlax
質問者

お礼

すいません。 お礼を入力したつもりが、出来ていませんでした。大変に恐縮です。 「まとめ」は、解りました。テーブルをひとくくりにするということですね。 今作っているプログラムは運用をしなければならず、方針を変えることにしました。 継続して、空欄入力の問題を解決させていくとして、ひとまずは現状のままとします。 すなわち、検索条件1とキーワード1を空欄にした場合、エラー表示をすることとします。 これについて、また質問をすることがあると思います。 もしよろしければ、お付き合いいただければ幸いです。

その他の回答 (2)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

先に(2)から。 何列あるのか不明ですが、ユニオンクエリ定義してください。 クエリデザイン開いて、テーブル選択せずに閉じる。 クエリデザインのまま、SQLビューを選択。 selectで始まる文字列を消して、以下をコピペ。 (列数分繰り返しが必要) ---ここから-- select * from テーブル where 列1 like '*' & Forms!フォーム名.[検索ワード] & '*' union select * from テーブル where 列2 like '*' & Forms!フォーム名.[検索ワード] & '*' union select * from テーブル where 列3 like '*' & Forms!フォーム名.[検索ワード] & '*' (以下全列繰り返し) ; ---ここまで-- で、名前を付けて保存。 ついでフォーム上からクエリを実行。 (1)上記のようなものを、必要な都度全部書くのは面倒でしょうから 「名前を付けて保存しておくもの」が"クエリ"です。 (3)Filterに書くのは、where条件ですから Me.Filter = "列1 like '*foo*' and 列2 like '*var*'" みたいな、列名に対する条件ですよ?フォームのオブジェクトを指定してはダメ。 列1の代わりに Me![コンボ53] や Me![コンボ57]を渡されても処理できない。 (4)(5)は、「空欄があっても」ならAND条件だと無理なのでは? vba で filter用文字列を組み立ててください。 '---以下をVBEditerにコピペ--- dim strFilter as string strFile="" if nz(Me.[コンボ53])<>"" then  if strFile <> "" then  strFilter = strFilter & " and "  end if  strFile="列1 like '*" & nz(Me.[コンボ53]) & "*'" end if if nz(Me.[コンボ57])<>"" then  if strFile <> "" then  strFilter = strFilter & " and "  end if  strFile="列2 like '*" & nz(Me.[コンボ57]) & "*'" end if '(以下、条件付けしたい"列"の数だけ繰り返してください 'debug.print strFilter 'コメントアウトしてますが、内容を確認することも必要 'Filterの実行   me.filter = strFilter '---以下をVBEditerにコピペ--- 常にPCの前にいるわけではないので、急いで締め切らずにボチボチと。 > 最後の蛇足が、これまたよくわかりません。前問が移動された先とはどこですか? 事務局からのお知らせメールが届いてませんか? 回答した私宛には事務局からお知らせメールが届きました。 前の質問(8316757)を投稿なさった際、カテゴリはここと同じで ビジネス・キャリア > 経営情報システム だったはずです。 今はデジタルライフ >ソフトウェア >オフィス系ソフト に移動されています。 カテゴリ別に閲覧している方もいらっしゃいます。 質問者様にとって、ACCESSを利用する目的が「経営情報システム」のためなのでしょうが "解決方法"を問うものとしては「オフィス系ソフト」のほうが適切ではないか、ということです。

anthlax
質問者

お礼

いつも回答をありがとうございます。 ・クエリについて:テーブルをまとめて表示するのに使った。 検索した情報を見るにあたり、当初はサブフォームで、限られたフィールドのものしか見せませんでした。しかし、だいたいのフィールドを検索結果として出すことが必要となったため、フォームを新規で作る段階でテーブルを複数選択出来ないしどうしようか悩んでいました。すると、クエリで全テーブルをまとめることを思いつきました。 現在は、プルダウンで検索条件を選ぶ欄と検索ワードを入力する欄とともに、だいたいのフィールドを表示するフォームを検索フォームとしています。すなわち、上のまとめたクエリを用いています。 ・where条件の列は、フィールド名ではないのですか? コンボで指定したら検索でき、それをandでつなげたら、マクロなら空欄入力出来るのに、VBAでは出来ないのが納得いかない。 ・空欄の場合は、orではだめで、andだとどこかにかかれていたものですから。そして上記のマクロなら簡単に出来たので、VBAも単純に、bin-chanさんに教えていただいた文をただ単にandで繋げれば良いのかなあと思いました。 ・VBAありがとうございます。if文 ・事務局のメールを見ていませんでした。 ・当方、子供がまだ小さく、なかなかPCに向かえません。子供が寝付く深夜になってようやくPCに向き合えます。レスポンスが悪く恐縮です。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

(1)でご指名いただきました本人です。 ttp://okwave.jp/qa/q8316757.htmlの件ですよね。 どうしてもクエリにアレルギーがあるなら、すべて読み捨ててください。 「既にあるデータから登場する値を抜き出して作成する一覧」と 考えれば、それ以降(実際にこの質問の(2)~ つもりで書きました。 >できれば、クエリを使うことなく行きたい。 とありますが、考え方さえつかめば簡単ですよ。 (2)検索キーワードを入力し、そのキーワードでテーブル内の全フィールドから検索 テーブルに登場するすべての列を結合して、1列と扱うクエリを作成し、 その列をWhereのlike条件で判断する。 select 列1 & 列2 &列3 as 列ALL from Table1 where 列ALL like '*' & 検索キーワード & '*' ; (3)オブジェクトに値を代入出来ませんやらが出てきます。 > Me.Filter="" & Me![コンボ53] & " like '" & "*" Me![検索ワード] &"*"&"' and "& Me![コンボ57]~ Me![検索ワード]の前に & が無い。 (4)空欄を検索条件をプルダウンで選ぶにはどうすればよいのか プルダウンの選択肢(一般的には先頭)に空白行を設ける。 ただし「空白行」が、空文字なのかNullなのかにもよります。 プルダウンの値をIF文で判断し、空白行の場合と空白以外の2行に分ける。 さらに空白行の場合でも  空文字なら Me.Filter="''"  Nullなら  Me.Filter="is null" でしょうかね。 (5)「またこのフィルタの実行マクロ」の「この」が(4)を指しているなら すべてが空白行ならまだしも、一部が空白行はWhere条件となりえないかも。 以上、すべて試験できてない状況です。 蛇足ですが、カテゴリは前問が移動された先でなさるほうが閲覧者が増えますよ。

anthlax
質問者

お礼

bin-chan様 たびたびの回答、ありがとうございます。 クエリを使ったほうが無難なら、クエリを使います。 ですが、VBAをやりつつあるので、出来ればVBAで行きたいです。 クエリを使うと、そこで抽出とかすると、変なポップアップが出てきて、非常に疲れるのです。 (2)採用不可ですね→1列にしてしまうと、せっかく分けたフィールドの情報が分からなくなりそうですね。 (3)ごめんなさい。&をこの質問コーナーで書くのを忘れていました。実際にはあります。 この場合は、どうすればよいですか? (4)これを実際にVBA全体で表してほしいです。 (5)マクロのフィルタの実行において検索ワード欄一つが空白入力は出来ました。しかし、教えていただいたイベントビルダで行います。よって、マクロのフィルタの実行は辞めます。この場合の全フィールド検索も行いません。 最後の蛇足が、これまたよくわかりません。前問が移動された先とはどこですか? 以上、よろしくお願いいたします。