ado读取10000条记录的excel文件,慢,怎么办? ( 积分: 50 )

  • 主题发起人 主题发起人 ImageEn
  • 开始时间 开始时间
I

ImageEn

Unregistered / Unconfirmed
GUEST, unregistred user!
用ADOQrery读取10000万记录的excel文件中的每个字段内容中所有的不同值,相同的以一个代替,我用select distinct 字段 from 表1
并把结果给listbox,from i:=0 to ADOQrery.recordcount-1 do
listbox.item.add(ADOQrery......)

结果速度很慢,要等近一分钟才有结果。
请问该怎么办才能快些?
 
ADOQrery.disablecontrols;
listbox.item.beginupdate;
from i:=0 to ADOQrery.recordcount-1 do
listbox.item.add(ADOQrery......) //
listbox.item.endupdate;
ADOQrery.enablecontrols;
// 这么多资料就算读入,用户也不会看完, 用线程在后台,慢慢取...
// ADO使用只读打开, 直接操作RECORDSET接口取数据等都会有一定的提高...
 
谢谢兄弟!
是这样的需求:
比如有字段"支付银行",内容有"建设银行"、"中国银行"、"农业银行"、"交通银行"这四个,但1万多条记录中就是这些银行的夫规律重复,我不想全部提取每条记录的"支付银行"的值,只想取得这个字段中到底有多少个不同的值?比如上面的四家银行。ADOQrery做此操作时肯定要进行逐条查找吧,这样速度就慢了,有其他什么方法可以实现吗?
 
excel在数据库引擎下可以直接用select语句吧,我记得可以
这样你可以select distinct 支付银行 from excel

//Excel表,数据源
if IsHeadCh.Checked then
ExcelSource:='[excel 8.0;database=' + ExcelFileEdit.Text + ';HDR=YES;IMEX=1].['+SheetComboBox.Text+']'
else
ExcelSource:='[excel 8.0;database=' + ExcelFileEdit.Text + ';HDR=NO;IMEX=1].['+SheetComboBox.Text+']';

//使用
sql:=' select * from MSysObjects where name='''+MainDataTable+'2''';
InputAdo.SQL.Clear;
InputAdo.SQL.Add(sql);
InputAdo.Open;
 
SheetComboBox.Text 是excel中sheet的名字
 
weichao9999,我的和你的差不多啊,这样对于万条来说速度太慢
 
http://www.star-reg.com/soft/softview.php?id=12402
这项技术不用OLE支持可较好地解决你的问题
QQ:292044357
email:chyzpc@163.com
 
你这样的操作,应该考虑使用分页的方式。比如一次读取5000,然后马上显示出来给用户,然后再读取和显示,一直到取出所有的数据。
这样的方式速度不会提高,只是给用户的感觉没有那么长时间的等待。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部