TQuery.parambyname('myname')中无法使用 TDATE 类型的问题(50分)

  • 主题发起人 主题发起人 zkq001
  • 开始时间 开始时间
Z

zkq001

Unregistered / Unconfirmed
GUEST, unregistred user!
[:D]我有个表s(s#(string),name(string),date(date))
form1中有控件:s==> Query1:TQuery ==>Datasource1:TDatasource ==>Grid1:TDBGrid
listbox1:Tlistbox(item全为strtodate(date:TData)方式得到),
Query1中的 SQL 为:' select * from s where s.date=:date1 ; '
有这么一个事件:
procedure TForm1.Button1Click(Sender: TObject);
var listitem:string;
begin
listitem:=listbox1.items[0];//为了方便只用此一条说明
query1.close;
//params setting;
Query1.Params[0].AsDate := StrToDate(listitem);
//open ;
query1.open;
end;
但运行时它老出' 无效的keyword :date1=?'的提示框。我试了好多方法都解决不了
恳请大侠给小弟指条出路,万分感激。
 
procedure TForm1.Button1Click(Sender: TObject);
var listitem:string;
begin
listitem:=listbox1.items[0];//为了方便只用此一条说明
query1.close;
//params setting;
Query1.Params[0].AsString := listitem;//但listitem一定要为系统日期格式,如:‘2002-07-13’
//open ;
query1.open;
end;
end;
 
谢谢kingdeezj,我试过了,item中我就是用的标准格式的时间转换的,不会有差错,问题好像不在这儿
 
我观察过。
用StrToDate('2002-07-12')转换过来的值是形如‘37774’。
对了,你用的是什么数据库呢?
 
Procedure TForm1.Button1Click(Sender: TObject);
var
sqlstr:string;
begin
sqlstr:='select * from clients where birth_date=:d1';
query1.Active :=false;
query1.ParamByName('d1').AsDate :=strtodate(edit1.Text);
query1.Open;
end;
数据库用的是delphi自带的DBDEMOS——>clients 表(其它数据库这里应该一样)。
结果没有问题!
**********************************************************************
分析:可能原因数据库中的日期字段可能含有时间部分,打开数据库看看。
----------------------------------------------------------------------
 
谢谢desertsmoke的提醒,问题果然在数据库中,我太大意了,用date作字段名,
怪不得提示 'date=? ',我现在明白这是会么意思了。也谢谢kingdeezj给我的帮助,我
打算给desertsmoker:40,kingdeezj:10;作为感激,你们不会嫌少吧?
 
我忘了只能加50分,只好用40+10了
 
后退
顶部