はじめまして、チャーリーと言います。
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にどのようなコードを書き込めばいいのでしょうか。よろしくお願いします。
別のTADOQueryを用意して、
ADOQuery2.SQL.ADD('SELECT * FROM RACE');
ADOQuery2.SQL.ADD( WHERE'//*ここに12月を選択する条件*//);
でTDataSorceのDataSetを切り替えれば可能です。
こんにちは。
テーブル「RACE」のデータをComboBoxを利用して選択して最終的にDBGridに絞り込んだデータを表示させたいのですが、せっかく教えてもらったにもかかわらず、ComboBoxにどのようにコードを記入すればいいのか分かりません。
ComboBox1の表示はフィールド「YEAR」に入っている年のデータで重なっている場合は除いて
2004
2003
2002
というように表示させたいのです。ComboBoxではなくDBComboBoxを使った方がいいのでしょうか。
それから気になるのが、コンパイルしようとするときdata.mdbが400000KBあるためかコンパイルして画面が正常になるまで3分以上掛かります。pentium3を使っているのですが、だいたいこんなに時間かかるものなのでしょうか?
>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でも同様な処理は必要になります。
絞り込む条件は、テーブルの対応する項目で
@っしーさんの最初は
Combobox1.Items.Clear;
にします。
後は、ComboBoxの適当なイベントで、条件を付けてやればOKです。
コンパイルに3分以上かかるのは、よっぽど大きなプロジェクトでないと
掛かりません。動作させているのではないでしょうか?
動作させている場合でも、不要な動作が多いのではないでしょうか?
>@っしーさんの最初は
>Combobox1.Items.Clear;
>にします。
すいません、この意味が分かりません、、、
というか、どちらでもOK? 私の勘違い??
Combobox1はTCombobox型で、Combobox1.ItemsがTStrings型なので、
このような表現にしました。
ClearとかAddはTStrings型のメソッドです。
こんばんは。
DBGridを削除して、ComboBox1にコードを記入して実行してみたのですが、うまくいきません。どこかで設定ミスがあると思うのですが、ADOConnectionでデータベースにアクセス、ユーザー名adminにしてOKを押すと、コンパイルしない段階で、7分ぐらい立ち上がるのに時間が掛かってしまいます。その後、コンパイルするとなると同じような状況で7分かかるので、プログラムするのが嫌になります。
どなたか「どんなコード書いてるんだ?ちょっと見せてみろ」とアドバイスしてくださるかたいらっしゃいましたら、メールお願いします。
プログラムしたくてもこんなに時間が掛かるなんて・・・
>>@っしーさんの最初は
>>Combobox1.Items.Clear;
>>にします。
>
>すいません、この意味が分かりません、、、
>というか、どちらでもOK? 私の勘違い??
VCLのソースでは以下のようになっているので、
Combobox1.Clear;
でも Itemsが Clearされますね。
コンボボックスを空にするという意味では、Combobox1.Clear;の方がいいような…
procedure TCustomComboBox.Clear;
begin
SetTextBuf('');
FItems.Clear;
FSaveIndex := -1;
end;
空から殻さん
納得しました。ありがとうございます。
チャーリーさん
接続に時間がかかるのであれば、フィールド定義が同じテーブルで、少ないデータを用意して様子を見ては如何でしょうか?Accessで400MBのデータを扱ったことがないので、なんとも言えませんが、、、