Delphi用参数处理Data有问题,建议直接用字符串进行操作
即sql.add('where arr_dt=' + DateTimeToStr(rzdatatimepicker1.date));
还有,在用parambyname前,最好加上
unprepare;实际上,从实际应用中,常把日期类型采用字符串类型代替
即 2000-12-10 -> '20001210'
这样有利于数据库的转换,在程序处理中也不会产生处理上的奇异。
即sql.add('where arr_dt=' + DateTimeToStr(rzdatatimepicker1.date));
还有,在用parambyname前,最好加上
unprepare;实际上,从实际应用中,常把日期类型采用字符串类型代替
即 2000-12-10 -> '20001210'
这样有利于数据库的转换,在程序处理中也不会产生处理上的奇异。
procedure Tfindoutm.RzButton3Click(Sender: TObject);
begin
with query1 do
begin
close;
sql.clear;
sql.add('select * from account');
sql.add('where Arr_dt=' + DateToStr(rzdatetimepicker1.date));
//sql.add('where arr_dt=:adt');
sql.add('order by acct_num');
//parambyname('adt').asDate:=rzdatetimepicker1.date;
prepare;
open;
end;
end;
with sqlSourceTemp do
begin
Close;
with SQL do
begin
Clear;
Add('INSERT INTO SourceTemp (stEmpNo,stDate,stTime,stClockID)');
Add('VALUES(:a_EmpNo,:a_Date,:a_Time,:a_cID)');
end;
Unprepare;
ParamByName('a_EmpNo').Value := Number;
ParamByName('a_Date').Value := dtDate; //日期类型
ParamByName('a_Time').Value := dtTime; //日期类型
ParamByName('a_cID').Value := bClockID;
Prepare;
ExecSQL;
Close;
end;
Arr_dt=' + DateToStr(rzdatetimepicker1.date);
Arr_dt是日期类型
DateToStr(rzdatetimepicker1.date)是字符串
其实你第一次的sql语句不错,是参数传输错误。
rzdatetimepicker1.date是从哪里来的?类型对不对?
你可以在
parambyname('adt').asDate:=rzdatetimepicker1.date;
这句后加showmessage(parambyname('adt').asstring);
看看负之后的结果,也可以显示你的sql语句看看对不对
begin
with query1 do
begin
close;
sql.clear;
unprepare;
sql.add('select * from account');
sql.add(' where Arr_dt=:adt');//空一格
sql.add(' order by acct_num');//空一格
parambyname('adt').asDate:=rzdatetimepicker1.date;
prepare;
open;
end;
end
空格问题。
parambyname('adt').asdatetime:=rzdatetimepicker1.datatime;
open;
//try again
//order by 去之.
begin
Close;
SQL.Clear;
SQL.Add('select * from MyTable where My_DateField>=:date1 and MyDateField<=:Date2');
ParamByName('date1').AsDatetime:=date1.datetime;
ParamByName('date2').AsDatetime:=date2.datetime;
Open;
end;