我写了一个程序需要精确定位数据库中的第几条记录:
SQLQuery2.SQL.Clear;
SQLQuery2.SQL.Add('declare mycusor scroll cursor for select orderid from orders');
SQLQuery2.SQL.Add('open mycusor');
sString:='fetch absolute '+inttostr(变量)+' from mycusor';
SQLQuery2.SQL.Add(sString);
SQLQuery2.SQL.Add('close mycusor');
SQLQuery2.SQL.Add('deallocate mycusor');
SQLQuery2.Active:=True;
curorderid:=SQLQuery2.FieldByName('OrderId').value;
我想问,除了我这个笨办法外,还有没有更为简单的办法,难道delphi没有这样的锋装么?
SQLQuery2.SQL.Clear;
SQLQuery2.SQL.Add('declare mycusor scroll cursor for select orderid from orders');
SQLQuery2.SQL.Add('open mycusor');
sString:='fetch absolute '+inttostr(变量)+' from mycusor';
SQLQuery2.SQL.Add(sString);
SQLQuery2.SQL.Add('close mycusor');
SQLQuery2.SQL.Add('deallocate mycusor');
SQLQuery2.Active:=True;
curorderid:=SQLQuery2.FieldByName('OrderId').value;
我想问,除了我这个笨办法外,还有没有更为简单的办法,难道delphi没有这样的锋装么?
解决方案 »
- OLE为什么不稳定
- vc与delphi用socket通讯的问题,delphi端不触发onReceive事件?请高手帮助
- DELPHI处理批处理文件的问题。
- 如何不通过TWebBrowser控件,直接从文件流或文件中生成文档对象模型(HtmlDocument)?
- 重分急求解一个文件读写问题
- 关于设计模式的问题
- 新人初来乍到 问候下大家 希望可以共同提高,并向大家虚心求教!
- 请问如何在active form 上加入程序菜单?
- 请问如何用delphi直接的真删除dbase数据库的纪录??
- OLEContainer 最基本的用法
- 各位大哥,有没有关于Delphi8 For NET的参考资料
- 请问,Edit控制可以设置一个数组序列吗?
我假定在一个非常庞大的数据库浏览所有数据,并且假定在一个慢速网络上进行查询。当我们用clientdataset等组件的时候,要么下载所有的数据,然后进行定位是完全可以的,要么只能顺序浏览几十条数据,不能让客户自己选定比如地30条到第49条数据,也就是分页后,让用户自己选定浏览哪一页的数据。我现在用这个程序已经能实现我的要求了,但也因此花费了很多的精力,也许大家都看到了,我筛选出来的数据完全是在数据库服务器上进行的。所以我想各位有没有更好的办法
尤其是对于VC开发的客户端程序,这种浪费是比较吓人的!2.建立临时表之后就不管了,也太粗心了吧,我看还是需要做点工作,
好了下面是我的一个分页过程,各位看看吧!--------------------------------------------------------create procedure sp_vlist @cpbmb varchar(6),@crbh varchar(2) with encryption as
set nocount on
declare @sqlcmd varchar(148)
if object_id('tempdb..##vlist') is not null
drop table ##vlist
set @sqlcmd='select identity(int, 1,1) as id, * into ##vlist from '+@cpbmb+' where crbh='''+@crbh+''' order by cpxh
create index ##vlist_id on ##vlist(id)'
exec(@sqlcmd)
set nocount off---------------------------------------------------
^_^,这只是个建立全局临时表的过程,这样即可一劳永逸,在你的分页程序中使用between进行检索,而between需要倚赖nonclustered index提升效率!这样你既可以进行排序,也可进行快速检索,例如:select * from ##vlist where id between 10 and 20 order by cpxh
这个存储过程我认为还是非常有效的,它可以针对不具有连续id的子查询进行分页,我用来开发VC的虚拟列表,现在只要内存足够,那么对于2,000,000记录的表操作起来和查询分析器一样快,当然看通的朋友知道这只是内存的问题了,即使100,000,000记录,分页速度也是一样的!
很简单的