请教日期字优的查询问题!(10分)

  • 主题发起人 主题发起人 stonelei
  • 开始时间 开始时间
S

stonelei

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠,我现在建了一个表“借款抵押物表.db“,在另一个窗口中建一个高级查询,其中用radiogroup1有0-8个用来分别选择各项查询项目,以下是代码,可以输入借款人、低押担保人等内容查询,
但输入日期查询时出错,请问代码是错在哪里?如何改正?或怎样编写?谢谢!
====================================================================================================================================
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
form1.Query1.SQL.Clear;
if radiogroup1.ItemIndex=0 then form1.Query1.SQL.Add('select * from "借款抵押物表.db" WHERE 借款人='''+Edit1.Text+'''');
if radiogroup1.ItemIndex=1 then form1.Query1.SQL.Add('select * from "借款抵押物表.db" WHERE 抵押担保人='''+Edit1.Text+'''');
if radiogroup1.ItemIndex=2 then form1.Query1.SQL.Add('select * from "借款抵押物表.db" WHERE 抵押物名称='''+Edit1.Text+'''');
if radiogroup1.ItemIndex=3 then form1.Query1.SQL.Add('select * from "借款抵押物表.db" WHERE 地址='''+Edit1.Text+'''');
if radiogroup1.ItemIndex=4 then form1.Query1.SQL.Add('select * from "借款抵押物表.db" WHERE 证号='''+Edit1.Text+'''');
if radiogroup1.ItemIndex=5 then form1.Query1.SQL.Add('select * from "借款抵押物表.db" WHERE 面积='''+Edit1.Text+'''');
if radiogroup1.ItemIndex=6 then form1.Query1.SQL.Add('select * from "借款抵押物表.db" WHERE 抵押登记日='''+datetostr(edit1.text)+'''');
if radiogroup1.ItemIndex=7 then form1.Query1.SQL.Add('select * from "借款抵押物表.db" WHERE 抵押到期日='''+datetostr(edit1.text)+'''');
if radiogroup1.ItemIndex=8 then form1.Query1.SQL.Add('select * from "借款抵押物表.db" WHERE 保险到期日='''+datetostr(edit1.text)+'''');
form1.Query1.Open;
edit1.Text:='';
end;
============================================================================================================================================
 
有可能日期的格式和数据库的不匹配
 
抵押登记日='''+datetostr(edit1.text)+''''
这句话出错
可以直接写成
"抵押登记日='''+edit1.text+''''
因为Tdatetime类型本身是double的类型
 
看看sql的书写格式
'''+Edit1.Text+''''
///////
"'+edit.text+'"
 
to riversoft
其实我开始时是这样写的"抵押登记日='''+edit1.text+'''',
但不知为什么就是出错才写成这样,但也不行呀?
 
问题能在再详细些吗?

1、比如是不是选择itemIndex 为6,7,8时报错
2、如果是的话,报什么错?SQL语法错?
3、如果是SQL语法错,那么你能否检查一下你录入Edit1.text的内容是否正确呢?
就是说错误有没有可能发生在DateToStr(Edit1.text)这句话,
而根本不是SQL有问题?
4、我觉得,SQL应该没有问题
 
这样写
format('WHERE 保险到期日=DateValue(''%s'')',
[FormatDateTime('mm''/''dd''/''yyyy', StrToDate(edit1.text))]);
 
edit1.text的值本来就是字符串型,你再用DateToStr当然出错
 
我刚刚在SQL2000上试了一下,下面两句都没有问题。
1、select * from table1 where date = '2002-01-01'
2、select * from table1 where date = '2002/01/01'
 
我觉的没有必要一般日期形式可以写成2002-2-9这样的格式比较安全
因为如果写成2/9/2002的格式这样会由于不同的系统设置出现问题
一般数据库会把字符转化进行匹配.
 
反过来试试,用StrToDate
 
1.表名和字段名用中文可不是什么好习惯,建议用拼音首拼(也不提倡用英文,因为不是每个人的
E文都很好<我就很差>)如:jkdywb.db(借款抵押物表) jkr(借款人),以便于后来人好维护
2.用参数试试
with Query1 do
begin
...
Case radiogroup1.ItemIndex of
1:...;
...
7:
begin
Close;
Sql.Clear;
SQL.Add('select * from "借款抵押物表.db" WHERE 抵押到期日=:v_date');
ParamByName('v_date').AsDate := strtodate(edit1.text);
Open;
end;
...
end; {end Case}
end;
 
这是我的例子
edit1.text的内容是'2002-01-01'
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from table1 where date = '''+edit1.Text+'''');
ADOQuery1.Open;
end;

通过。

D6+SQL2K
 
query不支持日期时间:如 2002-2-1 12:00:00
只支持日期:如 2002-2-1

我试过很多次,没办法。。。
 
把你的编程环境写清除才好回答如采用的什么数据库,D5,还是D6,ADO还是BDE,因为这些
会对代码有影响的,日期查询是比较头痛的,不同的环境下不一样。
 
同意wind2000的建议.
 
后退
顶部