• 締切済み

Access2003 検索フォームの作成について

Access2003で検索フォームを作成しようと思うのですが、 過去の質問を見てもわからなかったので投稿します 帳票形式で全てのデータを表示する一覧画面フォームと 画面のフッター部分に検索ワードを入れるテキストボックス (名前は 検索ボックス)を作成し そこでエンターキーが押下された場合に検索結果一覧画面のフォームを開き、帳票形式で検索結果を表示しようと思います データベースについては既にエクセルからインポートしてあります (名前は テーブル) 検索結果は複数あることがあります 一覧画面フォームを作成するところまでは出来たのですが... その先の検索結果を表示するフォームがうまくいきません 一覧画面フォームの検索ボックスの内容********* Private Sub 検索ボックス_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then Docmd.OpenForm "検索結果画面", acNormal, , , , acDialog, Me.検索ボックス.Value End If End Sub ********************************************* 検索結果一覧画面の内容*********************** Private Sub Form_Open(Cancel As Integer) Me.検索したボックス.Value = Me.OpenArgs Dim 変数名1 As New ADODB.Connection Dim 変数名2 As New ADODB.Recordset Dim 変数名3 As String Set 変数名1 = Application.CurrentProject.Connecton Set 変数名2 = 変数名1.Execute("SELECT * FROM テーブル WHERE 検索したい列名1 = Me.OpenArgs OR 検索したい列名2 = Me.OpenArgs") Do Until 変数名3.EOF Debag.Print 変数名3!列名1, 変数名3!列名2 変数名3.MoveNext Loop 変数名1.Close 変数名2.Close Set 変数名1 = Nothing Set 変数名2 = Nothing End Sub ******************************************* 検索したボックスについてはテキストボックスで ~~で検索しました。 と表示するために用意したものです 検索したボックスについてはうまく検索ボックスの内容が表示されていますが、検索結果が出てきません どなたかご存知の方ご教示お願いします

みんなの回答

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

失礼します。 > Do Until の後の変数名3 で > コンパイルエラー:修飾子が不正です > が発生してしまいました 変数名3 は String 宣言していますが、記述内容からみてレコードセットの 扱いになっています。 Dim 変数名3 As String を削除(コメントでも)後、変数名3 を 変数名2 に置き換えてみてください。 エラーは無くなると思います。 本来のしたいことになりますが、この後どのような処理で画面に表示されますか。 いろいろ方法はありますが、今の記述は使いません。 1)DoCmd.OpenForm で条件指定 2)検索結果画面のレコードソースのクエリでテキストボックス参照 3)検索結果画面は使わずに、一覧画面で絞込み表示 などなど、 1)DoCmd.OpenForm で条件指定 検索結果画面のレコードソースには条件を記述しないで、 全件表示できるようにしておきます。 DoCmd.OpenForm の WhereCondition に WHERE に書く条件を作成し指定します。 これにより、検索結果画面での処理記述は要らなくなります。 フィルタがかかった状態での表示となります。 2)検索結果画面のレコードソースのクエリでテキストボックス参照 クエリの「検索したい列名1」「検索したい列名2」の抽出条件に、 [Forms]![一覧画面]![検索ボックス] を指定しておきます。 これにより、検索結果画面での処理記述は要らなくなります。 3)検索結果画面は使わずに、一覧画面で絞込み表示 WHERE に書く条件で、フィルタを設定します。 Me.Filter = "検索したい列名1 = '" & ・・・・ Me.FilterOn = True 解除は、Me.FilterOn = False となります。 以下参考になると思います。(その3まであります) 複数条件の抽出フォームの設計 その1 http://hatenachips.blog34.fc2.com/blog-entry-129.html 1)2)では、 検索結果画面を使っており、一覧画面と同じものも表示しているので 検索結果画面のものを削除したりすると、一覧画面側を再表示させるなど 同期をとった処理が必要になると思います。

kakaasfa
質問者

お礼

回答ありがとうございます 現在手元にAccess2003が使える環境が無いので朝になったら試して見ます 1)と3)の方法がフィルタを使用し 2)がクエリを使用する方法なのですね 3)だとフォームが1つで済みシンプルになりそうですね その場合は新しくリセットボタンを作成しフィルタの解除が必要になるわけですね とりあえず3)がシンプルみたいなので挑戦してみます 詳しい回答ありがとうございます

noname#110201
noname#110201
回答No.1

>Set 変数名2 = 変数名1.Execute("SELECT * FROM テーブル WHERE 検索したい列名1 = Me.OpenArgs OR 検索したい列名2 = Me.OpenArgs") ここで、 検索したい列名1 = '" & Me.OpenArgs & "' OR 検索したい列名2 = '" & Me.OpenArgs & "'") として試してみてください。 多分これだと思いますが。

kakaasfa
質問者

お礼

回答ありがとうございます Set 変数名2 = 変数名1.Execute("SELECT * FROM テーブル WHERE 検索したい列名1 = '" & Me.OpenArgs & "' OR 検索したい列名2 = '" & Me.OpenArgs & "'") に変更したところ Do Until の後の変数名3 で コンパイルエラー:修飾子が不正です が発生してしまいました Do Until の使い方が間違っているのでしょうか? それとも何か定義しなければならないものが抜けているのでしょうか?

関連するQ&A

  • 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を使っています。よろしくお願いします。

  • Accessの検索フォーム作成で。

    Access2000です。 一覧テーブルは ・名前 ・項目1 ・評価1 ・項目2 ・評価2 となっていて、 山田太朗  | タバコのポイ捨てはしない  | 5 | 10分前行動 | 4 | 前田前   | 交通ルールを守る      | 5 | 挨拶をする  | 4 | 大坪拳   | 10分前行動        | 4 | 挨拶をする  | 5 | のようになっています。 これをもとに「検索フォーム」をデザインフォームで、 名前   [     ] 項目1  [     ] 項目2  [     ] 項目3  [     ] と作成し、「検索」というボタンを押すと、「検索結果フォーム」に検索結果が出るようにしました。 検索ボタンは Private Sub コマンド9_Click() Dim SQL As String Dim WhereCond As String Dim condName As String Dim condKoumoku1 As String Dim condKoumoku2 As String Dim condKoumoku3 As String WhereCond = "" '名前 If Me!名前.Value <> "" Then condName = "(一覧.名前 like '*" & Me!名前.Value & "*')" WhereCond = WhereCond & " and " & condName End If '項目1 If Me!項目1.Value <> "" Then condKoumoku1 = "(一覧.項目1 like '*" & Me!項目1.Value & "*')" WhereCond = WhereCond & " and " & condKoumoku1 End If : WhereCond = Mid(WhereCond, 6) DoCmd.OpenForm "検索結果フォーム", acNormal, , WhereCond End Sub となっています。 そこで、検索フォームで 項目に検索値を入れた場合、一覧の項目すべての中から検索できるようにするにはどうしたらいいのでしょうか? また、今の状態ですとand検索ですが、or検索するにはどのようにしたらいいでしょうか?

  • アクセスのフォームで

    アクセスのフォームで、品番一覧というテーブルを基にした、F品番一覧というフォームがあります。 ヘッダー部に検索するコンボボックスがあり、品番一覧テーブルの品番を参照しています。 検索ボタンを押すと、コンボボックスの内容に当てはまるものが、フォームの詳細部に一覧として表示させる様にしたのですが、品番に"50#1"や"50#2"という#を使い、1と2を分けている物があるのですが、コンボボックスで、この#が付いた物で検索すると検索結果がなにも表示されません。#が付いていない物はちゃんと一覧が表示されます。 #が付いている場合でもちゃんと表示するにはどの様にしたら良いですか?テーブル側の#を取り除く事はできません。 検索ボタンのコードは Private Sub 検索_Click() Dim strFilter As String, strExp As String, aryOpe As Variant If Not IsNull(Me.txt氏名) Then strFilter = strFilter & " AND 品番 Like *" & Me.品番一覧 & "*" End If Me.Filter = Mid(strFilter, 5) If strFilter = "" Then Me.FilterOn = False Else Me.FilterOn = True End If となっています。 うまく説明できなくてすいませんが、誰か教えて頂けませんか? よろしくお願いします。 End Sub

  • Accessでの検索フォーム作成

    お世話になります。 Accessを使い始めて半月ぐらいの初心者です 次のような条件の検索フォームの作成を依頼されたのですがうまく出来ません。 (1)Accessのフォームフィルタを使用した検索フォームで、3つのテキストボックス(以下TB)を同一 フォーム上に用意し、抽出を実行するボタンと解除するボタンをTBの隣にそれぞれ用意する (2)あいまいな条件(部分一致)で検索出来るようにする (3)抽出結果も同一フォーム上に表示 (4)任意のTBに入力した値で抽出後、他のTBを利用し 絞り込み検索を実行できるようにしたい 現在は下記のように作成しました。 ●テーブル [管理番号]、[品名品番]、[仕入先名]のフィールドを持つテーブルを用意。 ●フォーム(表形式) 上記テーブルに連結した検索フォームを作成し、抽出する値を入力する TBの名前はそれぞれ下のように付けました。 フィールド名    TB名 ・[管理番号]⇒管理番号検索 ・[品名品番]⇒品名品番検索 ・[仕入先名]⇒仕入先名検索 ・[抽出実行ボタン]のイベント(管理番号で検索時) Private Sub コマンド47_Click() Me.Filter = "管理番号 Like '*" & Me!管理番号検索 & "*'" Me.FilterOn = True End Sub ・[抽出解除ボタン]のイベント(管理番号で検索時) Private Sub コマンド49_Click() Me!管理番号検索 = Null Me.FilterOn = False End Sub 他2つも同様に作成して実行した結果、単体での抽出はうまくいくのですが さらに絞り込もうと他のTBに値を入力して抽出を実行すると先の抽出が解除され 単体でのフィルタがかかって抽出されてしまいます。 どなた様か良い案が御座いましたらご指導ください。 初心者のため、説明不足な点があるかと思いますが 不明な点がございましたらご質問くださいませ。 宜しくお願い致します。

  • アクセス 実行時エラー3265

    お世話になっております。 先ほどまで、違うスレで質問していたものです。 おかげさまで、Private Sub scdSelect()のようなコードとなり、 こちらの方は無事動作しましたが、それをコピーして、 Private Sub denbanSelect()を作成すると、実行時エラー3265が 発生しました。 なぜエラーが発生するのか、検討もつきません。 何かほかに前提条件があるのでしょうか? 各サブフォームのイミディエイトウインドウで ?me.parent.openargs とすると、しっかりと引数は入っております。 教えて君で申し訳ありませんが、どなたご教授よろしくお願いします。 ★呼び出し元フォーム  Private Sub cmdSeekDenban_Click()   DoCmd.OpenForm "resultJDenban", , , , , , Me.Name & ".resultViewJyutyuDenban"  End Sub  Private Sub cmdSeek_Click()   DoCmd.OpenForm "resultScd", , , , , , Me.Name & ".resultViewJyutyu"  End Sub  Public Sub resultViewJyutyu() ☆結果の表示(商品コード検索用)  end sub  Public Sub resultViewJyutyuDenban() ☆結果の表示(伝票番号検索用)  end sub ★検索画面 商品コード用 サブフォーム  Private Sub 商品コード_DblClick(Cancel As Integer)   Call scdSelect  End Sub  Private Sub scdSelect()   Dim Pos   Dim MyFrm   Dim ProcName  Pos = InStr(Me.Parent.OpenArgs, ".")  Set MyFrm = Forms(Left(Me.Parent.OpenArgs, Pos - 1))  ProcName = Right(Me.Parent.OpenArgs, Len(Me.Parent.OpenArgs) - Pos)   MyFrm.txtScd.Value = 商品コード.Value   MyFrm.txtEdaban.Value = 枝番.Value   DoCmd.Close acForm, "resultScd", acSaveNo   CallByName MyFrm, ProcName, VbMethod End Sub ★検索画面 受注伝票番号用 サブフォーム  Private Sub 商品CD_DblClick(Cancel As Integer)   Call denbanSelect  End Sub  Private Sub denbanSelect()   Dim Pos   Dim MyFrm   Dim ProcName   Pos = InStr(Me.Parent.OpenArgs, ".")  Set MyFrm = Forms(Left(Me.Parent.OpenArgs, Pos - 1))  ProcName = Right(Me.Parent.OpenArgs, Len(Me.Parent.OpenArgs) - Pos)  MyFrm.txtDenban.Value = 伝票番号.Value  CallByName MyFrm, ProcName, VbMethod   ←エラー発生★★★   DoCmd.Close acForm, "resultJDenban", acSaveNo End Sub エラー内容  実行時エラー '3265' アプリケーション定義またはオブジェクト定義エラーです。

  • アクセスの"検索"について

    いつもお世話になっています。 Accessのフォームにて、任意の郵便番号をテキストボックス(1)に入力し"検索ボタン"を押すと、 該当する住所がフォーム上のリストボックス(2)に一覧が表示され、 その中から任意の番号を1件選んで新たなテキストボックス(3)へ代入出来る、というようなシステムを作りたく考えております。 郵便番号は"郵便番号一覧"というテーブルにまとめており、 加えてクエリ( "Q_郵便番号")で郵便番号、住所等の項目を連結しています。(フォームも作成済みです) ただ、現在"検索ボタン"を押すと、全郵便番号が検索され、 もちろん郵便番号を選択するような事も出来ない状態で、構文作りに難航しています。 アイディアをお持ちの方、構文の作成についてご指南頂けますと幸いです。 現在、作成途上のVBAは下記の通りです。 Private Sub Form_Open(Cancel As Integer) 'リストボックスのプロパティの設定 With Me.(2) .RowSourceType = "Table/Query" .ColumnCount = 5 .ColumnWidths = "2.5cm;2cm;4.5cm;15cm" .BoundColumn = 1 .RowSource = "" End With Me.郵便番号検索.SetFocus End Sub Private Sub 検索ボタン_Click() '住所の検索 Me.(2).RowSource = "Q_郵便番号" Me.(2).Requery End Sub

  • アクセスのVBについて

    先ほど立てたものですが、第二段です。先ほどは詳しい説明ありがとうございした。しかし、【Private Sub form_open(Cancel AS Integer)】のCancelの使い方が今一分りません。下の文を見ていただきたいのですが、 ★[F_顧客]フォームでは、OPENARGS引数で受け取った値を利用して、フォーム の[票題]プロパティを変更する処理を行います。 Private Sub form_open(Cancel AS Integer)  'OPENARGSプロパティによって[標題]プロパティを変更    Select Case Me.OPENARGS   Case "追加"    ME.Caption="F_顧客(追加モード)"     Case "編集"    ME.Caption="F_顧客(編集モード)"     Case Else    ME.Caption="F_顧客"  End Select End Sub 例えば、上記の場合などはなぜキャンセルが必要なのでしょうか・・・。 初心者のため、どなたか細かくご説明いただければたすかります。 m(__)m

  • ACCESSのフォームからレポートへの変数の引渡し

    フォームで定義した変数をレポートに渡して利用したいがうまく渡せません。 具体的にはクエリー名をレコードソースとして利用するために変数に入れて渡そうとしています。 [フォーム]での変数定義 Dim 抽出種別 as String -----(1) 抽出種別 = "Q抽出未回収" -----(2) [レポート]開く時のイベントプロシージャー Private Sub Report_Open(Cancel As Integer) Me.RecordSource = 抽出種別 -----(3) End Sub 実行結果は印刷の各フィールドの項目に #Name? と表示されてしまいます。 (3)で変数を使わずに"Q抽出未回収"とやるとうまくプレビューされます。 変数の定義の方法や場所などいまいち理解が出来ていないものと思います。 フォームからレポートへの変数の引渡しはどうやってやればうまく出来るのでしょうか?

  • 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つの「検索窓」へ入力したものをテーブル上のすべてのデータから 検索させる方法がわかりませんでした。 書き方がおかしな所があるかもしれません。 その場合は大変申し訳ありません・・。 どうかよろしくお願い申し上げます。

  • Access ADO RecordSetについて質問です。

    Access ADO RecordSetについて質問です。 Openイベントでフォームにレコードセットを挿入しています。 その際のフォームにはレコードセットをコントロールソースとしてテキストボックスが10個ほどあります。 しかし、テキストボックスを修正しようとしても、入力が出来ません。 レコードセットの作り方が悪いのか、フォームがおかしいのかわかりません。 流れとしては、帳票フォームより、単票フォームを呼び出し、IDでSQLを発行し、レコードセットを挿入しています。 その単票フォームは修正フォームとして更新したいのですが、入力が出来ず困っています。 詳しい方や同じ事で悩んだ方のアドバイスよろしくお願いいたします。 Private Sub Form_Open(Cancel As Integer) Call SetRecordSet("SELECT * FROM T_Agent WHERE ID =" & Me.OpenArgs, Me) End Sub Public BackEndCn As ADODB.Connection Public BackEndRs As ADODB.Recordset Public Sub SetRecordSet(strSQL As String, FormName As Form) Set BackEndCn = New ADODB.Connection Set BackEndRs = New ADODB.Recordset BackEndCn.ConnectionString = DbPass BackEndCn.Open BackEndRs.Open strSQL, BackEndCn, adOpenKeyset, adLockOptimistic Set FormName.Recordset = BackEndRs BackEndRs.Close: Set BackEndRs = Nothing BackEndCn.Close: Set BackEndCn = Nothing End Sub