在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这两个事件,其它完全可以在对象检视器中设置相应属性完成,在代码中完成相应设置会更灵活,可在运行时修改。