ado和dbgrid(200分)

  • 主题发起人 主题发起人 a99168
  • 开始时间 开始时间
A

a99168

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个表约有20000条记录。需要在dbgrid中全部显示。
使用bde 连结,打开该表单后,dbe 会取出前部分数据显示,
dbgrid需要后面的数据时dbe才会继续取新数据
没想到使用ado 连结后,ado竟将所有的记录一次性全部取过来,
使得打开表特别慢(查找单条记录很快。已排除网络故障)。
如何使ado分阶段取数据?
在ado中执行存贮过程,超过30秒立即报错--连结超时
将连结时间修改无效,30秒一到就报错。
怎么办???
第一次提问题。请多关照!


 
如果你用的SQL7,可以用
SETCOUT ROWCOUNT N
SELECT * FROM
....

SETCOUNT 0
~~~~~~~~~~别忘了写
 
谢谢唐兄!
使用delphi5.0+sql7.0
因为字段名要显示为中文
所以使用了固定的adoquery
试了一下,不认"rowcount"
 
目前ado存贮过程的30秒时间限制的问题已婚解决修改DELPHI5 的原代码)。
ado的一股脑就把所有的数据全部取过来的毛病实在是要不得。
诸位大侠快快想办法吧。
以后我是真的不敢用ADO了。

 
高手在哪里???
 
既然你是全部显示,本来就应该一次全部读取出来呀! BDE不知道具体怎么实现,
但ado的做法是没错的.
如果你只想取前面某些纪录,用select top n * from ....
n为你需要的行数.

 
To cAkk:Select top n * from ...你用好使吗? 我用的时候在SQL explorer中没问题
用到查询中就不行。
 
ADO 大错特错,BDE是分段读取数据,
当需要下一段数据时再读传过来,节省用户等待时间。
引深一下:当网络传回数据超过20000条记录,如何节省等待时间
ADO太草率了 它将20000条记录全部取出来然后才让用户操作。
开始我还认为是死机了
关键是使用SELECT TOP 20 语句后如何再取第21-100条记录。
就这个问题曾问过微软SQL亚太服务中心。
也没有结果。
 
>>当需要下一段数据时再读传过来,节省用户等待时间。
有没有搞错,既然你使用了select * from ,当然就应该一次取回全部数据!

>>当网络传回数据超过20000条记录,如何节省等待时间
废话,你用foxpro用习惯了吧? 网络数据库本来就不要经常用select * from ,
你只取回你自己需要的数据就行了.

WHY&SONG: 我用select top n没有问题.
 
1、你对sql实在不熟悉,
2、以上的方法都不可行,
3、你用select * from ...是绝对不合理的。

sql取数据可以用键集方式,在dbe中替你做了,但在ado中你需要自己做,因为他
给你的手段更强、更有灵活性。
以上方法达不到全部显示的效果。其实你根本就应该避免全部显示这种情况发生。
要人替你解决这个问题本身就很不合理。你应该想办法一次只提取部分数据而不是
全部。
用select * from 显得你有很懒的个性,在网络上 * 代表了要传递全部数据,
不管你要不要,事实上你应该有什么取什么,在网络上select * from 和
select id from ... where 是有绝对大的区别的,不要在意仅提取一个数据是
一件麻烦时,事实上你提取所有数据对系统造成了麻烦。
 
各位大侠:
我是一个单位有20000名职工,要将它分段显示出,并打印。
如何做?

 
slect top N from query
在这里是达不到目的的。
 
再没有人回答
我只好结束了
 
按部门分类用SELECT * FROM WHERE 部门=?
 
同意Energy的说法:
1)在你的 table中加入id字段()---自动增加字段
(照理职工总有一个类似id的标示号的)
2)for i:=0 to 199999 do
select * from table where id >1+(i*500) and id <500+(i*500)
 
接受答案了.
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
后退
顶部