【问题标题】:Delphi database acces data from a datasourceDelphi 数据库从数据源访问数据
【发布时间】:2014-05-31 10:17:26
【问题描述】:

我在 Delphi 中构建了一个数据集,其中我有一个从表中选择 2 个列的 ADOQuery...我将该 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.

数据集代码

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 新手,您能否指导我学习一些关于如何在 Delphi 中构建访问数据库的程序的教程?

【问题讨论】:

    标签: database delphi datasource


    【解决方案1】:

    在我看来,一个好的设计是在 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);
    

    我只是在脑海中输入了这个,所以可能有一些小错误,但你明白了......

    【讨论】:

    • 谢谢,我会尽快测试并给出答案,但看起来不错。
    【解决方案2】:
     while not dm1.ADOQuery2.Eof do
            begin
                 DBComboBox1.Items.Add(dm1.ADOQuery2.Recordset.Fields['IDMasina'].Value) ;
                 dm1.ADOQuery2.Next;
            end;
    

    这是我的解决方案。

    dm1 是一个数据源
    ADOQuery2 是一个数据集

    【讨论】:

    • 您的解决方案显然满足了技术要求。但它并没有将数据持久性与用户界面隔离开来。从概念的角度来看,在数据模块中创建方法比从表单直接寻址数据模块中的查询组件要好得多。好的设计需要隔离用户界面(表单)和持久性和/或业务逻辑(数据模块)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    相关资源
    最近更新 更多