DELPHI 7 SQL server语句问题

时间:2022-04-23 14:57:25
我写了如下语句:
但编绎运行后报错:
Project Project1.exe raised exception class EOleption with message 
'[Microsoft][ODBC SQL Server Driver][SQL Server]'t1'附近有语法错误


     var sqlstr,startD,endD: string ;

begin

try
begin

     startD := formatdatetime('yyyy-MM-dd',dtpstart.Date);
     endD := formatdatetime('yyyy-MM-dd',dtpend.Date);
     sqlstr := 'SELECT  FBillNo,t2.FNumber,t2.FModel,FQty,FHeadSelfJ0190,FCheckDate,FPlanFinishDate' +
       'from ICMO t1 left join T_ICItem t2 ON t2.FItemID = t1.FItemID ' +
       'WHERE t1.FCheckDate between ' + startD +' and ' + endD  ;


请问该怎么修改?

13 个解决方案

#1


sqlstr,一字不要超过255,换行间用sqlstr :=sqlstr+'................'

#2


 'WHERE t1.FCheckDate between ' 
这句错了,SQL的语句是从右到左开始编译执行的,,
这个t1还没定义呢,在where语句中

#3


提示 't1'附近有语法错误
检查 t1 有关系的三个地方,from ICMO t1 ,= t1.FItemID , t1.FCheckDate 

#4


     sqlstr := 'SELECT  FBillNo,t2.FNumber,t2.FModel,FQty,FHeadSelfJ0190,FCheckDate,FPlanFinishDate' +
       'from ICMO t1 left join T_ICItem t2 ON t2.FItemID = t1.FItemID ' +
       'WHERE ICMO.FCheckDate between ' + startD +' and ' + endD  ;

Where里的t1->ICMO就可以了

#5


引用 4 楼 delphiteacher 的回复:
sqlstr := 'SELECT FBillNo,t2.FNumber,t2.FModel,FQty,FHeadSelfJ0190,FCheckDate,FPlanFinishDate' +
  'from ICMO t1 left join T_ICItem t2 ON t2.FItemID = t1.FItemID ' +
  'WHERE ICMO.FCheckDate between……

改过来了还是不行啊
继续请教

#6


楼主接结SQL语句时要注意段与段之间留空格哦。
showmessage(SQL.text)就可以调试出你上面问题出在哪里了。

#7


不太清楚

#8


引用 6 楼 tgbd 的回复:
楼主接结SQL语句时要注意段与段之间留空格哦。
showmessage(SQL.text)就可以调试出你上面问题出在哪里了。

++++
LZ最好把你需要的SQL都先放到查询分析器里去试试,这样更容易找到错误。

#9


     startD := quotestr(formatdatetime('yyyy-MM-dd',dtpstart.Date));
     endD := quotestr(formatdatetime('yyyy-MM-dd',dtpend.Date));

#10


引用 6 楼 tgbd 的回复:
楼主接结SQL语句时要注意段与段之间留空格哦。
showmessage(SQL.text)就可以调试出你上面问题出在哪里了。



不好意思,刚刚有急事出来了,现在才回来,谢谢帮助我的人。
为感谢大家的热情帮助,不管最后解没解决,我会把分加到100分.聊表心意.
谢谢6楼以及8楼,确实有空格的问题,调整之后,我刚才showmessage(SQL.text)了一下,结果如下:

SELECT TOP 10 FBillNo,t2.FNumber,t2.FModel,FQty,FHeadSelfJ0190,FCheckDate,FPlanFinishDate 
       from ICMO t1 
       left join T_ICItem t2 
       ON t2.FItemID = t1.FItemID
       WHERE t1.FCheckDate between 2011-03-01 and 2011-04-05  \\这里日期怎么才能有单引号

点确定,然后弹出错误:
Project Project1.exe  raised exception class EListError with message 'List index of bounds(0)'.Process stopped.

请问这个怎么处理呢?

#11


不好意思,上面的list index of bounds(0),是个意外小错误,已经解决。

现在执行没有任何问题了,但是查不到数据,数据库是SQL SERVER
如楼上所未,在这个SQL查询语句中,日期没有单引号,结果查不到数据,这该怎么办呢?
原本正确的语句应该是:

SELECT TOP 10 FBillNo,t2.FNumber,t2.FModel,FQty,FHeadSelfJ0190,FCheckDate,FPlanFinishDate 
       from ICMO t1 
       left join T_ICItem t2 
       ON t2.FItemID = t1.FItemID
       WHERE t1.FCheckDate between ‘2011-03-01’ and ‘2011-04-05’ \\这个才是正确的
        //这个在SQL SERVER 2005中能正常执行,并显示预期结果

可是我写出来的SQL语句只能显示是:

SELECT TOP 10 FBillNo,t2.FNumber,t2.FModel,FQty,FHeadSelfJ0190,FCheckDate,FPlanFinishDate 
       from ICMO t1 
       left join T_ICItem t2 
       ON t2.FItemID = t1.FItemID
      WHERE t1.FCheckDate between 2011-03-01 and 2011-04-05 \\这里日期怎么才能有单引号呢
      //这个语句因为日期没有单引号,就查不到记录

#12


使用quotedstr处理一下,就有单引号了
或者 自己直接加也一样

#13


引用 12 楼 sz_haitao 的回复:
使用quotedstr处理一下,就有单引号了
或者 自己直接加也一样

太感谢您了,因为你在9楼提供的代码中间quotestr少了一个字母d,所以没执行成功,
谢谢你再次来回答问题

谢谢所有回答问题的人,问题解决了,谢谢你们
立刻加分结帖
如果可以,还请你们再帮我看看这一题:
http://topic.csdn.net/u/20110515/13/56762441-9a48-4de0-9123-b5082fb991a8.html

#1


sqlstr,一字不要超过255,换行间用sqlstr :=sqlstr+'................'

#2


 'WHERE t1.FCheckDate between ' 
这句错了,SQL的语句是从右到左开始编译执行的,,
这个t1还没定义呢,在where语句中

#3


提示 't1'附近有语法错误
检查 t1 有关系的三个地方,from ICMO t1 ,= t1.FItemID , t1.FCheckDate 

#4


     sqlstr := 'SELECT  FBillNo,t2.FNumber,t2.FModel,FQty,FHeadSelfJ0190,FCheckDate,FPlanFinishDate' +
       'from ICMO t1 left join T_ICItem t2 ON t2.FItemID = t1.FItemID ' +
       'WHERE ICMO.FCheckDate between ' + startD +' and ' + endD  ;

Where里的t1->ICMO就可以了

#5


引用 4 楼 delphiteacher 的回复:
sqlstr := 'SELECT FBillNo,t2.FNumber,t2.FModel,FQty,FHeadSelfJ0190,FCheckDate,FPlanFinishDate' +
  'from ICMO t1 left join T_ICItem t2 ON t2.FItemID = t1.FItemID ' +
  'WHERE ICMO.FCheckDate between……

改过来了还是不行啊
继续请教

#6


楼主接结SQL语句时要注意段与段之间留空格哦。
showmessage(SQL.text)就可以调试出你上面问题出在哪里了。

#7


不太清楚

#8


引用 6 楼 tgbd 的回复:
楼主接结SQL语句时要注意段与段之间留空格哦。
showmessage(SQL.text)就可以调试出你上面问题出在哪里了。

++++
LZ最好把你需要的SQL都先放到查询分析器里去试试,这样更容易找到错误。

#9


     startD := quotestr(formatdatetime('yyyy-MM-dd',dtpstart.Date));
     endD := quotestr(formatdatetime('yyyy-MM-dd',dtpend.Date));

#10


引用 6 楼 tgbd 的回复:
楼主接结SQL语句时要注意段与段之间留空格哦。
showmessage(SQL.text)就可以调试出你上面问题出在哪里了。



不好意思,刚刚有急事出来了,现在才回来,谢谢帮助我的人。
为感谢大家的热情帮助,不管最后解没解决,我会把分加到100分.聊表心意.
谢谢6楼以及8楼,确实有空格的问题,调整之后,我刚才showmessage(SQL.text)了一下,结果如下:

SELECT TOP 10 FBillNo,t2.FNumber,t2.FModel,FQty,FHeadSelfJ0190,FCheckDate,FPlanFinishDate 
       from ICMO t1 
       left join T_ICItem t2 
       ON t2.FItemID = t1.FItemID
       WHERE t1.FCheckDate between 2011-03-01 and 2011-04-05  \\这里日期怎么才能有单引号

点确定,然后弹出错误:
Project Project1.exe  raised exception class EListError with message 'List index of bounds(0)'.Process stopped.

请问这个怎么处理呢?

#11


不好意思,上面的list index of bounds(0),是个意外小错误,已经解决。

现在执行没有任何问题了,但是查不到数据,数据库是SQL SERVER
如楼上所未,在这个SQL查询语句中,日期没有单引号,结果查不到数据,这该怎么办呢?
原本正确的语句应该是:

SELECT TOP 10 FBillNo,t2.FNumber,t2.FModel,FQty,FHeadSelfJ0190,FCheckDate,FPlanFinishDate 
       from ICMO t1 
       left join T_ICItem t2 
       ON t2.FItemID = t1.FItemID
       WHERE t1.FCheckDate between ‘2011-03-01’ and ‘2011-04-05’ \\这个才是正确的
        //这个在SQL SERVER 2005中能正常执行,并显示预期结果

可是我写出来的SQL语句只能显示是:

SELECT TOP 10 FBillNo,t2.FNumber,t2.FModel,FQty,FHeadSelfJ0190,FCheckDate,FPlanFinishDate 
       from ICMO t1 
       left join T_ICItem t2 
       ON t2.FItemID = t1.FItemID
      WHERE t1.FCheckDate between 2011-03-01 and 2011-04-05 \\这里日期怎么才能有单引号呢
      //这个语句因为日期没有单引号,就查不到记录

#12


使用quotedstr处理一下,就有单引号了
或者 自己直接加也一样

#13


引用 12 楼 sz_haitao 的回复:
使用quotedstr处理一下,就有单引号了
或者 自己直接加也一样

太感谢您了,因为你在9楼提供的代码中间quotestr少了一个字母d,所以没执行成功,
谢谢你再次来回答问题

谢谢所有回答问题的人,问题解决了,谢谢你们
立刻加分结帖
如果可以,还请你们再帮我看看这一题:
http://topic.csdn.net/u/20110515/13/56762441-9a48-4de0-9123-b5082fb991a8.html