在SQL语句中使用":参数名"的方法传入参数,效果图:

 

****************************************************************************************************

新建空白工程,在窗体中放入一ADODataSet,三对ADODataSet,DataSource,DBGrid。

源代码如下:

****************************************************************************************************

  1 unit Unit4;
  2 
  3 interface
  4 
  5 uses
  6   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  7   System.Classes, Vcl.Graphics,
  8   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Data.Win.ADODB, Vcl.Grids,
  9   Vcl.DBGrids;
 10 
 11 type
 12   TForm4 = class(TForm)
 13     DBGrid1: TDBGrid;
 14     DBGrid2: TDBGrid;
 15     DBGrid3: TDBGrid;
 16     ADODataSet1: TADODataSet;
 17     DataSource1: TDataSource;
 18     ADODataSet2: TADODataSet;
 19     ADODataSet3: TADODataSet;
 20     DataSource2: TDataSource;
 21     DataSource3: TDataSource;
 22     ADOConnection1: TADOConnection;
 23     procedure FormCreate(Sender: TObject);
 24     procedure ADODataSet2AfterScroll(DataSet: TDataSet);
 25     procedure ADODataSet1AfterScroll(DataSet: TDataSet);
 26   private
 27     { Private declarations }
 28   public
 29     { Public declarations }
 30   end;
 31 
 32 var
 33   Form4: TForm4;
 34 
 35 implementation
 36 
 37 {$R *.dfm}
 38 
 39 procedure TForm4.ADODataSet1AfterScroll(DataSet: TDataSet);
 40 begin
 41   ADODataSet2.Active := false;
 42   ADODataSet2.Parameters.ParamByName('订单ID1').Value :=
 43     DataSet.FieldByName('订单ID').Value;
 44   ADODataSet2.Active := true;
 45 end;
 46 
 47 procedure TForm4.ADODataSet2AfterScroll(DataSet: TDataSet);
 48 begin
 49   ADODataSet3.Active := false;
 50   ADODataSet3.Parameters.ParamByName('产品ID1').Value :=
 51     DataSet.FieldByName('产品ID').Value;
 52   ADODataSet3.Active := true;
 53 end;
 54 
 55 procedure TForm4.FormCreate(Sender: TObject);
 56 begin
 57   // 连接到同一个数据库,三个ADODataSet共用一个Connection;
 58   with ADOConnection1 do
 59   begin
 60     // 连结来源的资讯及使用何种连结特性等连结字串
 61     ConnectionString :=
 62       'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demons.mdb;Persist Security Info=False';
 63     // 不弹出登录提示框
 64     LoginPrompt := false;
 65     Provider := 'Microsoft.Jet.OLEDB.4.0';
 66     // 防止其它人连接
 67     Mode := cmShareDenyNone;
 68   end;
 69   // 获取数据库中3订单表中的所有字段
 70   ADODataSet1.CommandText := 'select * from 3订单';
 71   ADODataSet1.CursorType := ctStatic;
 72   // 关联ADOConnection
 73   ADODataSet1.Connection := ADOConnection1;
 74   // 根据订单表中的订单ID获取订单明细,:变量名 表示是变量不是字段,:订单ID1可以为任意合法变量名
 75   ADODataSet2.CommandText := 'select * from 2订单明细 where 订单ID=:订单ID1';
 76   with ADODataSet2.Parameters.AddParameter do
 77   begin
 78     Name := '订单ID1';
 79     Value := NUll;
 80   end;
 81   ADODataSet2.CursorType := ctStatic;
 82   ADODataSet2.Connection := ADOConnection1;
 83   // 根据订单明细表中的产品ID获取产品明细
 84   ADODataSet3.CommandText := 'select * from 1产品 where 产品ID=:产品ID1';
 85   with ADODataSet3.Parameters.AddParameter do
 86   begin
 87     Name := '产品ID1';
 88     Value := NUll;
 89   end;
 90   ADODataSet3.CursorType := ctStatic;
 91   ADODataSet3.Connection := ADOConnection1;
 92   DataSource1.DataSet := ADODataSet1;
 93   DBGrid1.DataSource := DataSource1;
 94   DataSource2.DataSet := ADODataSet2;
 95   DBGrid2.DataSource := DataSource2;
 96   DataSource3.DataSet := ADODataSet3;
 97   DBGrid3.DataSource := DataSource3;
 98 
 99   // 连接到数据库
100   ADODataSet1.Active := true;
101   ADODataSet2.Active := true;
102   ADODataSet3.Active := true;
103 
104 end;
105 
106 end.

 以上代码除了ADODataSet1AfterScroll和ADODataSet2AfterScroll这两个事件,其它完全可以在对象检视器中设置相应属性完成,在代码中完成相应设置会更灵活,可在运行时修改。

posted on 2017-03-01 01:50  sun繁星点点  阅读(1523)  评论(0编辑  收藏  举报