• ベストアンサー

データコンボボックスを連動させたい。

はじめまして、宜しくお願いします。 VB6、SQLサーバーでタイトルのようなことを実現したいと思っています。 データベース(テーブル名:行事履歴)の内容は 年度    行事 ---------------------- 2001    夏期キャンプ 2001    修学旅行 2002    社会見学 となっており、 コンボ1で年度を選択して、選択した年度の行事を コンボ2にリストとして表示したいと思っています。 (例えば、コンボ1で"2001"を選ぶとコンボ2には"夏期キャンプ"、"修学旅行" のみが表示される) 現在やっているのは コンボ1とそれに連結しているADOデータコントロール1、 コンボ2とそれに連結しているADOデータコントロール2を用意して ADOデータコントロール1のRecordSourceには "SELECT DISTINCT 年度 FROM 行事履歴" ADOデータコントロール2のRecordSourceには "SELECT * FROM 行事履歴" としておき、 ADOデータコントロール1のCHANGEイベントで ADOデータコントロール2のRecordSourceを "SELECT * FROM 行事履歴 WHERE 年度 = '" & ADOデータコントロール1.TEXT & "'" としているのですがコンボ2のリストに "夏期キャンプ"、"修学旅行"、"社会見学"が3つとも表示されてしまい、 うまく連動してくれず行き詰っています。 (一応、コンボ2の.Refreshメソッドを行っているのですがうまくいかないようです。) もしもなにかお気づきの方が居られましたら、ご教授ください。 宜しくお願いいたします。

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

  • ベストアンサー
回答No.4

>一応、コンボ2の.Refreshメソッドを行っているのですがうまくいかないようです。 コンボ2ではなくADOデータコントロール2をRefreshしてみてください。 Private Sub DataCombo1_Change() Adodc2.RecordSource = "SELECT * FROM 行事履歴 WHERE 年度 = '" & DataCombo1.Text & "'" Adodc2.Refresh End Sub これでだめなようなら、補足してください。

takatoo
質問者

お礼

早速のレスありがとうございます。 taisuke555さんの言うとおりデータコントロールの方を Refreshしたら、うまく動きました。 コンボをRefreshをしても動かなかったので、 Refreshは意味がないと決め付けていました。反省です。 本当にありがとうございました。

その他の回答 (3)

  • kikumaro
  • ベストアンサー率48% (127/261)
回答No.3

takatooさん、こんにちわ。 VBとかSQLじゃなくちゃ駄目ですか? 先月私は同じような内容(たぶん…)で、ここで質問をしました。 私はずぶの素人なので、いただいた回答について理解が出来ず、結局は全く違う方法でこれを解決しました。 以下、参考になるかどうか分かりませんが… 『行事履歴』テーブルのほかに、『年度』テーブルも作っておきます。 文字通り、『年度』のデータしかないテーブルです。 コンボ1はこの『年度』テーブルから選択するようにします。 次に『行事履歴』テーブルの選択クエリを作成し、『年度』フィールドの表示チェックをはずします。 抽出条件は『コンボ1の内容』という数式を入れます。 続いてマクロを作成します。 1行目には『再クエリ』、使う場所(コントロール)はコンボ2の『行事』を表示するところ、2行目には『閉じる』とし、オブジェクトは作成したクエリになります。 あとはコンボ2の値集合ソースに作成したクエリを入れ、フォーカス取得時にマクロを入れれば…これで出来るはずです。 VBとかSQLとかは全く分からないので、参考にはならないとは思いますけど… ちなみに下記のURLには私が質問したときの回答内容を入れておきます。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q-371961
takatoo
質問者

お礼

早速のレスありがとうございます。 現在のDB構造を変えたくないというのが、ありまして。。。 しかし、ご丁寧な説明ありがとうございます。

回答No.2

これだと、最終的にADOデータコントロール2のRecordSourceは 「SELECT * FROM 行事履歴 WHERE 年度 = '2001'」 というSQL文になりますが 「行事履歴」テーブルの「年度」フィールドは文字型になってますか?

takatoo
質問者

お礼

早速のレスありがとうございます。 「年度」フィールドは文字型になっています。 原因はtaisuke555さんの指摘された、ADODCのRefreshでした。 しかし、早々の回答ありがとうございました。

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.1

SELECT * ←全てを指定している SELECT 行事 ←表示項目を指定する だめ?

takatoo
質問者

お礼

早速のレスありがとうございます。 「select *」として、全て選択していますが、 コンボ側のFildListプロパティで表示するフィールドを選択できるようなので 問題ないようです。 原因はADODCのRefreshをしていないことでした。 しかし早々の回答ありがとうございました。

関連するQ&A

  • ACCESSを用いたデータベースでのコンボボックスの連動

    おせわになっております。 VBでデータベースを作っているのですが、 コンボボックスでの検索での絞込みがうまくいきません。 (データベースはAccess2000) 例えば、コンボボックス1で選ばれたファールドにより 絞込みが行われ(例:県選択:千葉県) 、コンボボックス2で表示するレコードは コンボボックス1で選択されたレコードに該当するものしか表示しないようにするというとです。(例:市選択:市川市.船橋市.浦安市・・・と絞り込まれる) どこかおかしい個所はありますでしょうか?? (個人的にはdbc1が選択された時点でdbc2のクエリーが行われなければならないと思いますが、やり方がわかりません。 よろしくお願い致します。 adoデータコントロールのプロパティ ado1(県名選択) RecordSource:SELECT 県名 FROM 地名 ado2(市名選択) RecordSource:SELECT 市名 FROM 地名 WHERE 県名='dbc1.Text' Private Sub dbc1_Click(Area As Integer)'県を選択するコンボボックス Dim criteria As String ' 検索条件 If dbc1.Text = "" Then Exit Sub End If criteria = "県名 = '" & dbc1.SelText & "'" rs.MoveFirst rs.Find criteria, , adSearchForward End Sub Private Sub dbc2_Click(Area As Integer)'市を選択するためのコンボボックス Dim criteria2 As String ' 検索条件 If dbc2.Text = "" Then Exit Sub End If criteria2 = "メーカ = '" & dbc2.SelText & "'" rs.MoveFirst rs.Find criteria2, , adSearchForward End Sub

  • 【VB】コンボボックスにデータベースから取り出した値を入れたい

    VB6です。 表題の通りですがやり方がよくわかりません。 ADOを使ってSQLで重複しない値を取り出すところまではできています。 SELECT DISTINCT FieldName FROM TableName; 取り出した値をコンボボックスで選択できるようにしたいのです。 よろしくご教授ください。

  • Access フォーム コンボボックス

    フォーム上のコンボボックスの選択したデータをテーブルに保存するにはどのようにすれば宜しいのでしょうか? 実際のものは、社員が複数人表示されていまして、その社員一人一人が1日ごとの出勤が可能か不可能かをコンボボックスから選択しテーブルに書き込みたいのですが、その社員一覧のテキストボックスと出勤可・不のコンボ(コントロールソースにてテーブルの各日付ごとに設定)をフォームに作ったところ、社員一覧と社員に対するコンボがずらっと表示さるのですが、コンボを選択しようとしますと下部に「このコントロールは式○○に連結しているため編集できません。」と表示されます。 長文になり、尚且つかなり分かりづらい説明で申し訳ございませんが宜しくお願い致します。

  • DBカラムをコンボボックスに設定する方法

    VB初心者ですみませんが、どなたか教えてください。 以下のようにADOにてDBのカラムからデータを取得し、コンボボックスに設定をしたいのですが、よくわかりません。 コンボボックスのはじめに空白→DBの項目を設定→最後に”なし”を設定したいのですが、教えてください。 Dim adors As New ADODB.Recordset adors.Open "SELECT A_FIELD FROM TABLE",・・・・ If adors.RecordCount <> 0 Then ComboBOX.AddItem ("") 'コンボボックスのはじめに空白を設定 Set ComboBOX.RowSource = adors ComboBOX.MatchEntry = dblExtendedMatching ComboBOX.ListField = "A_FIELD" ComboBOX.AddItem ("なし") 'コンボボックスの終わりにに’なし’を設定 End If

  • Datagridviewのコンボボックスにつきまして

    vb2005です。 DataGridViewコントロールのデータセットにデータベースのテーブルをセットしています。 そのDataGridViewの1列目にコンボボックスを設定し、 そのコンボボックスのデータセットにも別のテーブルをセットしたいのです。 Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As New DataSet Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\DB.mdb;") dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 商品", cn) dAdp.Fill(dSet, "t_商品") DataGridView1.DataSource = dSet.Tables("t_商品") dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 品種", cn) dAdp.Fill(dSet, "t_品種") Dim col As System.Windows.Forms.DataGridViewComboBoxColumn = DataGridView1.Columns(1) ・・・・★ col.DataSource = dtSet.Tables("t_品種") col.DisplayMember = "品種名" col.ValueMember = "品種コード" 上記のように記述しているのですが、★の部分で、下記のエラーになります。 型 'System.Windows.Forms.DataGridViewTextBoxColumn' のオブジェクトを型 'System.Windows.Forms.DataGridViewComboBoxColumn' にキャストできません データソースを指定したDataGridViewの列にはコンボボックス等の設定は 出来ないのでしょうか?

  • Access2003でコンボボックスからデータを抽出したい

    自己啓発でAccess2003を勉強しています。 Access2003でコンボボックスで名前を選択して、データ(住所)を抽出したものをリストボックスに表示させたいのですがどこがまちがっているかわかりません。こんなことで3週間ぐらい悩んでいます。 回答またはアドバイスをお願いします。 もしくはもっと簡単なやりかたがあればお願いします。 (1)「氏名」、「住所」のテーブルを作成。テーブル名は「01データ」 (2)「氏名」、「住所」のクエリを作成。クエリ名は「クエリ1」 (3)フォームでコンボボックスとリストを作成。フォーム名は「印刷」 ⇒コンボボックスの名前は「検索」。 ⇒値集合ソースはSELECT [01データ].ID, [01データ].氏名 FROM 01データ; これで「氏名」が選択できた。 (4)クエリの「氏名」抽出条件にLike [forms]![印刷]![検索] (5)検索するマクロを作成。マクロ名「M検索」 アクションは 全レコードの表示 フィルタの実行 ⇒Where条件は[Forms]![印刷]![検索]=[クエリ1]![氏名] (6)マクロ「M検索」をコンボボックスのプロパティ「イベント」タブから変更時に設定する。 (7)フォーム「印刷」を開き、コンボボックスで氏名を選択すると『クエリ1!氏名』と表示されてしまいます。 (8)フォーム「印刷」のリストボックスは全レコードが表示されている。

  • Accessのコンボボックスを使ったデータ入力

    Accessは初心者です。宜しくお願いします。 コンボボックスを使ったデータ入力で不具合が生じました。 以下のデーターベースを使用します。 ①テーブル:T_食品   フィールド:食品コード、分類コード、食品名 ②テーブル:T_食品分類  フィールド:分類コード、分類名 ③テーブル:T_材料  フィールド:コード、食品コード、分量 ④クエリ:Q_材料入力用  フィールド:コード(T_材料)、食品コード(T_材料)、分類コード[T_食品]、食品名(T_食品)、分量(T_材料) ※食品コード、分類コードはリレーションシップしてあります。 料理のレシピを入力するために、レコードソースがQ_材料入力用の”材料入力”の帳票フォームを作成しました。 理想としては、食品分類の”分類名”をコンボボックスで選択後、該当する食品の”食品名”をコンボボックスで選択します。そして”分量”を入力する形でした。 ”分類名”のコンボボックスは、T_食品分類をコントロールソースで設定を行い、[更新後処理]は以下の通りにしました。 Me!食品名.Requery ”食品名”のコンボボックスは、T_食品をコントロールソースして、以下の値集合ソースにしました。 SELECT T_食品.食品名, T_食品.分類名 FROM T_食品 WHERE (((T_食品.分類コード)=[Forms]![材料入力]![分類名])); 以上の設定でコンボボックスは成功しましたが、入力を行うたびに、T_食品内に入力した食品のデータが追加される現象が出ました。 何が原因だったのか、対策方法をご教授お願いします。

  • ページング処理

    すごく困っています。助けてくださいm(_ _)m VB6.0でオラクル9.0から情報をado接続でロードした時点で、全てのデータをデータグリッドに表示させています。  それを最大10件まで表示したいです。そして次へボタンをおすと次の10件を表示させたいです。戻るボタンを押すと前の10件を表示させたいです。どうしたらいいでしょうか? ado接続完了後   Set rec = cnn.Execute("select * from table") Do While Not rec.EOF 'recordsetを更新 rec.Refresh 'ADOのrecordsourceをdatagridに連結する Set DataGrid1.DataSource = rec.Recordset 見たいな感じで表示しています。  どうかよろしくお願いしますm(__)m

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

    リストボックスにテーブル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

  • Accessのコンボボックスを使ったデータ入力

    誤って質問締め切ってしまいましたので、再度内容を修正の上質問させていただきます。 Accessにおいて、コンボボックスを使ったデータ入力で不具合が生じました。 以下のデーターベースを使用します。 ①テーブル:T_材料   フィールド:材料コード、材料分類コード、名称(材料名) ②テーブル:T_材料分類  フィールド:材料分類コード、分類名 ③テーブル:T_レシピ内容  フィールド:ID、料理コード、材料コード、分量 ④テーブル:T_料理  フィールド:料理コード、名称(料理名) ⑤クエリ:Q_レシピ入力用 SELECT T_レシピ内容.ID, T_レシピ内容.料理コード, T_材料.材料分類コード, T_レシピ内容.材料コード, T_材料.名称, T_レシピ内容.分量 FROM T_材料 INNER JOIN T_レシピ内容 ON T_材料.[材料コード] = T_レシピ内容.[材料コード] ORDER BY T_レシピ内容.料理コード, T_レシピ内容.分量; メインフォームにT_料理にして、レシピを入力するためにQ_レシピ入力用のサブフォームを作成しました。 材料分類の”材料分類名”をコンボボックスで選択後、該当する材料の”名称”をコンボボックスで選択し”分量”を入力する形式にしたいです。 ”材料分類”のコンボボックスは、T_材料分類、材料分類コードをコントロールソースで設定、材料名を表示しています。[更新後処理]は以下の通りにしました。 Me!名称.Requery ”名称”のコンボボックスは、T_材料をコントロールソースして、以下の値集合ソースにしました。 SELECT T_材料.名称, T_材料.材料分類コード FROM T_材料 WHERE (((T_材料.材料分類コード)=[Forms]![F_レシピ登録M]![F_レシピ登録S]![材料分類])); 以上の設定でコンボボックスは成功しましたが、入力を行うたびに、T_材料内に入力した食品のデータが追加される現象が出ました。 長文で恐縮ですが、 何が原因だったのか、対策方法をご教授お願いします。

専門家に質問してみよう