Rol*_*son -3 sql sql-server delphi delphi-2007
我承认我没有直接在Delphi中使用SQL的经验.但我现在尝试了一个小项目.它执行这个SQL
SELECT [Type], [Sum] = Count(*)
FROM exceptionrow
WHERE LogDate >= :FromDate
AND LOGDATE <= :ToDate
GROUP BY [type]
ORDER BY [sum] DESC
Run Code Online (Sandbox Code Playgroud)
其中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;
Run Code Online (Sandbox Code Playgroud)
我在DBGrid中获得结果,但与在具有静态日期的SQL Studio中直接运行时不一样.行太少了.我复制了这个项目的设置.我认为只需运行一个SQL查询就需要5个组件,这很奇怪.见图.

可以简化吗?这是我对组件的声明.
SQLConnection: TSQLConnection;
qryTopExceptions: TSQLDataSet;
dspTopExceptions: TDataSetProvider;
cdsTopExceptions: TClientDataSet;
dsTopExceptions: TDataSource;
Run Code Online (Sandbox Code Playgroud)
编辑: 最后我发现它不起作用的原因.我怀疑有错误的司机等但这是一个简单的愚蠢错误.我连接到一个小型测试数据库而不是更大的数据库.现在它可以正常使用3个组件和参数.抱歉你的时间:)
SQLConnection: TSQLConnection;
qryTopExceptions: TSQLDataSet;
dsTopExceptions: TDataSource;
Run Code Online (Sandbox Code Playgroud)
问候
从Delphi对数据库运行查询通常涉及两个组件:
某些数据层允许您直接使用具有查询功能的组件而无需显式连接组件,但始终在后台创建连接组件.其中一个是ADO.
因此,如果您使用ADO,您只需TADOQuery在Form/DataModule中放入一个并对受支持的数据库(例如SQL Server)执行select(或任何其他)查询.
为了做到这一点,你设置了ConnectionString属性ADOQuery和SQL属性,然后你Open的查询和你的数据就在那里.
数据访问
您还可以选择不同的数据访问.有些支持与多个数据库的连接,如DBGo(ADO)和DBExpress(DBX),还有其他支持仅与一个数据库的连接,如Interbase Express(IBX)和Direct Oracle Access(DOA)等.
如您所见,可用的不同选项为您提供了一组不同的功能和独特的特性.
那么,为什么5个组件呢?
好吧,你可能正在寻找其他人写的应用程序,或者按照教程.
使用这些组件是因为它们添加了更高级和更复杂的数据访问功能.
TClientDataSet/TDataSetProvider:TClientDataSet允许您在完全可导航的数据集中拥有数据的内存中副本,这也可以与数据库断开连接,甚至可以存储和从磁盘检索数据以及修改( delta),然后应用这些更改(甚至几天或几个月后).
您还可以对数据进行排序,创建内存中索引,计算聚合等.
TDataSetProvider是源DataSet(例如TSQLQuery)和TClientDataSet之间的粘合剂,使您能够连接两者而无需任何编码,从源数据集中提取数据,还可以在其中应用修改的增量.晚点.
如果您想了解更多有关TClientDataSets和TDataSetProviders的信息,请查看Cary Jensen撰写的ClientDataSets一书.
TDataSource:这是Delphi数据库架构的一部分,它允许您使用数据感知组件,如TDBEdit,TDBGrid,TDBLabel等.DataSource还用于创建主/明细关系.如果您不想使用该组件或关系,则不需要它.