mdbファイルのデータを表示するには?


チャーリー  2004-09-13 00:16:38  No: 10903  IP: [192.*.*.*]

はじめまして、チャーリーと言います。
mdbファイルのデータをDBGridに表示させたいと思っています。
----------------------------------------------------------------------------
1.ComboBox1にmdbファイル「data.mdb」のテーブル「RACE」にあるフィールド名「Year」を表示させて、ComboBox1.Changeで「Year」選択、
2.ComboBox2.Changeで「1月→12月」を選択すると、
3.ComboBox3.Changeで、data.mdbのテーブル「RACE」のフィールド名「MonthDay」を
表示させ、選択してクリックするとFormのDBGridに2004年12月のRACEを表示する。
----------------------------------------------------------------------------
データリンクプロパティ/プロバイダ/Microsoft Jet 4.0 OLE DB Providerを選択
データリンクプロパティ/接続/ユーザー名:admin
試しにDBGridを置いてmdbファイル「data.mdb」のテーブル「RACE」を表示させたところできました。
ADOQuery.sqlは、select * from RACE;としました。

ComboBoxを利用した1→3の手順で「RACE」を表示させるにはComboboxにどのようなコードを書き込めばいいのでしょうか。よろしくお願いします。

編集    削除
HOta  2004-09-13 16:57:30  No: 10904  IP: [192.*.*.*]

別のTADOQueryを用意して、
ADOQuery2.SQL.ADD('SELECT * FROM RACE');
ADOQuery2.SQL.ADD( WHERE'//*ここに12月を選択する条件*//);
でTDataSorceのDataSetを切り替えれば可能です。

編集    削除
チャーリー  2004-09-14 03:21:50  No: 10905  IP: [192.*.*.*]

こんにちは。
テーブル「RACE」のデータをComboBoxを利用して選択して最終的にDBGridに絞り込んだデータを表示させたいのですが、せっかく教えてもらったにもかかわらず、ComboBoxにどのようにコードを記入すればいいのか分かりません。
ComboBox1の表示はフィールド「YEAR」に入っている年のデータで重なっている場合は除いて
2004
2003
2002
というように表示させたいのです。ComboBoxではなくDBComboBoxを使った方がいいのでしょうか。
それから気になるのが、コンパイルしようとするときdata.mdbが400000KBあるためかコンパイルして画面が正常になるまで3分以上掛かります。pentium3を使っているのですが、だいたいこんなに時間かかるものなのでしょうか?

編集    削除
@っしー  2004-09-14 19:36:31  No: 10906  IP: [192.*.*.*]

>ComboBox1の表示はフィールド「YEAR」に入っている年のデータで重なっている場合は除いて

  ComboBox1.Clear;
  with ADOQuery1 do begin
    Close;
    with SQL do begin
      Clear;
      SQL.Add('SELECT DISTINCT Year From RACE ORDER BY Year DESC;');
    end;
    Open;
    while not Eof do begin
      ComboBox1.Items.Add(FieldByName('Year').AsString);
      Next;
    end;
  end;

※FormCreateにでも書いておけば如何でしょう?
※DBComboBoxでも同様な処理は必要になります。

編集    削除
HOta  2004-09-15 00:24:02  No: 10907  IP: [192.*.*.*]

絞り込む条件は、テーブルの対応する項目で
@っしーさんの最初は
Combobox1.Items.Clear;
にします。

後は、ComboBoxの適当なイベントで、条件を付けてやればOKです。
コンパイルに3分以上かかるのは、よっぽど大きなプロジェクトでないと
掛かりません。動作させているのではないでしょうか?
動作させている場合でも、不要な動作が多いのではないでしょうか?

編集    削除
@っしー  2004-09-15 02:34:55  No: 10908  IP: [192.*.*.*]

>@っしーさんの最初は
>Combobox1.Items.Clear;
>にします。

すいません、この意味が分かりません、、、
というか、どちらでもOK?  私の勘違い??

編集    削除
HOta  2004-09-15 05:59:46  No: 10909  IP: [192.*.*.*]

Combobox1はTCombobox型で、Combobox1.ItemsがTStrings型なので、
このような表現にしました。
ClearとかAddはTStrings型のメソッドです。

編集    削除
チャーリー  2004-09-15 08:41:51  No: 10910  IP: [192.*.*.*]

こんばんは。
DBGridを削除して、ComboBox1にコードを記入して実行してみたのですが、うまくいきません。どこかで設定ミスがあると思うのですが、ADOConnectionでデータベースにアクセス、ユーザー名adminにしてOKを押すと、コンパイルしない段階で、7分ぐらい立ち上がるのに時間が掛かってしまいます。その後、コンパイルするとなると同じような状況で7分かかるので、プログラムするのが嫌になります。
どなたか「どんなコード書いてるんだ?ちょっと見せてみろ」とアドバイスしてくださるかたいらっしゃいましたら、メールお願いします。
プログラムしたくてもこんなに時間が掛かるなんて・・・

編集    削除
空から殻  2004-09-15 10:25:12  No: 10911  IP: [192.*.*.*]

>>@っしーさんの最初は
>>Combobox1.Items.Clear;
>>にします。
>
>すいません、この意味が分かりません、、、
>というか、どちらでもOK?  私の勘違い??

VCLのソースでは以下のようになっているので、
Combobox1.Clear;
でも Itemsが Clearされますね。
コンボボックスを空にするという意味では、Combobox1.Clear;の方がいいような…

procedure TCustomComboBox.Clear;
begin
  SetTextBuf('');
  FItems.Clear;
  FSaveIndex := -1;
end;

編集    削除
@っしー  2004-09-16 03:18:33  No: 10912  IP: [192.*.*.*]

空から殻さん
納得しました。ありがとうございます。

チャーリーさん
接続に時間がかかるのであれば、フィールド定義が同じテーブルで、少ないデータを用意して様子を見ては如何でしょうか?Accessで400MBのデータを扱ったことがないので、なんとも言えませんが、、、

編集    削除