如何自己控制远程数据库返回记录的数目(200分)

  • 主题发起人 主题发起人 ddc
  • 开始时间 开始时间
D

ddc

Unregistered / Unconfirmed
GUEST, unregistred user!
请教高手,如何在客户端控制返回记录得数目,例如通过odbc,除设置
缓冲外,可不可一在程序中控制返回记录的数目,也就是一个表可能有
几百万条记录,我返回时,每1000条每1000条的返回!
 
我看只有根据某个类似id的字段select.
如果是sql 6.5可以用 select top n 返回
前n条记录
 
1.BDE Administrator中可以设置
2.如果是SQL 7.0可以用select top(Delphi好象不支持top,得用存贮过程)
3.设置ClientDataSet的PackageRecord属性
 
如果用TClientDataset,就可以
TClientDataSet.PacketRecords

Indicates the number or type of records in a single data packet.

property PacketRecords: Integer;

Description

Use PacketRecords to specify how many records should be contained in a single packet fetched from the application server, or to indicate that the packet returned should contain only metadata from the server.

When a client dataset is instantiated, PacketRecords is automatically set to -1, meaning that a single packet should contain all records in the dataset.

If PacketRecords is greater than zero, then it specifies the exact number of records to return in a packet.

To retrieve the metadata for a dataset, set PacketRecords to 0. When PacketRecords is zero, the application returns all information from the remote database server that define the database抯 structure, such as table, column, constraint, and domain definitions.
 
PacketRecords,sorry刚才拼错了
 
哈哈..都被回答了..不用插嘴了
 
拷贝一下Tdataset吧, 将它的buffercount属性改一下即可
 
select top n 只能返回n条记录,而不是每n条返回。
如果用ADO,可以设置CasheSize属性!ODBC如果连SQL的话
应该也可以吧
 
cashsize真有用?
TOP X不是DELPHI支持不支持的,关键只要数据库支持(MSSQL)
用三层比较好的.
 
我也有这个问题,一直没有解决。
上述都不能解决问题,
有好消息,告诉我。
a99168@sina.com
 
有个馊主意:
在服务器端作一个存储过程,一个临时表。
存储过程:输入参数(序号,一次读出的记录个数)
0 判断输入参数是否有效
1 清空临时表
2 在存储过程里打开一个游标,一定要排序
3 按序号和一次读出的记录个数用游标读出所要的记录放到临时表里
4 select * from 临时表

但不管怎样,依我愚见,觉得如果没有一个类似recordno的属性,还希望
简单的sql就可以返回规定数目的记录,逻辑上行不同的。 sql的特性是面
向集合,非过程的。

ddc:可以给分了吗? :)
 
参见我提的一个问题吧,跟你的很类似,解决的很好。
只是用了一个简单的存储过程,没用临时表(不给g622面子:-)

http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=203683
 
cheka: 如果是有id字段,前面的回答提到了,好解决。
我是假设它没有 id字段,才用排序然后游标记数返回记录的。
:)
 
ORACLE中可以用伪列rownum
 
SQL Server 上好象有Set Rows=??
详细的你可以看 Help
 
出差回来看到各位的回答,很高兴,可惜都没有用,主要因为我们所用服务器的
标准DB2很恶心,至于解决方法,我通过设置MAXROES解决了,多谢各位!!!
 
多人接受答案了。
 
后退
顶部