咱也不知道为何 只知道用参数形式不会出错 sqlstr:='select * from tname where ttime:=d';
看看这段代码或许会给你些帮助(包含两种方法): procedure TSInsurBillForm.QueryBitBtnClick(Sender: TObject); var std1,std2:string; begin with DataM.InpBillADOQ do begin close; sql.Clear; sql.Add('select a.item_name,a.item_spec,a.amount,a.units,a.costs/a.amount,a.costs, '); sql.Add('b.drug_insur_type1||b.pay_pay1,a.billing_date_time '); sql.Add('from inp_bill_detail a,price_vs_insur b '); sql.Add('where a.item_code=b.item_code '); sql.Add('and a.patient_id='''+trim(IdEdit.Text)+''' '); sql.Add('and trunc(a.billing_date_time) >=:std1 '); sql.add('and trunc(a.billing_date_time) <=:std2 '); sql.Add('order by a.billing_date_time '); Parameters.ParamValues['std1']:=strToDateTime(DateToStr(BeginDateTimeP.Date)+' 00:00:00'); Parameters.ParamValues['std2']:=StrToDateTime(DateToStr(EndDateTimeP.Date)+' 23:59:59'); prepared; open; ////////////////////////////////////////////////////////////// DataM.SumADOQ.Close; DataM.SumADOQ.SQL.Clear; std1 := datetostr(BeginDateTimeP.Date)+' 00:00:00' ; std2 := datetostr(EndDateTimeP.Date)+' 23:59:59'; DataM.SumADOQ.SQL.Add('select sum(costs) from inp_bill_detail '); DataM.SumADOQ.sql.Add('where patient_id='+''''+trim(IdEdit.Text)+''''); DataM.SumADOQ.sql.Add(' and billing_date_time>='+ 'to_date('+''''+std1+''''+','+''''+'yyyy-mm-dd hh24:mi:ss'+''''+')'); DataM.SumADOQ.sql.add(' and billing_date_time<='+ 'to_date('+''''+std2+''''+','+''''+'yyyy-mm-dd hh24:mi:ss'+''''+')'); DataM.SumADOQ.open; Label10.Caption:=DataM.SumADOQ.Fields[0].AsString; DataM.SumADOQ.Close; ////////////////////////////////////////////////////////////// if recordcount<1 then application.MessageBox('该病人在此时间段内没有发生费用!','系统提示',32); exit; close; end; end;
with ADOQuery1 do begin Close; SQL.Text := 'select * from asd where aa =:aa '; Parameters.ParamByName('aa').Value := StrToDateTime('2004-8-24 16:38:10'); Open; end;
只知道用参数形式不会出错
sqlstr:='select * from tname where ttime:=d';
procedure TSInsurBillForm.QueryBitBtnClick(Sender: TObject);
var std1,std2:string;
begin
with DataM.InpBillADOQ do
begin
close;
sql.Clear;
sql.Add('select a.item_name,a.item_spec,a.amount,a.units,a.costs/a.amount,a.costs, ');
sql.Add('b.drug_insur_type1||b.pay_pay1,a.billing_date_time ');
sql.Add('from inp_bill_detail a,price_vs_insur b ');
sql.Add('where a.item_code=b.item_code ');
sql.Add('and a.patient_id='''+trim(IdEdit.Text)+''' ');
sql.Add('and trunc(a.billing_date_time) >=:std1 ');
sql.add('and trunc(a.billing_date_time) <=:std2 ');
sql.Add('order by a.billing_date_time ');
Parameters.ParamValues['std1']:=strToDateTime(DateToStr(BeginDateTimeP.Date)+' 00:00:00');
Parameters.ParamValues['std2']:=StrToDateTime(DateToStr(EndDateTimeP.Date)+' 23:59:59');
prepared;
open;
//////////////////////////////////////////////////////////////
DataM.SumADOQ.Close;
DataM.SumADOQ.SQL.Clear;
std1 := datetostr(BeginDateTimeP.Date)+' 00:00:00' ;
std2 := datetostr(EndDateTimeP.Date)+' 23:59:59';
DataM.SumADOQ.SQL.Add('select sum(costs) from inp_bill_detail ');
DataM.SumADOQ.sql.Add('where patient_id='+''''+trim(IdEdit.Text)+'''');
DataM.SumADOQ.sql.Add(' and billing_date_time>='+ 'to_date('+''''+std1+''''+','+''''+'yyyy-mm-dd hh24:mi:ss'+''''+')');
DataM.SumADOQ.sql.add(' and billing_date_time<='+ 'to_date('+''''+std2+''''+','+''''+'yyyy-mm-dd hh24:mi:ss'+''''+')');
DataM.SumADOQ.open;
Label10.Caption:=DataM.SumADOQ.Fields[0].AsString;
DataM.SumADOQ.Close;
//////////////////////////////////////////////////////////////
if recordcount<1 then
application.MessageBox('该病人在此时间段内没有发生费用!','系统提示',32);
exit;
close;
end;
end;
begin
Close;
SQL.Text := 'select * from asd where aa =:aa ';
Parameters.ParamByName('aa').Value := StrToDateTime('2004-8-24 16:38:10');
Open;
end;
#2004-01-01#正确 #2004-01-01 10:20:20#就错了!为什么呢?该怎么写?
================================
#2004-01-01#这个是针对日期的
对于 #2004-01-01 10:20:20# 用'2004-01-01 10:20:20'才行