TADOQuryを使ってDBComboBoxにデータをセットするには?

解決


もも  2009-07-02 16:04:41  No: 35007  IP: 192.*.*.*

いつもお世話になります。
https://www.petitmonte.com/bbs/answers?question_id=951
↑上記の掲示板を参考にして、TADOQueryを使ってDBComboBoxへのデータセットを組みたいの
ですがうまくいきません。どう組めばいいのか判りません。自分なりに出来るところまで
組みました。どなかご教授頂けますでしょうか?

OSはWIndowsXP SP3
データベースはMicrosoft Access2003
データベースへの接続は、下記↓のMr.XRAY氏のページを参考にして接続は成功しています。
http://mrxray.on.coocan.jp/Delphi/plSamples/570_ADO_BASIC.htm

-------------------------------------------------------------------
procedure TForm2.FormCreate(Sender: TObject);
var
  int_count : Integer;
  str_name  : string;
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT DISTINCT 区分名称 FROM Name_Tabel');
  ADOQuery1.Open;
  with ADOQuery1 do
    begin
      for int_count := 0 to ADOQuery1.SQL.Count - 1 do
        begin
          str_name := ADOQuery1.SQL.Strings[int_count];
          DBComboBox1.Items.Add(str_name);
        end;
    end;
end;
-------------------------------------------------------------------

編集 削除
・∀・  2009-07-02 16:52:59  No: 35008  IP: 192.*.*.*

どういう風にうまくいかないのかわからないです。

ADOQuery1をOpen後にNextしていないようですが、
ADOQueryだとforでループさせるだけで、次レコードに移動しましたっけ?
for抜けるまで同じデータをAddし続けるような気がするんですけど。

編集 削除
DEKO  2009-07-02 16:53:49  No: 35009  IP: 192.*.*.*

procedure TForm2.FormCreate(Sender: TObject);
begin
  with ADOQuery1 do
    begin
      SQL.Clear;
      SQL.Add('SELECT DISTINCT 区分名称 FROM Name_Tabel');
      Open;
      while not EOF do
        begin
          DBComboBox1.Items.Add(Fields[0].AsString);
          Next;
        end;  
      Close;
    end;
end;

でいいような気がします。

編集 削除
DEKO  2009-07-02 17:00:20  No: 35010  IP: 192.*.*.*

> ADOQuery1.SQL.Count
これは SQL文の行数で、
コードの動作はSQL文の内容を DBComboBox1 へ追加している気がするのですが、
これは ももさん のお望みの動作ではないですよね?

編集 削除
もも  2009-07-02 17:33:31  No: 35011  IP: 192.*.*.*

ご指導ありがとうございます。
  DBComboBoxで選択出来るようになりました。
  DBComboBox1.Items.Add(Fields[0].AsString);のコーディングの中で、
Fields[0]はどうして[0]となるのでしょうか?
  あと、DBComboBoxの設定が判らないのですが、選択したデータを
DBComboBoxに表示するにはどのプロパティを設定すればよいのでしょうか?

編集 削除
DEKO  2009-07-02 18:03:21  No: 35012  IP: 192.*.*.*

> Fields[0]はどうして[0]となるのでしょうか?
ももさん が記述された SQL には一つしかフィールドがありません。

SELECT DISTINCT 区分名称 FROM Name_Tabel

"区分名称" は最初のフィールドですので、Fields[0] でアクセスできます。
以降、Fields[1] Fields[2]...という具合です。
もちろん、FieldbyName('区分名称') でもアクセスできます。

> あと、DBComboBoxの設定が判らないのですが、選択したデータを
> DBComboBoxに表示するにはどのプロパティを設定すればよいのでしょうか?

使い方に関してはヘルプに記述があります。

http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/JA/html/devwin32/12ctrlsusingtdblistboxandtdbcombobox_xml.html

http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/JA/html/devwin32/12ctrlsdisplayingandeditingdatainlookuplistandcomboboxes_xml.html

大変失礼ですが、DB関係のコントロールの基本的な使い方を理解されていない印象を受けました。一度 DEMOS フォルダのサンプルプロジェクトを確認するなり、マニュアルを確認された方が最終的には近道になると思います。

編集 削除
もも  2009-07-03 09:03:44  No: 35013  IP: 192.*.*.*

いつもお世話になります。

> 大変失礼ですが、DB関係のコントロールの基本的な使い方を理解されて
> いない印象を受けました。一度 DEMOS フォルダのサンプルプロジェクト
> を確認するなり、マニュアルを確認された方が最終的には近道になると
> 思います。

  どんでも御座いません。
  職場や知人にDelphiを修得している人がいない環境ですので、実践的な
手解きが頂くことがありません。

  ・∀・様、DEKO様、大変お手数お掛けしました。(m_m)
  またよろしくお願い致します。

編集 削除