2014-04-16 38 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