0

しばらくの間、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 を使用) が実行されると、プログラムは実行時エラーを報告します。エラーは次のとおりです。

パラメータ 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

両方のパラメーターを囲む引用符を削除します。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 に答える
1

おそらくクエリ パーサーは :pp を検索するため、コロンは :"pp" ではなく ":pp" のように引用符で囲む必要があります。

于 2013-11-10T18:02:05.983 に答える