• 締切済み

access 検索フォームで検索が出来ない(コードについて)

accessにて、薬の在庫管理DBを構築しています。 「薬剤名」で検索をし、フォーム上に表示させたいと思っていますが、 コード記述をしても検索出来ず、かれこれ2~3週間悩み続けております。 一人で四苦八苦しながら作って居るため、 原因が良く分からず、質問させて頂きます。 よろしくお願い致します。m(__)m 視覚的に説明します。              f_薬剤マスター ~フォームヘッダ~ 非連結のtxt 「薬剤検索」    「検索」ボタン     ※2つがあります ~詳細~ 「薬剤ID」 「薬剤区分ID」「薬剤区分名」 「薬剤名」 「包装内容」 「包装量」 「単位」「適用チェック」 とあります。 フォームヘッダの検索ボタンのイベントプロジーシャに Private Sub コマンド20_Click() Me.Filter = "[薬剤名] Like '*" & Me!薬剤検索 & "*'" Me.FilterOn = True End Sub と記述をしていますが、薬剤名を入れて、コマンドボタンを押しても検索がかけられません。 この「f_薬剤マスター」をメインフォームとして、 サブフォーム 「f_仕入れマスター」と 「f_価格マスター」と 言う順で2つ連結させていますがその関係もあるのでしょうかせいなのでしょうか? 尚、この3つのフォームのリレーションは t_薬剤マスター → t_仕入れマスター → t_価格マスター と、いづれも 1対多 でリレーションを組んでいます。 初心者の為何がおかしいのか良くわかりません。 どなたかご教授の程お願い致します。m(__)m

みんなの回答

noname#182251
noname#182251
回答No.3

#1です。補足を元に、簡易化したテーブルとクエリで試験してみました。こちらでは3.で、思い通りの抽出が出来ます。以下にそのSQL文を示しますので、問題点を検討してください。 SELECT t_薬剤マスター.薬剤ID, t_薬剤マスター.薬剤区分ID, t_薬剤マスター.薬剤名 FROM t_薬剤区分 INNER JOIN t_薬剤マスター ON t_薬剤区分.薬剤区分ID = t_薬剤マスター.薬剤区分ID WHERE (((t_薬剤マスター.薬剤名) Like "*薬剤名*")); これでも判らないようであればpiro0422さんの作った3.部分のSQL文を提示してください。

piro0422
質問者

お礼

fuuten_no_neko 様 出来ました! fuuten_no_neko 様 から教えて頂いたSQLを元に抽出したいレコードを追加し、 薬剤名の抽出条件にLike "*" & [Forms]![f_薬剤検索用]![薬剤名] & "*" と記述 f_薬剤検索用に 薬剤名txt コマンドボタンを作成 マクロビルダにてq_薬剤検索を開くにした所、思い通りのデータを抽出する事が出来ました。 お忙しい中のご対応、又SQL文まで作成、試験までして頂き、 本当にありがとうございます。 長い間悩んでいましたので感謝の気持ちでいっぱいです。 本当にありがとうございました。m(__)m

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

よく読んでいませんが パッと見、これかも。 http://support.microsoft.com/kb/941800/ja

piro0422
質問者

お礼

bonaron 様 ありがとうございます! 実は私の家には2000しかなく(2007購入しましたが) その際のテストでは検索出来たのです。 やはりこういう事もあるのですね。 後学の為に早速テストしてみたいと思います。 おかげ様で先に進めそうです。 ほんとにありがとうございました!

noname#182251
noname#182251
回答No.1

説明されていることが良く判りませんが(真面目に読む根気がない(^^;) デバッグの手順的なことで云えば 1.詳細に表示されるレコードソースのSQL文はどのようなものでしょうか? 2.そのSQL文を単独で実行すると、全データが表示されるでしょうか 3.そのSQL文の「薬品名」に対し「抽出条件」を「Like "* 薬剤検索*"」(「薬剤検索」は適切な文字列に替えること)で、望むような抽出は出来るでしょうか?

piro0422
質問者

補足

おはようございます。 fuuten_no_neko 様 早々のご回答ありがとうございます。 又、お疲れの所ありがとうございます。m(__)m 感謝致します。(TT) 早速ですが補足を追加させて頂きます。 1.詳細に表示されるレコードソースのSQL文はどのようなものでしょうか? レコードソースはq_薬剤マスターから生成されておりまして、SQLは下記の様になります。 SELECT t_薬剤マスター.薬剤ID, t_薬剤マスター.薬剤区分ID, t_薬剤区分.区分名, t_薬剤マスター.薬剤名, t_薬剤マスター.包装内容, t_薬剤マスター.包装量, t_薬剤マスター.単位, t_薬剤マスター.薬価, t_薬剤マスター.適用チェック, t_薬剤マスター.備考 FROM t_薬剤区分 INNER JOIN t_薬剤マスター ON t_薬剤区分.薬剤区分ID = t_薬剤マスター.薬剤区分ID; 2.そのSQL文を単独で実行すると、全データが表示されるでしょうか 出来ます。 新規でクエリデザインを作成、SQLビューに貼り付けた所、全データが表示されました。 3.そのSQL文の「薬品名」に対し「抽出条件」を「Like "* 薬剤検索*"」(「薬剤検索」は適切な文字列に替えること)で、望むような抽出は出来るでしょうか? 出来ませんでした。(TT) 「Like "* 薬剤検索*"」 の"* 薬剤検索*"の文字列を薬品名に変えた所、空のレコードが表示されました。 抽出条件に"薬品名"を普通に入力した所、該当レコードが表示されました。 これはクエリの組み方がおかしいと言う事なのでしょうか? お忙しい所、お手数おかけ致します。m(__)m

関連するQ&A

  • Access 複数フォームを別フォームに反映させたい

    初めての投稿です。 よろしくお願い致します。 Accessにて店舗ごとの在庫管理をしたいのですが、T_入庫をフォームに作成しようとした所で詰まってしまいました。 以下、作成済みの3つのフォームと連結し、作成したF_入庫に反映させたいと思っています。 どうかご教授の下さいます様よろしくお願い致します。 連結したい3つのフォーム(作成済)です。 3つのフォームを連結させています。 T_商品マスター (メインフォーム) 商品ID 年度ID 商品区分 商品名 包装内容 包装量 単位 単価 適用チェック T_仕入マスター  (サブフォーム1) 仕入ID 商品ID 問屋ID メーカーID T_価格マスター (サブフォーム2) 価格ID 仕入ID 納入価格 価格登録日 適用チェック これから作成するフォーム T_入庫 入庫ID 仕入区分ID 店舗ID 入庫日 商品ID 入庫数 金額相違チェック 相違金額 とあります。 T__入庫でクエリを組み、演算子にて実行してみようと思いましたが、 それどころかT_入庫のテーブルとそのIDのフィールドを入れて組んでも表示されません。リレーションが悪いのかそれとも、テーブル設計そのものが悪いのか悩んでいます。 この様な場合、SQL文などわかっていないとダメでしょうか? どうかアドバイスお願い致します。m(__)m

  • Access2007 フォームでの検索について

    お世話になります。 accessはあまり使わないので、自己流でどうにか作っている状況で わからなければネットで調べているのですが、 どうしても自力で解決できないので、よろしければ教えて下さい。 テーブル名、T_機器データ一覧 フォーム名、F_機器登録 F_機器登録に入力したものがT_機器データ一覧に保存されます。 すでに登録しているか調べる為に、このフォームのヘッダーに 「検索窓」と「検索」ボタンと「次へ検索」ボタンという名前で設置し、 「検索窓」に入力した文字を、T_機器データ一覧から探して、もしあれば 詳細部分の入力用のボックスに表示されるフォームにしました。 T_機器データ一覧のフィールドは番号や機器名等々で20個ほどあり、 1つの検索窓ですべてのフィールドのデータを検索させたく、 某サイト様に載っていた方法を使わせて頂きました。 (番号や機器名という特定フィールドの情報ではなく、とにかく 「検索窓」に入力した文字がT_機器データ一覧にあるかどうかで調べたいです。) ----------------- ↓「検索」ボタン ----------------- Private Sub 検索_Click() On Error Resume Next Dim v Me.番号.SetFocus v = Me.検索窓 Me.検索窓 = Null DoCmd.FindRecord v, acAnywhere, False, acSearchAll, , acAll, True Me.検索窓 = v End Sub ------------------- ↓「次へ検索」ボタン ------------------- Private Sub 次へ検索_Click() On Error Resume Next Dim v Screen.PreviousControl.SetFocus Screen.ActiveControl.SelStart = 255 v = Me.検索窓 Me.検索窓 = Null DoCmd.FindRecord v, acAnywhere, False, acDown, , acAll, False Me.検索窓 = v End Sub ------------------- これで思った通りに検索してくれるのですが、 検索した文字が無かった場合に、"見つかりません"という様な メッセージBOXを表示させたいのですが、方法を見つけられませんでした・・。 Microsoftのサイトに、 「FindRecordメソッドは、成功または失敗を示す値を返しません。」 とあり、FindRecordを使わずに別の方法がないかと探したのですが、 特定のフィールドのみから「検索窓」に入力した文字を探す方法はあるのですが、 1つの「検索窓」へ入力したものをテーブル上のすべてのデータから 検索させる方法がわかりませんでした。 書き方がおかしな所があるかもしれません。 その場合は大変申し訳ありません・・。 どうかよろしくお願い申し上げます。

  • クエリフォームからのレコード追加について

    お世話になります。 タイトルとして、「クエリフォームからのレコード追加」とすべきか 「フォーム上でのテーブル参照」とすべきか迷うところなのですが 仕入マスタ(ID、品番、仕入日、仕入数) 商品マスタ(ID、品番、商品名) という二つのマスタと、 品番でリレーションして「仕入マスタのフィールド(from仕入マスタ)+商品名(from商品マスタ)」を出すだけの単純なクエリがあります。 今、仕入マスタに新規レコードをフォームから追加する際、 品番を入れたら商品マスタから商品名が参照され表示される、というフォームを作成したいのですが、どうしたら実現可能でしょうか。 (絶対やりかたがあると思ったのですが、うまく探せず質問させていただきます) 当初、新規レコード追加時には、品名を表示させようとしていなかったため、普通に「仕入マスタのフォーム」で「新規」ボタンに下記プロシージャを登録していたのですが。。 「仕入マスタのフォーム」を「仕入クエリのフォーム」に変更して、下記プロシージャを少々修正するだけで実現できるでしょうか。 (素人考えでいくつか試してみたのですが、この場合★の部分に何を指定すればいいのかわかりません。) Private Sub 新規_Click() Me.AllowEdits = False Me.AllowAdditions = True DoCmd.GoToRecord acDataForm, "仕入マスタ", acNewRec '★ End Sub わかりにくい説明で申し訳ございません。 何卒お力添え宜しくお願い致します。

  • ACCESS 別フォームから別フォームの処理を

    ACCESSでメインフォームから別フォームを 【メインフォーム】 DoCmd.OpenForm "FM_商品検索", , , , , acWindowNormal 【商品検索フォーム】 検索画面でJANコードを選んだらJANコードをセットして、商品マスタの読込等の処理をしたい Forms!F_仕入!F_仕入sub.Form!JANコード = Me.JANコード ↑これは動く Forms!F_仕入!F_仕入sub.JANコード_BeforeUpdate ↑これがエラーになります 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」 でエラーになります。 Forms!F_仕入!F_仕入sub.JANコード_BeforeUpdate Public Sub JANコード_BeforeUpdate(Cancel As Integer) 何がおかしいのでしょうか? 宜しくお願いします

  • Access 検索フォーム

    いつもお世話になってます。 Accessの検索フォームについて教えて下さい。 業務マスターと仕事DBという2つのデーターベースがあります。 業務マスターは共有のサーバーの中にあり、得意先テーブルをリンクして、それをもとに得意先フォームを作りました。 非連結のテキストボックス(txt検索)と非連結のリストボックス(一覧)がり、リストボックス(一覧)のクエリ得意先の抽出に使うフィールドの条件に、Like"*"&[Forms]![得意先フォーム]![txt検索]&"*" を入れました。 txt検索に文字を入れ、一覧リストボックスで絞込をし、選ぶとフォームに表示されるという流れにしたのですが・・・。 Private Sub txt検索_AfterUpdate() Me![一覧].Requery End Sub Private Sub 一覧_AfterUpdate() Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[得意先ID] = " & Str(Nz(Me![一覧], 0)) If Not rs.EOF Then Me.Bookmark = rs.Bookmark End Sub [Forms]![得意先フォーム]![txt検索]というパラメータがでて(今まで出たことがない) 文字を入力しても実行できませんでした。参照元が分からないのかなと思いますが、どうしたらうまくいくのか分かりません。どなたかお知恵をかしていただけないでしょうか。Accessは2003を使っています。よろしくお願いします。

  • 検索フォームで検索するものが決まっているときのかきかた。

    Ac2000です。 T_マスタというテーブルに 名前や所属の課、年度などが入っています。 このTマスタから検索する検索フォームがあります。 検索ボタンがいくつかあり、 年度を検索するようにテキストボックスがあります。 年度テキストボックスにいれた年度で検索しつつ、 押した検索ボタンによって検索する方法はどのようにしたらよいでしょうか? Ex.検索ボタンには所属の課などがかいてあり、「総務」「営業」などどかいてあります。 ソースはこんな感じです。 ------------------------------ Dim SQL As String Dim WhereCond As String Dim condNendo As String '年度 If Me!年度.Value <> "" Then condNendo = "(T_マスタテーブル.年度 = " & CLng(Me!年度.Value) & ")" WhereCond = WhereCond & " AND " & condNendo End If WhereCond = Mid(WhereCond, 6) DoCmd.OpenReport "R_マスタ_一覧", acPreview, , WhereCond End Sub

  • アクセスのフォーム上でのルックアップについて

    お世話になります。 素人が初心者向け参考書を片手に、顧客管理のデーターベースを作ってます。 下記は作ったテーブルの簡単な図です。 【商品区分】→【商品マスタ】→【会社別単価】←【顧客マスタ】    【仕入先】↑ :テーブルのフィールド: 【商品区分】(区分ID)(区分名) 【仕入先】(仕入ID)(仕入先名) 【商品マスタ】(商品ID)(商品名)(区分ID)(仕入ID) 【顧客マスタ】(顧客ID)(会社名)(会社名の頭文字)(住所)(電話&FAX)(取引開始年月日) 【会社別単価】(単価ID)(顧客ID)(見積日時)(商品ID)(数量)(単価)(備考) 主キーはIDでオートナンバーにし、各々のIDでリレーションをしています。 また、【商品マスタ】と【会社別単価】のIDをルックアップ設定しています。 で、【会社別単価】以外は入力が終了して、【会社別単価】をフォームを作り入力しようとしています。 ※問題となっていること※ フォーム上から入力していますが、如何せん会社数が400社近く、商品数も10の区分があり、 各々に小物も合わせ30商品(合計10×30=300商品)あり、ちょっと入力が 面倒なことになっています。(フォームはウィザードを使用して作りました) ※やりたいこと※ 【会社別単価】のフォームで、会社名を(頭文字)で抽出して(あ、い、う…で入力しています)、 コンボボックスを2つ使用して、「あ」を選ぶと頭文字「あ」の会社が出てくるようにしたいです。 同じように商品名の方も、商品区分で選んで、それに対応する商品群を表示したいです。 同じような質問があり、参考にしてやってみてますが、さっぱり分かりませんw また、何か補足が必要であれば、補足しますので、すみませんが力を貸してください。

  • 以下のアクセスの検索フォームで。。。

    検索フォームの項目は以下の通りです。 ○ AND  ○ OR 名前  [    ] 項目  [    ]▼  [    ]▼  [    ]▼ もとになってるテーブルは ・名前 ・項目1 ・項目2 ・項目3 ・項目4 ・項目5 というようなっています。 検索ボタンのコードは Select Case Me!検索方法.Value Case 1 'or tempOper = " AND " strCount = 5 Case 2 'and tempOper = " OR " strCount = 4 End Select '名前 If Me!SyainName.Value <> "" Then condName = "(T_マスタ.氏名 like '*" & Me!SyainName.Value & "*')" WhereCond = WhereCond & tempOper & condName End If '項目 If Me!Koumoku1.Value <> "" Then condKoumoku1 = "(T_マスタ.項目1 like '*" & Me!Koumoku1.Value & "*')" condKoumoku2 = "(T_マスタ.項目2 like '*" & Me!Koumoku1.Value & "*')" condSKoumoku3 = "(T_マスタ.項目3 like '*" & Me!Koumoku1.Value & "*')" tempCond = tempCond & " OR (" & condKoumoku1 & " OR " & condKoumoku2 & " OR " & condKoumoku3 & ")" End If If tempCond <> "" Then tempComd = Mid(tempCond, 5) WhereCond = WhereCond & tempOper & "(" & tempCond & ")" End If WhereCond = Mid(WhereCond, strCount + 1) DoCmd.OpenForm "F_検索結果_一覧", acNormal, , WhereCond これを実行すると クエリ式 '(OR((T_マスタ.項目1 like …')の構文エラー:演算子がありません。 と出ます。 どこを訂正すべきでしょうか? (項目を含まない状態ではうまく検索できてました。) Access2000です。

  • 検索用フォームを作りたいのですが・・色々と問題が

    お忙しい所、ご覧になってくださってありがとうございます。 今働いている会社の管理システムがアクセスで作られたもので、仕事をして初めてアクセスというものに触った超初心者でございます(テーブル、クエリ、フォーム、レポートがわかるくらいです)。 なのですが突然、上司から検索フォームを作るよう命じられました。 テーブル;提出済見積一覧→顧客名 商品名 商品区分 単価 (データは5万件以上あります) テーブル;仕入見積一覧→仕入先 商品名 商品区分 単価 (データは3万件以上あります) 上記の内容を、フォーム上に作成したテキストボックスの「商品名検索」で検索し、尚且つ「商品区分」で絞り込みしたら、それに適した「提出済見積一覧」と「仕入見積一覧」が同時に閲覧できるようなフォームを作成したいです(一件ごとのデータではなく、含まれている条件全てが一覧で見れる)。 あと、テキストボックスの商品名もあいまいな検索で、見積もりと仕入がヒットするように作れと言われております。。 見積もりと仕入をサブフォームで作成し、フォームにサブフォームを埋め込んで、と試してみてはいるのですが、知識も乏しいせいか、どうも上手く行きません。 周りには上司含め、アクセスをわかる人がおりません(T_T) アドバイスがありましたらお願いいたします。

  • Accessの検索フォーム(CLng)で。

    検索フォームの項目は以下の通りです。 ○ AND  ○ OR 名前  [    ] 項目  [    ]▼  [    ]▼  [    ]▼ もとになってるテーブルは ・名前 ・項目1 ・項目2 ・項目3 ・項目4 ・項目5 というようなっています。 (項目1-5は数値データなのであいまい検索はしたくありません。) 検索ボタンのコードは Select Case Me!検索方法.Value Case 1 'or tempOper = " AND " strCount = 5 Case 2 'and tempOper = " OR " strCount = 4 End Select '名前 If Me!SyainName.Value <> "" Then condName = "(T_マスタ.氏名 like '*" & Me!SyainName.Value & "*')" WhereCond = WhereCond & tempOper & condName End If If Me!項目1.Value <> "" Then condKoumoku1 = "(T_マスタ.項目1 = " & CLng(Me!項目1.Value) & ")" condKoumoku2 = "(T_マスタ.項目2 = " & CLng(Me!項目1.Value) & ")" condKoumoku3 = "(T_マスタ.項目3 = " & CLng(Me!項目1.Value) & ")" tempCond = tempCond & " OR (" & condKoumoku1 & " OR " & condKoumoku2 & " OR " & condKoumoku3 & ")" End If If tempCond <> "" Then tempCond = Mid(tempCond, 5) WhereCond = WhereCond & tempOper & "(" & tempCond & ")" End If WhereCond = Mid(WhereCond, strCount + 1) DoCmd.OpenForm "F_検索結果_一覧", acNormal, , WhereCond これを実行すると クエリ式 '((OR OR))' の構文エラー:演算子がありません。 と出ます。 どこを訂正すべきでしょうか? Access2000です。