客户端Select的问题(100分)

  • 主题发起人 主题发起人 cheka
  • 开始时间 开始时间
C

cheka

Unregistered / Unconfirmed
GUEST, unregistred user!
客户端有一 DBGrid连接某个Query,

Q1: 如执行Select field1,field2 from myTable,是不是相当于把整个
myTable都从服务器拉到本地来,在缓冲区里检索后再在DBgrid显示?

Q2: 我希望一部分一部分的显示,比如DBGrid中只显示十个纪录,按
某个按钮后在显示后十个纪录,该如何做?
 
q2:
设RecNO为主键:
Query.Text:='Select field1,Field2 from myTable where RecNO between :RecNO1 and :RecNO2';
Query.Prepare;

当按键按下时:
Query.ParamByName('RecNO1').AsInteger:=RecNO1;
Query.ParamByName('RecNO2').AsInteger:=RecNO2;
Query.Active;

Q1:
Q2解决了,Q1就不成为问题了。
 
我的主键是一个uniqueidentifier型的,即16位全局字符串,并不一定
连续,更没法根据两个值来确定中间有多少笔纪录,这样该怎么办?
 
设置别名中的MaxRows试试!

//这是以前大富翁中的回答。
用BDE方法:
if DataSet.Active then
Check(DbiSetProp(hDBIObj(DataSet.Handle), curMAXROWS, MaxRows))
这里MaxRows就是你想得到的记录数,对任何类型数据库都有效!
 
我刚接触DELPHI,对函数不大熟,
不知有没有类似PB中的DELETEROW()//删除缓冲中一行
的函数.或ROWSMOVE,ROWSCOPY等.
这类问题我用PB做过.
 
我用的是Sql Server7 ,Ado连的,不知道前卫兄的方法能不能用。
我的想法是在存储过程里有两个参数:@Idx,@Count
用这两个参数确定从第几笔纪录开始选择几笔再返回给客户机,
而不是客户机得到所有纪录后再一段一段的显示。
能做到吗?

Top n 可以得到前n笔纪录,但每次只能从头开始,Set RowCount好
像也不行。
 
在SQLSERVER上建立存储过程,功能如下:

SET ROWCOUNT <设置为你要选的记录以前的记录总数>
SELECT @X = id FROM yourtable ORDER BY id
SET ROWCOUNT <你要的记录数>
SELECT * FROM yourtable WHERE id > @x //返回结果数据集
SET ROWCOUNT 0

//前面加入对n是否溢出的检查
 
接受答案了.
 
后退
顶部