我一直在Lazarus上使用带有参数的SQL查询已经有一段时间了,但是我对这个错误很难过。这似乎很基本,但我只是输了。
我有以下Lazarus Pascal代码:
strSQL:= 'Select "fCo", "fcFarmID", "fcFlockCode", ' +
'"fcWeekEnding","fcAge", ' +
'(:"pDate" - "fcWeekEnding")/7 as "AgeWeeks" ' +
'From (select "fCo", "FarmID", "FarmName" from "tblFarms" Where "fCo" = :"pp") as f Left Join "tblFlockCodes" ' +
'On "FarmID" = "fcFarmID" ';
dbQuery_FlockCodes.SQL.Text:= strSQL;
dbQuery_FlockCodes.Params.ParamByName('pDate').AsDate := dtWeekEndingDate.Date;
dbQuery_FlockCodes.Params.ParamByName('pp').AsString:= lstCo.Text;
程序在运行最后一行(带参数pp)时报告运行时错误。错误是:
找不到Paramater。
我有多个参数的查询,但没有问题。就是这个。我甚至尝试重命名参数名称,但我得到了同样的错误。
如果我使用字符串文字代替参数或插入如下所示的连接字符串,它就可以正常工作。
strSQL:= 'Select "fCo", "fcFarmID", "fcFlockCode", ' +
'"fcWeekEnding","fcAge", ' +
'(:"pDate" - "fcWeekEnding")/7 as "AgeWeeks" ' +
'From (select "fCo", "FarmID", "FarmName" from "tblFarms" Where "fCo" = ' + QuotedStr(lstCo.Text) + ' ) as f Left Join "tblFlockCodes" ' +
在上面的最后一个例子中,lstCo是一个下拉列表框。 在整个代码中,dtWeekEndingDate是一个日期控件。
也许我在监督某些事情。任何的想法? 谢谢!
答案 0 :(得分:1)
查询解析器可能会搜索:pp,因此冒号应该在引号内,如“:pp”,而不是:“pp”
答案 1 :(得分:1)
从两个参数周围删除引号。使用AsDate
和AsString
会为您正确格式化它们。
strSQL:= 'Select "fCo", "fcFarmID", "fcFlockCode", ' +
'"fcWeekEnding","fcAge", ' +
'(:pDate - "fcWeekEnding")/7 as "AgeWeeks" ' +
'From (select "fCo", "FarmID", "FarmName" from "tblFarms" Where "fCo" = :pp) as f Left Join "tblFlockCodes" ' +
'On "FarmID" = "fcFarmID" ';
dbQuery_FlockCodes.SQL.Text:= strSQL;
dbQuery_FlockCodes.Params.ParamByName('pDate').AsDate := dtWeekEndingDate.Date;
dbQuery_FlockCodes.Params.ParamByName('pp').AsString:= lstCo.Text;