2014-04-16 35 views
2

我在Delphi中構建了一個數據集,其中有一個ADOQuery,它從表中選擇了2個柱...我將該ADOQuery中的一列拖放到一個表單中,我怎麼能從該列中訪問我的值。我想把這些值放到組合框中。德爾福數據庫訪問數據源中的數據

unit SCArabica; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, StdCtrls, DB, Mask, DBCtrls, Grids, DBGrids; 

type 
    TForm1 = class(TForm) 
ComboBox1: TComboBox; 
    DBGrid1: TDBGrid; 
    Label9: TLabel; 
    DBEdit1: TDBEdit; 
    DataSource1: TDataSource; 
    procedure FormCreate(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    published 
    end; 

var 
    Form1: TForm1; 
implementation 

{$R *.dfm} 

procedure TForm1.FormCreate(Sender: TObject); 
begin 

end; 

end. 

DATASET代碼

unit SCArabicaDataSet; 

interface 

uses 
    SysUtils, Classes, FMTBcd, DB, SqlExpr, ADODB; 

type 
    TDataModule1 = class(TDataModule) 
    ad: TADOConnection; 
    ADOQuery1: TADOQuery; 
    ADOQuery1CategoriePermisID: TIntegerField; 
    ADOQuery1Categorie: TWideStringField; 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    DataModule1: TDataModule1; 

implementation 

{$R *.dfm} 

end. 

我是新德爾福,你可以指導我如何建立在Delphi一個程序,數據庫的存取權限一些教程?

回答

4

在我看來,一個好的設計是在TDataModule1中添加一個方法從數據集中提取記錄並填充TStrings。然後從主代碼中,您只需傳遞combobox.items。

procedure TDataModule1.FetchRecords(OutStrings : TStrings); 
begin 
    ADOQuery1.SQL.Text := 'SELECT COMPANY FROm COMPANIES WHERE COUNTRY="BELGIUM"'; 
    ADOQuery1.Open; 
    while not ADOQuery1.Eof do begin 
     OutStrings.Add(ADOQuery1.Fields[0].AsString; 
     ADOQuery1.Next; 
    end; 
end; 

然後你就可以在形式編寫代碼:

ComboBox1.Items.Clear; 
DataModule1.FetchRecords(ComboBox1.Items); 

我剛剛輸入了這一點,我的頭,也許一些小錯誤,但你的想法...

+0

謝謝你,我會盡快測試,並配備了一個答案,但看起來很不錯。 – CiucaS

+0

經過測試......它可以工作,但我以其他方式做到了。而不是 – CiucaS

1
while not dm1.ADOQuery2.Eof do 
     begin 
      DBComboBox1.Items.Add(dm1.ADOQuery2.Recordset.Fields['IDMasina'].Value) ; 
      dm1.ADOQuery2.Next; 
     end; 

這是我的解決方案。

DM1是一個DataSource
ADOQuery2是一個DataSet

+0

您的解決方案明顯滿足技術要求。但它並沒有將數據持久性與用戶界面隔離開來。從概念上看,在數據模塊中創建方法要比直接在表單的數據模塊中尋址查詢組件更好。好的設計需要隔離用戶界面(表單)和持久性和/或業務邏輯(數據模塊)。 – fpiette