我不知道Delphi 2007,但我对Delphi 7和Oracle 8做了同样的事情.
这是我做的事情:
根据查询设置TAdoDataSet.CursorLocation:
clUseClient如果查询获取GUI的记录并且查询相对"简单" - 没有分组或总和
clUseServer如果查询有某种聚合(求和,分组,计数)
根据查询设置TAdoDataSet.CursorType:
ctForwardOnly用于不需要向后滚动数据集的报表 - 仅适用于 clUseServer
用于GUI的 ctStatic.这只是与 clUseClient一起使用的模式
根据查询设置TAdoDataSet.LockType:
ltReadOnly用于未用于编辑的每个数据集(网格,报告)
当记录在更改后立即发布到数据库时(例如用户在表单上编辑数据),显示优先级
更改大量记录时的 ltBatchOptimistic.这适用于您获取记录数,然后对它们进行一些处理然后批量发送更新到数据库的情况.这最好与clUseClient和ctStatic结合使用.
根据我的经验,Oracle的Microsoft OLEDB提供商比Oracle OleDb提供商工作得更好.你应该测试一下.
编辑:检查Fabricio关于可能的blob问题的评论.
更换TAdoQUery与TAdoDataSet.TAdoQuery是为将应用程序从BDE转换为ADO而创建的,但Borland/Codegear推荐是使用TAdoDataSet
重新检查Oracle连接字符串以确保您没有网络延迟.连接到Oracle需要多长时间?TnsPing有多长时间?