SQL SERVER的ADO驱动怎么不支持分页? ( 积分: 100 )

  • 主题发起人 主题发起人 龙之脊
  • 开始时间 开始时间

龙之脊

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Microsoft OLE DB Provider for SQL Server通过ADOConnection连接SQL Server数据库,采用分页机制,如下:

ADOQuery.CursorLocation := clUseServer;
ADOQuery.CursorType := ctKeyset;
ADOQuery.CacheSize := 1000;
ADOQuery.SQL.Text := 'select * from test';
ADOQuery.Open;

ADOQuery.Recordset.PageSize := 1000;
输出ADOQuery.Recordset.PageSize为-1

使用ACCESS就可以。

这是为什么?ADO的分页机制不是靠驱动实现的吗?难道SQL SERVER的ADO驱动不支持分页机制?
补充,如果不使用分页则没问题,因此,数据库连接是没问题的。

ConnectString = Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=dbimporttest;Data Source=helps2000
 
我用Microsoft OLE DB Provider for SQL Server通过ADOConnection连接SQL Server数据库,采用分页机制,如下:

ADOQuery.CursorLocation := clUseServer;
ADOQuery.CursorType := ctKeyset;
ADOQuery.CacheSize := 1000;
ADOQuery.SQL.Text := 'select * from test';
ADOQuery.Open;

ADOQuery.Recordset.PageSize := 1000;
输出ADOQuery.Recordset.PageSize为-1

使用ACCESS就可以。

这是为什么?ADO的分页机制不是靠驱动实现的吗?难道SQL SERVER的ADO驱动不支持分页机制?
补充,如果不使用分页则没问题,因此,数据库连接是没问题的。

ConnectString = Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=dbimporttest;Data Source=helps2000
 
没有这样用过,不过分页到是自己写的。
可以试试:
SELECT TOP m-n+1 *
FROM publish
WHERE (id NOT IN (SELECT TOP n-1 id FROM publish))
id 为publish 表的关键字
m ---- 每页显示的行数
第一页 n=1
第二页 n=m+1
 
因为做得是数据的导入导出功能,要支持各种数据库,因此不能直接用SQL SERVER的分页功能。
 
oracle,mssql,mysql数据库分页时所用的sql语句。

---1.oracle数据库
SELECT * FROM ( SELECT row_.*, rownum rownum_ FROM (...... ) row_ WHERE rownum <= ?) WHERE rownum_ > ?
先按查询条件查询出从0到页未的记录.然后再取出从页开始到页未的记录.(据说是效率最高的:))

---2. sql servler数据库
i:select top [pagesize] * from table where id not in ( select top [pagesize*(currentpage-1)] id from table [查询条件] order by id ) and [查询条件] order by id
先按查询条件排除 pagesize*[pagesize*(currentpage-1)]以前的纪录。&amp;&amp;再按查询条件把他以后的记录 top[pagesize] 出来.
ii:
select top PageSize * from TableName where id > (select max(id) from (select top startRecord-1 id from TableName [查询条件] order by id) as TempTable) [查询条件] order by id
先取得开始该页开始时的最大ID,然后再从最大ID出top[pagesize]
(听说记录组超过10万第二条好过第一条)

---3.mysql数据库
select * from table [查询条件] order by id limit ?,?
 
我做的是数据库的导入,数据库类型不定,因此不能使用各种数据库专用的分页机制,ADO不是有分页机制吗?为什么SQL SERVER的ADO驱动不能分页?
 
后退
顶部