200分! 200分! 200分!(200分)

  • 主题发起人 主题发起人 sheng
  • 开始时间 开始时间
S

sheng

Unregistered / Unconfirmed
GUEST, unregistred user!
请教各位大师:

在对数据库的访问时,如何做到对数据库的数据进行分页显示,
也就是说访问数据库时先读出前10的数据,处理完毕后再读出
10个数据,就象C的数据指针那样可以控制,想从数据库中的哪
个位置读就在哪里读!DELPHI能实现吗?
(我用的数据库是SQL)
哪位大师能帮小生解决这问题,200分就是你的!
另外有的要求:必须说出详细的方法及控件的使用,最好E—MAIL
一个实例给我!(djs@dongguan.gd.cn)

多谢多谢!!!!

 
使用链表结构,讲对应于数据库的记录序号存于此,而后依次访问链表即可。
 
使用TQuery或TTable的MoveBy方法

Query1.open;
Query1.MoveBy(10);//向后移动了10条纪录
...
 
请写明实例!
我需要的是不知数据的排序方式时的处理方法。
另如果当我要删除数据库中的数据时,链表关系怎么处理?
 
链表的操作在‘数据结构’一书中有详述,如
Type
Nod=Record
no: integer;
link: ^nod
End;

var p: point;
Begin
....
recval := p.no //取得数据库的记录序号,后面进行删除
q:=p
q.link := p.link //删除该节点;
...
end;
此乃链表的删除操作,对于其它的操作,可参考“数据结构”.
 
不好意思,小生是个生手。找大师麻烦了!!
请问在哪里可以看到“数据结构”这东西?
最好还是给个实例来看看!
 
“数据结构” 到清华大学的严蔚敏的第二版里去找
 
不太清楚您的需要, 只能给您一个没有任何实际意义的例子
procedure TForm1.GetAllData;
var
i: Integer;
begin
for i := 0 to 9 do // 处理10次, 每次10条记录
begin
query1.sql.text := 'select * from demoDb';
query1.open;
RetrieveData(i);
query1.close;
end;
end;

procedure TForm1.RetrieveData(start: Integer);
var
i: Integer;
begin
Query1.first;
query1.moveby(start * 10); // 跳过以前处理过的记录
for i := 1 to 10 do // 处理本次10条记录
with query1 do
begin
..... // 处理具体数据
next;
end;
end;
 
新华书店有售,但清华大学版的好象没有,此书最好!图书馆可能借到。其它
出版社的道可以买到,书的内容就不及清华大学的了。
 
呵呵,有一点不明白,用链表有意义吗?
 
对我们来说有点“脱裤子放屁”,但对提问者本人,我想这可以理解,
操作也明白些!
 
你应该说一下你的最终用途是什么。
 
最终用途:

我要查看、修改、增删一个数据库,但是这数据很大,我想一次读一部分,
这样的话就可以快一点(应该这样理解吧)。同时也好用一点。
 
具体问题具体分析,看着问题简单实际不然.
你用的是什么数据库,不同的数据库有不同的方法,
看"最终用途",你的目的实际是对数据库的优化访问,
这不属于Delphi可以解决的范围,而是数据库系统
本身的问题.一般较全的数据库书如"SQL SERVER大全"
中都专有一章描述此问题.
"一次读一部分"恐怕你控制不了,你想读一部分,很可能
数据库系统要遍历了再给你一部分.
 
如果有索引的话,数据库不至于这么傻,非得遍历一遍.
不过每次选十条对数据库的负担不是减轻,而是加重,没多大意义.
 
jams:有空呀,人家读数据库,呵呵
实际上我的理解是:为了效率考虑,读部分记录,处理后再读。
多数DBMS没有提供类似功能,所以基本不可能实现,
不过好象有提供 select top 10的,:-)
如果是多层数据库,那么可以解决,包括MIDAS和ASTA都有类似功能。
如果只是取部分记录处理(不管效率)那么大可用
for i:= 0 to x do
begin
...
query1.next
if query1.eof then break;
end;
 
不好意思近几天上不了网,今天才能上来。
多谢几位大师,本人大致上明白了。看来是很难实现我的目的了..... :-( 。
那应该怎么分配分数给你们呢?(真头疼)。
不过在这里我还要请要教一个问题:
我用的是NT+SQL70,读数据的时候,如何把当前的记录的各个字段的值一次性
读入一个记录里(记录的各成员与记录的字段名一一对应)。
修改完毕后,一次性写回数据库。
 
...,如何做到对时先读出前10的数据,处理完毕后再读出(我用的数据库是SQL)..
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果你想实现类似论坛的分页,应该利用存储过程
在查询结果中建立一个中间表,在中间表中加一个
Identity字段,然后可以根据Identity可以读出任
意位置的数据.

DELPHI能实现吗?
~~~~~~~~~~~~~~
如果你可用存储过程不但可以减少传递数据量,还可以
增加处理速度,最大的好处是可以实现真正的模块功能
以后,您可以方便的把数据库程序移植别的开发环境中

这只是我个人对使用Sql Server的一点建议 :)

 
有一个非常简单的方法。

建立table1中有一个f1是自增字段,然后
第x个10条的
thequery:='select * from table1 where fl>' + inttostr((x-1)*10) + ' and f1<=' + inttostr(x*10) + ' order by f1';

不过数据库最好没有删除过:) otherwise......
 
不行啊,难道叫我不删除东西吗?!
不过,如果能自动排序还差不多!
 
后退
顶部