我快疯了,上帝帮帮我,invalid use of word token:and number :1(0分)

  • 主题发起人 主题发起人 windfollower
  • 开始时间 开始时间
W

windfollower

Unregistered / Unconfirmed
GUEST, unregistred user!
我运行一下时间查询语句时,就会出现invalid use of word token:and number :1
sqldate:=' and gdate>='+''''+datetostr(dateedit1.date)+''''+' and date<='+datetostr(dateedit2.Date)+'''';
咋办,上帝们
 
gdate的上限处少了''''。
另外,通用的作法是:
你在执行sqldate之前,可以将sqldate的内容放到数据库的集成环境中去试运行,看是否
有误。
 
sqldate:=' and gdate>='+''''+datetostr(dateedit1.date)+''''+' and
date<='+''''+datetostr(dateedit2.Date)+'''';
 
access:
sqldate:=' and gdate>=#'+datetostr(dateedit1.date)+
'# and date<=#'+datetostr(dateedit2.Date)+'#';

sql:
sqldate:=' and gdate>='''+datetostr(dateedit1.date)+
''' and date<='''+datetostr(dateedit2.Date)+'''';
 
procedure Tsearch.Button1Click(Sender: TObject);
var
sqlstr,sqlname,sqldate,sqltyp:string;
begin
main.query1.close;
main.query1.sql.clear;
sqlstr:='select * from main ';

if edit1.text='' then
sqlname:=''
else sqlname:=' where '+' name like'+'''%'+edit1.Text+'%''';

if (dateedit1.text='') and (dateedit2.text='') then
sqldate:=''
else if (dateedit1.text='') and (dateedit2.text<>'') then
sqldate:=' and gdate<='+datetostr(dateedit2.date)+''''
else if (dateedit1.text<>'') and (dateedit2.text='') then
sqldate:=' and gdate>='+datetostr(dateedit1.date)+''''
else if (dateedit1.text<>'') and (dateedit2.text<>'') then
begin
if dateedit1.date>dateedit2.date then

showmessage('起始时间不能大于结束时间!')

else
sqldate:=' and gdate>='+''''+datetostr(dateedit1.date)+''''+' and date<='+''''+datetostr(dateedit2.Date)+'''';
end;

main.Query1.SQL.Text:=sqlstr+sqlname+sqldate;
main.Query1.Open;
close;
if main.Query1.recordcount=0 then
showmessage('没有查询到符合条件的数据.');
end;


以上便是我的查询,如上各位所说,还是出现原来的症状,还请各位找出原因,kiss u
 
1、对于日期类型的比较尽量使用转换语句转换成日期类型。
Oracle中为to_date、SQLServer中为Convert
2、对于调试,给你一个好的建议。使用系统的剪贴板。得到整个SQL语句以后,你就会看到一些问题了。
比如两个字段中间没有逗号以及字段错误等。直接使用剪贴板里面的东西拿到SQL分析器或者SQL PLus里面执行就OK了。
uses clipbrd;
main.Query1.SQL.Text:=sqlstr+sqlname+sqldate;
ClipBoard.AsText:=main.Query1.SQL.Text;
main.Query1.Open;
 
后退
顶部