Lazarus Pascal:未找到参数pp

时间:2013-11-10 12:39:55

标签: sql postgresql lazarus sql-parametrized-query

我一直在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是一个日期控件。

也许我在监督某些事情。任何的想法? 谢谢!

2 个答案:

答案 0 :(得分:1)

查询解析器可能会搜索:pp,因此冒号应该在引号内,如“:pp”,而不是:“pp”

答案 1 :(得分:1)

从两个参数周围删除引号。使用AsDateAsString会为您正确格式化它们。

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;