上面这句变成SQL语句应是:where 'date'='03/05/2001'对吗?}
应为
where date='03/05/2001' datamodule1.Query1.SQL.Add('where date '''+combobox2.text+'''edit1.text''');
要注意空格!
应为
where date='03/05/2001' datamodule1.Query1.SQL.Add('where date '''+combobox2.text+'''edit1.text''');
要注意空格!
datamodule1.Query1.SQL.Add('where '+'''date'''+combobox2.text+'''edit1.text''');
如果DATE是字段的名字,就不能加引号,加了引号就表示是判断字符串“DATE”和日期字串是否相等了,这是一个永远也不会满足的条件,当然什么也查不出来。
至于日期格式,PARADOX好象就那样,你得自己进行转换
应为
('where date '''+combobox2.text+''''+edit1.text+'''');
token:date
line number:2
可是如果单独执行下面这句却可以:
SELECT Szb."Date", Doc, Sr, Zc, Jsr
FROM "szb.db" Szb
WHERE Szb."Date" = '03/05/2001'
这里面的date是带“号的,我就是弄不明白这点。
datamodule1.Query1.SQL.Add('where "date" '+combobox2.text+' "'+edit1.text+'"');
另外可用ShowMessage来检察语句是否正确:
ShowMessage(datamodule1.Query1.SQL.Text);
FROM "szb.db" Szb
WHERE Szb."Date" = '03/05/2001'
这一句中,由于Date是SQL 的关键字,所以要加引号,而日期常量的顺序是'mm/dd/yyyy'(引号不能少)。正因为paradox 的日期有问题,我奉劝你还是将日期型转为字符型比较好。
begin
datamodule1.Query1.Close;
with datamodule1.Query1.sql do
begin
clear;
add('select * from szb.db');
add(' where datefieldname=:date1');
end;
datamodule1.Query1.parambyname('date1').asdatetime:=strtodatetime(edit1.text);
//如果这一步出错,则说明在edit1内输入的日期格式不对.(yyyy-mm-dd)
datamodule1.DataSource1.DataSet :=datamodule1.query1;
datamodule1.Query1.open;
end;
在上段代码中,看起来最终的SQL语句是一样的,,所不同的是日期型的字段名没加“号,而且=后面是日期型的数据,可以正确执行,输入2001-03-05或者01-03-05或得01-3-5都可以查到,为什么有这样的结果,用SQL编辑器生的SQL语句是
SELECT Szb."Date", Doc, Sr, Zc, Jsr
FROM "szb.db" Szb
WHERE Szb."Date" = '03/05/2001' 呀?
而前段代码中的SQL语句我理解为where date=strtodate(edit1.text);
这究竟是怎么回事?
query1.sql.add('select * from test.db where "date"'+combobox1.text+'"'+edit1.text+'"');问题的关键是由于DATE类型,要用双引号引起来。
对于输入框,常采用strtodate()来完成数据的转换。