我用table控件后,读入文本到表里,记录数为2000条时,速度慢得如蜗牛,谁能帮我解决?急!!(100分)

  • 主题发起人 主题发起人 diziny
  • 开始时间 开始时间
D

diziny

Unregistered / Unconfirmed
GUEST, unregistred user!
我用table控件后,读入文本到表里,记录数为2000条时,
速度慢得如蜗牛,谁能帮我解决?
我的表名为zzb;我先将文本读到richedit1中,每一记录是一行。
我的代码:
with datamodule_tfgz.table_zzb do//table_zzb 就是我用的table控件,它指向zzb
begin
open;
for i:=0 to richedit1.Lines.Count-1 do
begin
append;
myline:=richedit1.lines;
for j:=1 to GetSubStrNum(myline,'|') do//GetSubStrNum是一个取分隔符的函数
begin
Fields[j-1].AsString := GetSubStr(MyLine,'|');
end;
post;
end;
end;
我试过将文本的记录数减少一点就很快,请问各位高手有什么好的解决办法?
如果可以用其他控件实现将文本读入一个表,请问怎么实现?
谢谢!
 
你可试试在OPEN后用DISABLECONTROLS,结束后用ENABLECONTROLS,看速度能否快一些.
 
好像都差不多的了,不过你可以试试直接用TStrings,或者把
RichEdit的Lines.Beginupdata打开,在结束的时候再用EndUpdata,
又或者用多线程进行操作应该都会有效果。
 
1:检查你用的数据连接程序,不同的数据连接程序差别很大,比如ORACLE的MICROSOFT、ORACLE和DOA345差别就非常大,
2:CursorLocation为:clUseClient
CacheSize:100-1000
如果程序还需要用户做其他工作,那么可以进行异步操作,或者使用异步操作提示进度,
这样用户感觉可能就没有那么慢了
3 你可以使用TQUERY TDATASET(TADOQUERY,TADODATASET)
 
不知道这样行不行:

with datamodule_tfgz.table_zzb do//table_zzb 就是我用的table控件,它指向zzb
begin
open;
EDIT;
DISABLECONTROLS;
for i:=0 to richedit1.Lines.Count-1 do
begin
INSERT;
// append;
myline:=richedit1.lines;
for j:=1 to GetSubStrNum(myline,'|') do//GetSubStrNum是一个取分隔符的函数
begin
Fields[j-1].AsString := GetSubStr(MyLine,'|');
end;
/////////////////// post;
end;
ENABLECONTROLS;
POST;
end;
 
query组件!
 
Cache模式下,CacheSize:100-1000,
不要每次都POST到数据库中,全部POST之后在APPLYUPDATE到数据库中
 
如果txt一“,”作分割付,用ado直接链就行!
connectionstring:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/textfile/;Extended Properties=Text;Persist Security Info=False
否则还得加上格式文件。
 
试试用delphi自带的文本数据库控件,在samps目录中的db目录下的dbtext中,要自己
安装该控件。
 
ODBC+文件型数据库=蜗牛,建议更换连接组件
 
同意 楼上, ODBC + 文件型 特别是 文本文件的. 太慢了.

用更好的 数据驱动 试试.

楼上的楼上, 所说的那个 文本数据 控件到是 很的 意思. 去看看 .
 
补充zhihuali兄的:
DISABLECONTROLS;
AutoCaleField:=false;
...
AutoCaleField:=true;
ENABLECONTROLS;
效果不显著的说
 
谢谢各位![:)]
 
后退
顶部