问个SELECT的问题 (50分)

  • 主题发起人 主题发起人 吴剑明
  • 开始时间 开始时间

吴剑明

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个倒数的程序,就是: 先SELECT一个数据源的数据,然后插到另一个数据源里
去。基本完工。但有个问题不知怎么办。
就是每次打开数据源,总是花很多时间:select * from a
而我是希望先打开这个表,但不要立即就给我传回所有的数据给我,否则打开表要很久。
我希望我取一条,就传回一条给我,再取下一条,然后在传下一条给我。
效果 :
当我执行 : select * from a (必须用这样的SQL语句,不用TABLE),只是打开了
数据源的表,但没传一大堆数据回来。这时我先NEXT,去第一条数据回来,插入到另一
数据源,在NEXT,取下一数据源,再插。。。。
总体希望是打开表不要花太多时间,但又能取回我要的数据。不知能否实现呢?
 
如果有id字段,试一下这个笨办法:
用query1查询select id from a;
只返回一个字段应快点,
用query1做导航,
取数据的query2用:select * from a where id=:id
每次只取回query1当前记录id的数据就可以了。

 
不是个好方法
 
没太明白
 
数据库服务器是面向结果集的,而不是面向单条纪录的。
 
select后加where不就行了,只要where后查询参数在程序中动态改变.
 
不会吧,SELECT是很快的,你的索引没用好?
返回的是数据集,你要返回单行就加条件!
 
select 是一个整体的操作,不可能一条一条的返回记录给你,你还是另想办法吧。
 
吴坚铭你的思路错了,如果如同那天你在广州所说,仅仅为了备份数据的话。
看看李维的数上怎么说的。呵呵,平安夜我看到晚上12点。感觉天地变了的说:)
 
1 为什么不用索引呢,
2 select * from .. where 0=1
3 数据库建立ID 然后再客户端做循环。
 
如果你用SQL SERVER 可以用
select top 1 * from .....
其中 1 是想返回的记录数。
其他的数据库你可试试。
 
老千你倒说说我怎么错了的说 !
 
用2个线程分别打开一个5M的数据库,系统就提示: 内存不足。TMD
 
我觉得他是怕每次select都要从数据库提取,
因此可以在第一次就把数据全取到客户端,
更新后返回到服务器。
 
djjsl :
刚好相反,我是一次读出来的,所以才读半天。:(
我现在就是想分开来读。
 
我的意思是将rs先读到client,将它写给rs1,然后从rs1读,当然
这也可能达不到实时的要求。
 
我觉得用zhanggeye的方法比较可行
 
老吴:我想这是你搞错了

如果你用BDE,那么本来就是缓存的,select会立刻返回,
正是象你说的那样,取一条数据,才返回一条数据。

如果你用ADO,那么应该把CursorLocation设置成clUseServer,
同样是立刻返回,时间非常短,和BDE效果一样。

照你说的select * from a,后面没带条件,
那么我想你是用了ADO+clUseClient,那么肯定慢了。
 
听起来好象一刀的话有点道理。。。
 
后退
顶部