[求助]搜索日期字段的SQL语句(30分)

M

mzcih

Unregistered / Unconfirmed
GUEST, unregistred user!
Select * From ABC Where RegDate >= '''+MaskEdit1.Text+''' And RegDate <= '''+MaskEdit2.Text+'''';

实际执行时出错,提示:
标准表达式中数据类型师法匹配

看了网上的文章说是系统日期格式设置问题,再改为:

Select * From ABC Where RegDate >= '''+StrToDate(MaskEdit1.Text)+''' And RegDate <= '''+StrToDate(MaskEdit2.Text+'''';

也是一样的提示,莫名奇妙.

ACCESS的字段属性为日期型,格式为"YYYY-MM-DD&quot;,输入的值为"2006-01-01",我的用的是Delphi 7 .

请高手赐教,到底是什么原因造成的,要如何解决.一句搜索日期的SQL语句也弄得太复杂了吧!
 
L

liuchong

Unregistered / Unconfirmed
GUEST, unregistred user!
Select * From ABC Where RegDate BETWEEN (#2000-1-1#) AND (#2006-1-1#)
 
M

mzcih

Unregistered / Unconfirmed
GUEST, unregistred user!
要这么写才行吗?我觉得我写的那句应该不会有太大问题.应该可以解决的.
 

雾锁长河

Unregistered / Unconfirmed
GUEST, unregistred user!
使用参数不会出错
select * from ABC where RegDate between :startdate and :enddate;
params.parambyname('startdate').asdate:=strtodate(maskedit1.text);
params.parambyname('enddate').asdate:=strtodate(maskedit2.text);
因为数据表字段是日期型,你用字符串与其匹配,当然出错。
我觉得最好的办法就是使用参数
 
M

mzcih

Unregistered / Unconfirmed
GUEST, unregistred user!
能否从我那句的基础上改呢?应该行得通的呀!用参数有点复杂.
 
L

liuchong

Unregistered / Unconfirmed
GUEST, unregistred user!
已经告诉你了
Access中日期字段两边要加“#”
 
M

mzcih

Unregistered / Unconfirmed
GUEST, unregistred user!
我加了试,但同样不行呀!
 
L

liuchong

Unregistered / Unconfirmed
GUEST, unregistred user!
Select * From ABC Where RegDate (BETWEEN (#2000-1-1#) AND (#2006-1-1#))
 
M

mzcih

Unregistered / Unconfirmed
GUEST, unregistred user!
Select * From ABC Where RegDate >= '#''+MaskEdit1.Text+''#' And RegDate <= '#''+MaskEdit2.Text+'''#';

不行.
 
H

hityou

Unregistered / Unconfirmed
GUEST, unregistred user!
你把日期的单引号去掉换成#就行了.
 
M

mzcih

Unregistered / Unconfirmed
GUEST, unregistred user!
那要怎么写呀!能将此句改改吗?

Select * From ABC Where RegDate >= '#''+MaskEdit1.Text+''#' And RegDate <= '#''+MaskEdit2.Text+'''#';

好让我明白.
 
L

liuchong

Unregistered / Unconfirmed
GUEST, unregistred user!
要用半角的“#”不要用全角的
 
L

liuchong

Unregistered / Unconfirmed
GUEST, unregistred user!
用“#”了就别用引号了
 
T

Toysun

Unregistered / Unconfirmed
GUEST, unregistred user!
还有个可能是strtodate时自动加上了时间类似与00:00:00
&quot;:&quot;会被认为是参数标识
 
L

liuchong

Unregistered / Unconfirmed
GUEST, unregistred user!
......
SQL.Add('FROM ABC WHERE');
SQL.Add(Format('(RegDate BETWEEN #%s# AND #%s#)',[FormatDateTime('yyyy-mm-dd',DT1.Date),FormatDateTime('yyyy-mm-dd',DT2.Date)]));
 
B

boy2002cn

Unregistered / Unconfirmed
GUEST, unregistred user!
CONST
SQLTEXT=Select * From ABC Where RegDate (BETWEEN (#%s#) AND (#%s#))';
begin
with XXX do
begin
SQl.text:=format(SQLTEXT,[MaskEdit1.Text,MaskEdit2.Text]);
open;
end;
end;
OK?
 
D

dongliang110

Unregistered / Unconfirmed
GUEST, unregistred user!
你把这个sql串取出来在调试器里执行一下看看哪出错了,设试好了再按正确的写不就行了
 
M

mzcih

Unregistered / Unconfirmed
GUEST, unregistred user!
实际我是用半角的"#"号的.我再试试看.
 

网中戏

Unregistered / Unconfirmed
GUEST, unregistred user!
Select * From ABC Where RegDate
[red]between[/red] '''+MaskEdit1.Text+'' and ''+MaskEdit2.Text+''''

//MaskEdit1.Text和MaskEdit1.Text的格式 2006/05/26
 
M

mzcih

Unregistered / Unconfirmed
GUEST, unregistred user!
不行,以上的语句均测试失败.请大家继续关注!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
392
import
I
顶部