ADO SQL delete 日期条件参数

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。

 

原文地址:https://www.cnblogs.com/CodeGear/p/4506987.html