以下是我写数据入库的函数,i_sInSqlLst 存放着数据插入语句,循环读插入语句然后执行,目前插入800条就要1分钟,如何改进才能加快速度?function TfrmAnalyze.InsertData(i_sInSqlLst: TStringList): boolean;
var
i: integer;
strSql: string;
begin
result := false;
try
for i := 0 to i_sInSqlLst.Count - 1 do
begin
strSql := i_sInSqlLst.Strings[i];
dm.adoqry.SQL.Clear;
dm.adoqry.SQL.Add(strSql);
dm.adoqry.ExecSQL;
self.WriteAnaLog('第 '+inttostr((i+1))+' 条入库成功!');
application.ProcessMessages; end;
result := true;
finally
dm.adoqry.Close;
end;
end;
var
i: integer;
strSql: string;
begin
result := false;
try
for i := 0 to i_sInSqlLst.Count - 1 do
begin
strSql := i_sInSqlLst.Strings[i];
dm.adoqry.SQL.Clear;
dm.adoqry.SQL.Add(strSql);
dm.adoqry.ExecSQL;
self.WriteAnaLog('第 '+inttostr((i+1))+' 条入库成功!');
application.ProcessMessages; end;
result := true;
finally
dm.adoqry.Close;
end;
end;
解决方案 »
- 三层如何在传递客户端的控件给服务器端?
- ~~~~~~~~~~~~~~~~`如何像外挂那样在DirectX游戏屏幕上绘制自己的文字?~~~~~~~~~~~~~
- 关于Locate,请大虾帮帮忙!!!
- 大家看看DBGrid能实现这样的功能吗?
- 如何定位读取文件内容????
- Delphi的基础问题
- 如何设置stringgrid的cells为红色,或则其他什么颜色!
- EDatabaseError用于意外处理,用于AdoQuery的是什么?
- 关于用DELPHI往ORACEL中保存可执行文件,导出可执行文件就不能执行的问题.
- DLl Hook注入后 ,DLL里有个窗口,怎么让DLl里的窗口的线程和被注入的程序的线程不一样了?
- delphi控件大小随窗体大小变化
- 如何让delphi的dbgrid显示sql里nvarchar(255)属性的字段啊?
先用table打开要导入的表,然后append数据到table,最后update,不知这样会不会快;
begin
insert into test values('Noname',0,0.45);
insert into test values('Noname',0,0.45);
insert into test values('Noname',0,0.45);
commit;
end;
/
begin
insert into test values('Noname',0,0.45);
insert into test values('Noname',0,0.45);
insert into test values('Noname',0,0.45);
commit;
end;
其中斜杠(/)是两个笔记录的分隔线
var
s:string;
begin
s:='c:\123.sql';
WinExec(pchar('sqlplus user/pwd@orcl '+s),sw_hide);
end;
var
i: integer;
strSql,str: string;
begin
result := false;
try
try
dm.adocon.BeginTrans;
dm.adoqry.SQL.Clear;
for i := 0 to i_sInSqlLst.Count - 1 do
begin
strSql := i_sInSqlLst.Strings[i];
dm.adoqry.SQL.Add(strSql);
end;
dm.adoqry.SQL.Add('commit;');
dm.adoqry.ExecSQL;
dm.adocon.CommitTrans;
result := true;
except
dm.adocon.RollbackTrans;
end;
finally
dm.adoqry.Close;
end;
end;
var
i: integer;
strSql,str: string;
begin
result := false;
WinExec(pchar('sqlplus HOSTS/HOSTS@IPDB1 c:\aa.sql'),sw_hide);
result := true;
end;
aa.sql的内容如下:
insert into U_LSDEV_C(L2CACHE0,AVAILABLE,REPORT_DATE,TRAN_ID) values('aio0','Available',to_date('20080131111300','yyyy-mm-dd hh24:mi:ss'),138);
insert into U_LSDEV_C(L2CACHE0,AVAILABLE,REPORT_DATE,TRAN_ID) values('cd0','Available',to_date('20080131111300','yyyy-mm-dd hh24:mi:ss'),138);
insert into U_LSDEV_C(L2CACHE0,AVAILABLE,REPORT_DATE,TRAN_ID) values('dac0','Available',to_date('20080131111300','yyyy-mm-dd hh24:mi:ss'),138);
insert into U_LSDEV_C(L2CACHE0,AVAILABLE,REPORT_DATE,TRAN_ID) values('dac1','Available',to_date('20080131111300','yyyy-mm-dd hh24:mi:ss'),138);
insert into U_LSDEV_C(L2CACHE0,AVAILABLE,REPORT_DATE,TRAN_ID) values('dar0','Available',to_date('20080131111300','yyyy-mm-dd hh24:mi:ss'),138);
insert into U_LSDEV_C(L2CACHE0,AVAILABLE,REPORT_DATE,TRAN_ID) values('data_4g_0068','Available',to_date('20080131111300','yyyy-mm-dd hh24:mi:ss'),138);
insert into U_LSDEV_C(L2CACHE0,AVAILABLE,REPORT_DATE,TRAN_ID) values('data_4g_0069','Available',to_date('20080131111300','yyyy-mm-dd hh24:mi:ss'),138);
insert into U_LSDEV_C(L2CACHE0,AVAILABLE,REPORT_DATE,TRAN_ID) values('data_4g_0070','Available',to_date
commit;但我直接用sqlplus执行aa.sql数据很快就插入呢,这是怎么回事???
var
i: integer;
strSql,str: string;
begin
result := false;
try
dm.adoqry.SQL.Clear;
dm.adoqry.LoadFromFile('c:\aa.sql');
dm.adoqry.ExecSQL;
result := true;
finally
dm.adoqry.Close;
end;
end;用这种方式也不行,LoadFromFile时会报错“无法从指定的源创建记录集。源文件或流必须包含 XML 或 ADTG 格式的记录集数据”