私は、Delphi で直接 SQL を使用した経験がないことを認めます。しかし、私は今小さなプロジェクトで試しました。このSQLを実行します
SELECT [Type], [Sum] = Count(*)
FROM exceptionrow
WHERE LogDate >= :FromDate
AND LOGDATE <= :ToDate
GROUP BY [type]
ORDER BY [sum] DESC
FromDate と ToDate は、TDateTime としてのパラメーターです。実行するイベントは次のとおりです。
procedure TLogsStats.CollectTopExceptions(aFromDate, aToDate: TDateTime);
begin
qryTopExceptions.ParamByName('FromDate').AsDate := aFromDate;
qryTopExceptions.ParamByName('ToDate').AsDate := aToDate;
cdsTopExceptions.Close;
cdsTopExceptions.Open;
end;
DBGrid で結果が得られますが、静的な日付を使用して SQL Studio で直接実行した場合とは異なります。行が少なすぎます。このプロジェクトからセットアップをコピーしました。SQLクエリを実行するだけで5つのコンポーネントが必要なのは奇妙だと思います。画像を参照してください。
単純化できますか?これが私のコンポーネントの宣言です。
SQLConnection: TSQLConnection;
qryTopExceptions: TSQLDataSet;
dspTopExceptions: TDataSetProvider;
cdsTopExceptions: TClientDataSet;
dsTopExceptions: TDataSource;
EDIT: 最後に、うまくいかなかった理由を見つけました。ドライバーなどの不具合が疑われますが、単純なばかげたエラーでした。大きなデータベースではなく、小さなテスト データベースに接続していました。これで、3 つのコンポーネントとパラメーターで問題なく動作します。お時間をいただき申し訳ありません:)
SQLConnection: TSQLConnection;
qryTopExceptions: TSQLDataSet;
dsTopExceptions: TDataSource;
よろしく