有人说要分页查询,但要如何解决,另会对我在查询结果集中还有一个过滤功能有影响
解决方案 »
- 无产阶级求助Delphi操纵Word时如何插入图表?
- 如何将Query中查找到的数据写入另一张表
- Delphi中如何继行?像C中的'\\'
- 哪里有Delphi 串口通信编程书籍下载,急!!!
- 为什么用QuickRep做出的报表,在预览前改变页的长度、宽度,但预览到的结果都没变化?
- 请问:如何取得某年某月到底有多少天?用Calendar控件可否得得通?
- 请问是ORACLE难学还是DELPHI难学?
- delphi中的日期格式
- 关于ServerSocket, ClientSocket的问题
- delphi调用HttpQueryInfo编译不通过
- 我一个下午都没搞定的DBLookupcombobox,求救!!
- 怎样才能将一个应用程序中已屏蔽的BUTTON恢复?
如果是delphi中慢,建议取数的时候,把对应的大字段去掉,千万别用select * from ...,C/S结构按道理应该不慢的。
我这个表其实是一个基础资料表tProduct ,关键字为ID (int) 并建立了索引
我在客户端,是做一个select * from tProduct 也就是一次性把所有记录提取到前端,进行增加,编辑,查询。。这样子,提取大量数据,就会感觉延迟时间长。。
有没有解决方案呢。
我们做个假设,我现在有一个料品基本资料表,里面有N多个字段,但是我的关键字段就只有料号、版别和料品分类,那么我们提取资料时就只提取这三个字段,至于其它如品名呀,规格呀,就要需要显示到用户界面时再提取,这不就方便多了。一个料号算你编码20位,版别5位,分类5位,也才30位,就算是30W笔也不到10MB的数据,这样子内存还会成为很大瓶颈么?而这其中还可以进行分化,比如某个用户要操作之前先让他选分类,那么就只限该分类的料品,这时候就远远少于30W笔,而这当中又可以再次分段,例如,某某现在需要修改数据,既然需要修改,那么肯定就会知道是什么料品吧,那就一次提取100笔,显示在一个选框当中,此时对于用户来于,是不是相当于有着全部被列出来的假象,他如何翻系统就如何按照索引进行增强性检索,也就是比如他往后翻一页,假定最多给他保留三页信息的话,就可以把前面多余的内存占用释放,这种动态的检索方式,对于用户看来始终都是实时连续的。
Fist page Page Data(ID)
-------------------- 1 001..100
1 2 101..200
... 3 201..300
100
--------------------
Next Page
-------------------- No Changed
101
...
200
--------------------
Next Item
-------------------- 1 002..101
102 2 102..201
... 3 202..301
201
--------------------
Last
------------------- 1 299701..299800
299901 2 299801..299900
... 3 299901..300000
300000
-------------------
...
我通常的做法是:
只取一部分的数据到客户端,"select * from tProduct where ..."
要查询的时候,把条件传到服务端执行,把结果记录再传回客户端.(只把合要求的记录传回).
新增的时候,不是直接在客户端把记录加到表(DataSet)里,是把新增的记录传回到服务端,进行操作(如唯一性的校验),没错误后,才加到数据表里,然后再把新增的记录传回客户端.
删除及编辑的操作雷同.
按这个属性的设计说明,应该是使用dbserver里的游标,每次只返回一条记录给客户端。
没有测试过,我好像在用这个属性时,发现它不能使用Transcation了,不知为什么