一个表中有一字段purchase_date,是日期/时间类,xxxx-xx-xx格式,我用如下程序查询,会说变量类型不匹配。
unit Unit_Outgo_Query;...
implementation
uses Unit_Main, Unit_Outgo;...var
i,Min,Max: Integer;
Query_Date,Sql:string;
begin
Query_Date:=Form_Outgo.Outgo_Query_Year+'-'+Form_Outgo.Outgo_Query_Month;
ADOQuery1.close;
ADOQuery1.SQL.Clear;
Sql:='select * from Outgo_Detail where purchase_date like'+Query_Date+'order by id';
ADOQuery1.SQL.Text:=Sql;
ADOQuery1.Open;
ADOQuery1.Active:=True;
StringGrid1.Cells[0,0]:='ID';
StringGrid1.Cells[1,0]:='购买日期';
If ADOQuery1.RecordCount>0 then
begin
ADOQuery1.First;
Min := 1;
Max := ADOQuery1.RecordCount;
ADOQuery1.First;
for i := Min to Max do
 begin
  StringGrid1.Cells[0,i]:=ADOQuery1ID.AsString;
  StringGrid1.Cells[1,i]:=ADOQuery1purchase_date.AsString;
  ADOQuery1.Next;
 end;
end;
end;
不知道这样关于时间或不是string类型的查询怎么写?Form_Outgo.Outgo_Query_Year是另外一个Form的输入string变量,在这里也会出错,不能得到值,为什么呢?
unit Unit_Outgo;...public
  Outgo_Query_Year,Outgo_Query_Month:string;
...implementation
uses Unit_Main, Unit_Outgo_Query;...请问1、时间的查询怎么解决?2、FORM之间的变量值传递在哪里出错了?

解决方案 »

  1.   

    1、日期字段不要使用LIKE关键字查询,因为日期型本质上是以浮点型保存
    2、通过日期范围查询,例如你的是查询当月的记录,完全可以用
    Sql:='select * from Outgo_Detail where year(purchase_date)='+Form_Outgo.Outgo_Query_Year+' and month(purchase_date)=' +Form_Outgo.Outgo_Query_Month+'order by id'
    代替3、后面的没有细看......
      

  2.   

    将这条语句:Sql:='select * from Outgo_Detail where purchase_date like'+Query_Date+'order by id'写成这样:
    ……+''''+query_date+''''+……试试看如何