我承认我没有直接在 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;
编辑: 最后我找到了它不起作用的原因。我怀疑有故障的驱动程序等,但这是一个简单的愚蠢错误。我连接到一个小型测试数据库而不是更大的数据库。现在它适用于 3 个组件和参数。抱歉耽误您的时间:)
SQLConnection: TSQLConnection;
qryTopExceptions: TSQLDataSet;
dsTopExceptions: TDataSource;
问候