但编绎运行后报错:
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语句中
这句错了,SQL的语句是从右到左开始编译执行的,,
这个t1还没定义呢,在where语句中
#3
提示 't1'附近有语法错误
检查 t1 有关系的三个地方,from ICMO t1 ,= t1.FItemID , t1.FCheckDate
检查 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就可以了
'from ICMO t1 left join T_ICItem t2 ON t2.FItemID = t1.FItemID ' +
'WHERE ICMO.FCheckDate between ' + startD +' and ' + endD ;
Where里的t1->ICMO就可以了
#5
改过来了还是不行啊
继续请教
#6
楼主接结SQL语句时要注意段与段之间留空格哦。
showmessage(SQL.text)就可以调试出你上面问题出在哪里了。
showmessage(SQL.text)就可以调试出你上面问题出在哪里了。
#7
不太清楚
#8
++++
LZ最好把你需要的SQL都先放到查询分析器里去试试,这样更容易找到错误。
#9
startD := quotestr(formatdatetime('yyyy-MM-dd',dtpstart.Date));
endD := quotestr(formatdatetime('yyyy-MM-dd',dtpend.Date));
#10
不好意思,刚刚有急事出来了,现在才回来,谢谢帮助我的人。
为感谢大家的热情帮助,不管最后解没解决,我会把分加到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查询语句中,日期没有单引号,结果查不到数据,这该怎么办呢?
原本正确的语句应该是:
可是我写出来的SQL语句只能显示是:
现在执行没有任何问题了,但是查不到数据,数据库是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
太感谢您了,因为你在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语句中
这句错了,SQL的语句是从右到左开始编译执行的,,
这个t1还没定义呢,在where语句中
#3
提示 't1'附近有语法错误
检查 t1 有关系的三个地方,from ICMO t1 ,= t1.FItemID , t1.FCheckDate
检查 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就可以了
'from ICMO t1 left join T_ICItem t2 ON t2.FItemID = t1.FItemID ' +
'WHERE ICMO.FCheckDate between ' + startD +' and ' + endD ;
Where里的t1->ICMO就可以了
#5
改过来了还是不行啊
继续请教
#6
楼主接结SQL语句时要注意段与段之间留空格哦。
showmessage(SQL.text)就可以调试出你上面问题出在哪里了。
showmessage(SQL.text)就可以调试出你上面问题出在哪里了。
#7
不太清楚
#8
++++
LZ最好把你需要的SQL都先放到查询分析器里去试试,这样更容易找到错误。
#9
startD := quotestr(formatdatetime('yyyy-MM-dd',dtpstart.Date));
endD := quotestr(formatdatetime('yyyy-MM-dd',dtpend.Date));
#10
不好意思,刚刚有急事出来了,现在才回来,谢谢帮助我的人。
为感谢大家的热情帮助,不管最后解没解决,我会把分加到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查询语句中,日期没有单引号,结果查不到数据,这该怎么办呢?
原本正确的语句应该是:
可是我写出来的SQL语句只能显示是:
现在执行没有任何问题了,但是查不到数据,数据库是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
太感谢您了,因为你在9楼提供的代码中间quotestr少了一个字母d,所以没执行成功,
谢谢你再次来回答问题
谢谢所有回答问题的人,问题解决了,谢谢你们
立刻加分结帖
如果可以,还请你们再帮我看看这一题:
http://topic.csdn.net/u/20110515/13/56762441-9a48-4de0-9123-b5082fb991a8.html