• ベストアンサー

ACCESSでコンボボックスにSQLで抽出した値を表示したい

いつもお世話になっております。 ACCESS初心者です。 テキストボックスに入力したフリガナから、あいまい検索させ抽出した ものをコンボボックスに表示させたいのですが、うまくいきません。。 (コンボボックスに何も表示されないです) 過去の質問やネット検索でも調べたのですがイマイチ分かりませんでした。 どなたか詳しい方、ご教示いただけると嬉しいです。 OS:windowXP ACCESS:Ver2003 Private Sub テキストボックス名_Afterupdate() Me.コンボボックス名.RowSource = "SELECT フィールド名 FROM テーブル名 WHERE フリガナ LIKE '" & Me!テキストボックス名 & "*';" End Sub どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.6

もしかして、txt検索値の内容を書き変えただけで、コンボボックスの表示内容の変化を期待していませんか? (1)txt検索値の内容を変更しても、フォーカスを移動する等の行動を取るまで、AfterUpdateイベントは発生しません。 (2)Requeryしただけではコンボボックスのリストが変化するだけで、現在の表示内容は変化しません。 AfterUpdateイベントの発生はプログラムでどうにかなるモノではありません。 Changeイベントでは1文字ずつイベントが発生するので、現実的ではないでしょう。 Requery後にコンボボックスの内容を変更したい場合は以下のコードを試してみてください。 With Me.コンボボックス名   .RowSource = "SELECT ~略   .ReQuery   If .ListCount > 0 Then     .Value = .ItemData(0)   Else     .Value = Null   End If End With

isas-isas
質問者

お礼

私のやりたかった事は Me.コンボボックス名.RowSource = "SELECT [T得意先名].[得意先名] FROM T得意先名 WHERE 得意先名フリガナ LIKE'" & Me!テキストボックス & "*';" と記述しましたら実現することが出来ました。 []が必要だったとの見解でいいのでしょうか。。。^^; 私もリクエリが無いと指摘を頂いた時に、「そっか!」と思ったのですが 何故かrequeryを記述しなくても動作しております・・・^^? それが何故なのかよくわかりませんが、とりあえずやりたかった事は 実現する事が出来ました。 色々ご回答いただき、本当にどうもありがとうございましたm(__)m

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

noname#140971
noname#140971
回答No.5

補足: SQL文そのものを確認されたし。 1、標準モジュールにDBSelect関数をコピペ。 2、イミディエイトウインドウでテスト。 注意: DBSelect関数では、ワイルドカードは'*'でなく'%'。(通常は、もちろん'*') [イミディエイト] ? DBSelect("SELECT フィールド名 FROM テーブル名 WHERE フリガナ LIKE 'ウチュウ%';") で、下記のように該当するレコードが表示されますか? [イミディエイト] ? DBSelect("SELECT * FROM Customer") 1;鈴木 一郎;スズキ イチロウ;2;杉下 五郎;スギシタ ゴロウ;3;中村 主水;ナカムラ モンド; ? DBSelect("SELECT * FROM Customer WHERE Yomi LIKE 'ス%'") 1;鈴木 一郎;スズキ イチロウ;2;杉下 五郎;スギシタ ゴロウ; ? DBSelect("SELECT * FROM Customer WHERE Yomi LIKE 'スズ%'") 1;鈴木 一郎;スズキ イチロウ; ? DBSelect("SELECT * FROM Customer WHERE Yomi LIKE '%ロウ'") 1;鈴木 一郎;スズキ イチロウ;2;杉下 五郎;スギシタ ゴロウ; このように DBSelect関数はコンボボックスのローソース等をセットするための関数です。 Public Function DBSelect(ByVal strQuerySQL As String, _              Optional ByVal strSeparator1 As String = ";", _              Optional ByVal strSeparator2 As String = "") As String On Error GoTo Err_DBSelect   Dim I   As Integer   Dim J   As Integer   Dim R   As Integer   Dim C   As Integer   Dim M   As Integer   Dim N   As Integer   Dim rst  As ADODB.Recordset   Dim fld  As ADODB.Field   Dim Datas As String      Set rst = New ADODB.Recordset   ' =================   ' Begin With: rst   ' -----------------   With rst      .Open strQuerySQL, _         CurrentProject.Connection, _         adOpenStatic, _         adLockReadOnly      If Not .BOF Then       M = .RecordCount - 1       N = .Fields.Count - 1       .MoveFirst       For R = 0 To M         For C = 0 To N           Datas = Datas & .Fields(C) & strSeparator1         Next C         If Len(strSeparator2) Then           Datas = Datas & strSeparator2         End If         .MoveNext       Next R      End If   End With   ' ---------------   ' End With: rst   ' =============== Exit_DBSelect:   DBSelect = Datas   Exit Function Err_DBSelect:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBSelect End Function

isas-isas
質問者

お礼

たびたびの回答、ありがとうございます。 これは、コンボボックスに値をセットするための関数を作る・・・ ということで認識はあってますでしょうか? 試してはみたのですが、まだまだ勉強不足で理解が足りず、 よくわかりませんでした・・・すみませんm(__)m 私のやりたかった事は Me.コンボボックス名.RowSource = "SELECT [T得意先名].[得意先名] FROM T得意先名 WHERE 得意先名フリガナ LIKE'" & Me!テキストボックス & "*';" と記述しましたら実現することが出来ました。 []が必要だったとの見解でいいのでしょうか。。。^^; requeryをしなくても動作するのですが、それが何故なのかよくわかりません 色々としていただき、本当にどうもありがとうございましたm(__)m

全文を見る
すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.4

私の回答のように、テーブル構造とデータとVBAコード全文を示されたし。

全文を見る
すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.3

Customer: ID_KName______Yomi _1_鈴木 一郎__スズキ イチロウ _2_杉下 五郎__スギシタ ゴロウ _3_中村 主水__ナカムラ モンド フォーム1: 検索する読み_____[ス__________] コンボ_検索結果__[鈴木 一郎___] コンボ_検索結果.値集合タイプ=テーブル/クエリ コンボ_検索結果.列数=1 次は、フォーム1の[検索する読み]が入力されたら[コンボ_検索結果]に検索結果を表示するサンプルです。 1、Len(Me.検索する読み & "")で、入力の有無をチェック。 2、入力されていれば、LIKE文を使ったSQL文を作成しています。 3、テーブル/クエリをリクエリしています。 4、一応、トップのアイテムデータを選択表示しています。 Private Sub 検索する読み_AfterUpdate()   If Len(Me.検索する読み & "") Then     Me.コンボ_検索結果.RowSource = "SELECT Kname FROM Customer WHERE Yomi LIKE '" & Me.検索する読み & "*'"     Me.コンボ_検索結果.Requery     If Me.コンボ_検索結果.ListCount > 0 Then       Me.コンボ_検索結果.Value = Me.コンボ_検索結果.ItemData(0)     End If   End If End Sub この方式は[コンボ_検索結果.RowSource]をその都度設定していますのでプロパティの設定は無用です。 上記コードと比較した場合、3のリクエリが不足しています。 ※なお、コンボ_検索結果.値集合タイプ=値リストのやり方もあります。

isas-isas
質問者

お礼

ご回答ありがとうございますm(__)m 上記コードをコピーさせてもらい、該当箇所を変更(コントロール名など) して試してみたのですが、やはりコンボボックスには何も表示されませんでした(;_;) 根本的に何かが違うのでしょうか? No.2の方のお礼のところに、もう少し詳しい状況を書いてみましたので よろしければ読んでやってくださいm(__)m 引き続きよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

以下の順になっているか確認してください。 Me.コンボボックス名.RowSource = "SELECT ~略 Me.コンボボックス名.ReQuery SQLを変更する前にQueryしても無駄ですから・・・ この通りになっているのに何も表示されないとしたら、 テーブル内に該当するものが無い場合だけです。

isas-isas
質問者

お礼

ご回答ありがとうございますm(__)m 記述している順番はその通りになっております。 Me.コンボボックス名.ReQueryを下行に書きましたが駄目でした。 テーブルを直接開いて確認すると、検索値に該当するレコードが 存在しているのですが。。。(;_;) 何か私が基本的な所で間違っているのでしょうか~ もう少し詳しく書きますと、 テーブル名:T得意先名(ID、得意先名、フリガナと3つのフィールドを持ってます) 上記テーブルから「txt検索値」に入力したフリガナ(半角カタカナ)であいまい検索させた結果を 「cob結果」に表示させたいのです。。 テーブル「T得意先名」の「フリガナ」フィールドにはウチュウという文字が 入力されたレコードがありますが、 txt検索値にウチュウと入力しても何も表示されません。 コンボボックスに表示したいのは「得意先名」なのですが。。。 何度もすみません よろしくお願いいたします。m(__)m

全文を見る
すると、全ての回答が全文表示されます。
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

再クエリしていないのでは? Me.コンボボックス名.ReQuery RowSourceをいくら変更しても、そのSQLを「実行」しなければ、コンボボックスの「ネタ」は更新されません。

isas-isas
質問者

お礼

早速の回答ありがとうございますm(__)m me.コンボボックス名.ReQuery を追加してみましたが、やはりコンボボックスには何も表示されませんでした。。。 引き続きよろしくお願いいたしますm(__)m

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • コンボBOXで抽出した値をテキストBOXに表示したい

    入力用フォームで注文フォームを作成しているのですが、コンボBOXで商品Noを抽出し、テキストBOXに商品名を表示したいのですが、 Private Sub コンボ1_AfterUpdate() Me!テキスト1 = Me!コンボ1.column(1) End Sub と入力したのですが、他の行にも同じ商品名が表示されます。 商品NoをコンボBOXで指定し、数量を手入力という入力フォームを作成したいのです。 作成方法を教えてください。 よろしくおねがいします

  • コンボボックス 値をもっと表示させたい

    アクセスならフォームのプロパティに「リスト行数」と日本語で書いてあるから探しやすいのですが エクセルフォームのコンボボックスのリスト行数を変更するにはどうすればいいでしょうか?  VBE画面でプロパティを見ても探せません。 Private Sub UserForm_Initialize() Me.ComboBox1.RowSource = "a1:a20" End Sub としたのですが、スクロールしないと、8行目までしか表示されません。 20行目まで表示させる方法をご教授ください。

  • アクセス コンボボックスについて

    コンボボックス 印刷ボタンについて アクセス勉強中です。 フォームで作成した画面 だけを印刷する、コンボボックスを作成しています。 コンボボックスウィザードにてフォーム印刷ボタンを作成したのですが、 1000人くらいの、すべてのデーターが印刷されてしまい困っております。 どこを変更すれば1枚だけ印刷ができるのでしょうか? イベントプロジャという部分は下記です。 またプロジャー以外に何かしなければならないのでしょうか?? どうぞ宜しくお願いいたします。 Option Compare Database Private Sub リスト70_AfterUpdate() ' コントロールの値と一致するレコードを検索する Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[IDI] = " & Str(Me![リスト70]) Me.Bookmark = rs.Bookmark End Sub Private Sub コンボ73_AfterUpdate() ' コントロールの値と一致するレコードを検索する Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[NO] = " & Str(Me![コンボ73]) Me.Bookmark = rs.Bookmark End Sub Private Sub コンボ73_BeforeUpdate(Cancel As Integer) End Sub Private Sub 生年月日_AfterUpdate() Me.年_____齢 = Int(DateDiff("d", [生年月日] - 1, Date) / 365.25) End Sub Private Sub 郵便番号_AfterUpdate() Me!現住所.SetFocus Me!現住所.SelStart = Len(Me!現住所) End Sub Private Sub コマンド121_Click() On Error GoTo Err_コマンド121_Click Dim stDocName As String Dim MyForm As Form stDocName = "顧客リスト" Set MyForm = Screen.ActiveForm DoCmd.SelectObject acForm, stDocName, True DoCmd.PrintOut DoCmd.SelectObject acForm, MyForm.Name, False Exit_コマンド121_Click: Exit Sub Err_コマンド121_Click: MsgBox Err.Description Resume Exit_コマンド121_Click End Sub

  • アクセス コンボボックスで全項目表示

    アクセス2000で発注書をつくっています 発注書フォームのサブフォーム「発注書sub」内で 「大項目」「中項目」「小項目」「商品コード」の 4つのコンボボックスを設置し、 絞込み検索で商品明細を入力しています 新規レコードに移動するときに 「大項目」「中項目」「小項目」の値を空白にし、 4つめの「商品コード」コンボボックスで 全商品を表示させたいのですが どう記述していいのかわかりません 現在は Private Sub 商品コード_AfterUpdate() Me.品番 = Me.商品コード.Column(1) Me.商品名 = Me.商品コード.Column(2) Me.色 = Me.商品コード.Column(3) Me.サイズ = Me.商品コード.Column(4) Me.商品単価 = Me.商品コード.Column(5) End Sub Private Sub 小項目_Enter() Me!商品コード.Requery End Sub Private Sub 大項目_AfterUpdate() Me!中項目.Requery End Sub Private Sub 中項目_AfterUpdate() Me!小項目.Requery End Sub Private Sub 小項目_AfterUpdate() Me!商品コード.Requery End Sub 'フォーカスが移ると同時にドロップダウンさせる Private Sub 大項目_GotFocus() Me.大項目.Dropdown End Sub Private Sub 中項目_GotFocus() Me.中項目.Dropdown End Sub Private Sub 小項目_GotFocus() Me.小項目.Dropdown End Sub 'テスト Private Sub 摘要_LostFocus() Me!大項目 = Null Me!中項目 = Null Me!小項目 = Null Me!商品コード.Requery End Sub です。 発注書フォーム(単票フォーム) レコードソース「発注書」 サブフォーム名「発注書sub」(帳票形式) レコードソース「発注書明細」 リンク親フィールド子フィールドともに「発注書コード」 (他に表記が必要なのがあるかもしれませんが。。) テーブル ●発注書明細 「明細コード」「発注書コード」「商品コード」「品番」「商品名」「色」「サイズ」「商品単価」「数量」「摘要」です ●商品マスタ 「商品コード」「品番」「種類」「大項目」「中項目」「色」「商品名」「サイズ」「商品単価」 です。 どなたか ご指導のほどよろしくお願いいたします

  • コンボボックスの抽出条件のLikeについて

    フォーム内のコンボボックス処理について 現在ACCESS2002でDBを構築しております。 初心者です。 フォーム内でテキストボックスから値【a】をもらい、その【a】を抽出条件として抽出結果を コンボボックスに表示したいと考えております。 ※like関数を使用 Private Sub テキスト1_AfterUpdate() DoCmd.Requery "コンボ1" Me!テキスト1.Requery End Sub コンボボックスの値集合ソースの抽出条件で ((テーブル.カラム) like "'*" & Forms!フォーム!テキスト1 & "*'") 上記で指定したのですが、何も抽出されません。 イコールで下記を実行すると値は抽出されます。 ((テーブル.カラム) = Forms!フォーム!テキスト1 ) LIKE関数の使い方が悪いのでしょうか。 お手数ですが、ご教授願います。

  • コンボボックスについて

    Access初心者です。 コンボボックスの一行目にハイフン、もしくは 何も値の入っていない行を表示させたいと思っています。 今は下のようなかたちで値をセットしているのですが、 どうやればできるのか良い方法が思いつきません。 Me!コンボボックス名.RowSource = "SQL文" こういう形式を使うのは無理なのでしょうか? すみませんがよろしくお願いします。 (Windows2000 & Access2000です。)

  • A1:C1のデータをコンボボックスに表示したい

    度々失礼します。 図のように 横に表示されている値を コンボボックスに縦に表示する事は不可能でしょうか? コンボボックスには あ い う と縦に表示したいです。 Private Sub UserForm_Initialize() Me.ComboBox1.RowSource = "a1:c1" End Sub をやっても 図のように「あ」しか表示されません。 行列入れ替え機能みたいなのがあればなって思っています。 よろしくお願いします。

  • 【急いでます】コンボボックスのデータ型のエラー

    リストボックスにテーブルAのフィールド名を表示させフィールドを選択、オプショングループで演算子(=、>など)を選択、コンボボックスにそのフィールドのソースが表示されリストから値を選択し検索をかけたいと思っています。 リストボックスで数値型のフィールドを選択し、コンボボックスから値を選択するまではいいのですが、 その後リストボックスでテキスト型のフィールドに変更すると、コンボボックスにソースは表示されるのですが選択しようとすると、 このフィールドに入力した値が正しくありません。 たとえば、数値型のフィールドに文字列を入力しました。 とエラーが出てしまいます。 コンボボックスに前に選択したデータ型が残ってしまっているようなのです。 WEBでも検索し、色々試したのですがどれもうまくいきません。 これを回避する方法はないでしょうか? ---<現在のソース>---------------------------------------------------------------- リストボックス:listfield 演算子オプショングループ:opgEnzan コンボボックス:cboJoken Private Sub Form_Open(Cancel As Integer) strTable = lstfield.RowSource End Sub Private Sub lstfield_Click() opgEnzan = False End Sub Private Sub opgEnzan_Click() cboJoken.RowSource = "" cboJoken.RowSource = "SELECT DISTINCT " & lstfield & " FROM " & strTable & ";" cboJoken = Null cboJoken.ColumnWidths = "0cm" cboJoken.ColumnWidths = "4.5cm" cboJoken.SetFocus SendKeys "{F4}" End Sub

  • コンボボックスの表示について

    コンボボックスで選択した「駅名」に関連する「沿線番号」と「駅番号」をテーブルに書き込みたいのですが、「駅名」の表示に問題がありますのでご指導ください。 XP、Access 2007 T_テーブル 駅名  (テキスト) 沿線番号 (数値) 駅番号  (数値) T_駅コード 駅名     沿線番号   駅番号 成増          0     0 地下鉄成増     1     0 下赤塚         0     1 地下鉄赤塚     1     1 列数 3 (これが怪しい?) 連結列 3 リスト行数 4 値集合ソース T_駅コード Private Sub cbo_駅名_AfterUpdate() Me!沿線番号 = Me!cbo_駅名.Column(1) Me!駅番号 = Me!cbo_駅名.Column(2) End Sub この場合、「沿線番号」と「駅番号」はテーブルに書き込みできるのですが、コンボボックスで選択した駅名の表示がおかしく、テーブルに書き込みされません。どの設定に間違いがあるのでしょうか、お教え下さい。

  • 【Access】サブフォームのコンボボックス連携

    ACCESSで社員の資格情報を入力するシステムを作成したのですが 以下の問題を解決できず困っています。 どうすればいいか お力を貸して頂けないでしょうか? ■問題:メインフォームで別レコードに移動した際 サブフォーム内の連携コンボボックスを更新されない □コンボボックス2の表示項目 1.分類別No 2.資格名ID 3.資格名 3のみを表示していますが、 1つ目のコンボボックス1の数値で 全コンボボックス2の資格名が出てしまいます。 ■フォーム構成 メインフォーム内に以下を設置 1.移動ボタン 2.帳簿サブフォーム □サブフォーム構成 レコード1 コンボボックス1 コンボボックス2 レコード2 コンボボックス1 コンボボックス2 ~~ 最終レコード コンボボックス1 コンボボックス2 ■コントロールソース コンボボックス1:大分類ID コンボボックス2:資格名ID ■テーブル構成 資格名  資格名ID(主キー)  大分類ID  分類別ナンバー(大分類ごとの登録順ナンバー)  資格名   資格大分類  大分類ID(主キー  大分類名 (IT系・運転系など) ■コンボボックス2の値集合ソース(表示項目:資格名) SELECT 資格名.資格名, 資格名.分類別No, 資格名.資格名ID FROM 資格大分類 INNER JOIN 資格名 ON 資格大分類.資格大分類ID = 資格名.資格大分類ID WHERE (((資格名.資格大分類ID)=[Forms]![メインフォーム]![サブフォーム]![コンボボックス1])) ORDER BY 資格名.分類別No; ------------------------------------ サブフォームに記載し効果のなかったVBAコード ’再クエリ Private Sub Form_Current() Dim cntrl As Control If Not IsNull(Me![コンボボックス1]) Then For Each cntrl In Form.Controls If cntrl.ControlType = acComboBox Then cntrl.Requery End If Next cntrl End If End Sub ’ソース更新 Private Sub Form_Current() With Forms!メインフォーム名!サブフォーム名!コンボボックス2 .RowSource = .RowSource End With End Sub ■参考サイト 'サブフォーム内での2つのコンボボックスの連動について 'http://goo.gl/nfvxW '~ '>   コンボボックスAの更新後処理イベントに '> Me!コンボボックスB.Requery '> 'Me.コンボボックスB.RowSource = Me.コンボボックスB.RowSource '数値でコンボボックス選択 'http://goo.gl/ovZ3C 'リストボックスの行を選択するときは、「Selected(n)」を使います 'http://goo.gl/RbsWX 'サブフォームの指定 ' =Forms!フォーム名!サブフォームコントロール名.Form.テキストボックス名 'http://goo.gl/vKxtj

DCP-J562Nのスキャンができない
このQ&Aのポイント
  • プリントはできるが、DCP-J562Nのスキャンができないというお悩みについて解決方法をご紹介します。
  • DCP-J562Nのスキャンができないトラブルについて、お使いの環境や接続方法について詳しくお知らせください。
  • DCP-J562Nのスキャンができない原因を特定し、解決するためのお手続きや設定方法をご紹介します。
回答を見る