unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids; type TForm1 = class(TForm) Button1: TButton; ADOQuery1: TADOQuery; Memo1: TMemo; DBGrid1: TDBGrid; DataSource1: TDataSource; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var tfdate: string; //全局变量和 sql语句里的变量相同,没有冲突的 {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); const FROMWhereStr = ' from tbtest WHERE tfDate=:tfDate'; ParamBuyDateTime = 'tfDate'; begin ADOQuery1.SQL.Text := 'select * ' + FROMWhereStr ; ADOQuery1.Parameters.ParamByName(ParamBuyDateTime).Value := '2015-05-15 20:34:00'; //用参数对象,字符串或者日期时间类型都可以 ADOQuery1.Open; Memo1.Lines.Add( ADOQuery1.Parameters.ParamByName(ParamBuyDateTime).Value + ' 行' + IntToStr(ADOQuery1.RecordCount)); end; procedure TForm1.Button2Click(Sender: TObject); const FROMWhereStr = ' from tbtest WHERE tfDate < #2015-05-15 20:34:00#';
//字符串拼接的SQL里 必须 加# 好像不行,因为时间部分 有 : Delphi 会认为是 变量
//只有 是日期字符2015-05-15,就是没有时间部分 ,才能使用 #
ParamBuyDateTime = 'tfDate';
begin
ADOQuery1.SQL.Text := 'select * ' + FROMWhereStr ;
ADOQuery1.Open;
Memo1.Lines.Add( ADOQuery1.SQL.Text + ' 行' + IntToStr(ADOQuery1.RecordCount));
end;
//http://www.delphitop.com/html/shujuku/2180.html
請參考: http://www.delphi32.com/info_facts/faq/faq_932.asp
由於動態給定 sql command, 其中的參數並未建立, 請加入
Query1.Params.ParseSQL(Query1.SQL.Text , True);
試試看!!
end.
ADOQuery1.Parameters.Clear; //这2句 最好成对出现,有这个,必须要有下面的或者 ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text :=
ADOQuery1.Parameters.ParseSQL(ADOQuery1.SQL.Text, True); //这2句 最好成对出现 ,有这个不一定要有上面的
ADOQuery1.Parameters.Clear;
ADOQuery1.SQL.Clear;//为何经常先有这句?
//给Text属性直接赋值,不是也可以更新内容吗?
ADOQuery1.SQL.Text := 'SELECT * ' + FROMWhereStr ;//FROM tbTOPMTrade WHERE BuyDateTime<:BuyDateTime';
ShowMessage( IntToStr( ADOQuery1.Parameters.Count ));
如果没有ADOQuery1.SQL.Clear;
运行,第一次点击 按钮,正常,参数个数是1,第二次点击按钮 ,参数个数是0。