0

一段时间以来,我一直在 Lazarus 上使用带有参数的 SQL 查询,但我被这个错误难住了。这似乎很基本,但我只是迷路了。

我有以下拉撒路帕斯卡代码:

   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)时报告运行时错误。错误是:

未找到参数 pp。

我有多个参数的查询,但没有问题。就这一个。我什至尝试重命名参数名称,但我得到了同样的错误。

如果我使用字符串文字代替参数或插入如下连接的字符串,它就可以正常工作。

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

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

4

2 回答 2

1

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

于 2013-11-10T18:02:05.983 回答
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;
于 2013-11-10T18:10:44.767 回答