最近公司做个系统,用ADOQUERY往ACCESS中保存数据,代码如下:
for row:=1 to SheetGrid.RowCount-1 do
begin
tmpADO.Close;
tmpADO.SQL.Clear;
tmpADO.sql.add('insert into Contact(ContactId,ContactName,ContactMobile,HeadShip,Sex,Birthday,CoFax,CoAddr,'+
'HomeTel,HomeAddr,Email,CoDept,CoTel,Description,Province,City,Trade,CoName) values (:ContactId,:ContactName,:ContactMobile,:HeadShip,:Sex,:Birthday,:CoFax,:CoAddr,:HomeTel,:HomeAddr,:Email,:CoDept,:CoTel,:Description,:Province,:City,:Trade,:CoName)');
/////////////////////////////////////////////////
tmpADO.Parameters.ParamByName('ContactId').Value :=cid;
tmpADO.Parameters.ParamByName('ContactName').Value := name;
tmpADO.Parameters.ParamByName('ContactMobile').Value :=mobile;
tmpADO.Parameters.ParamByName('HeadShip').Value:=pos;
tmpADO.Parameters.ParamByName('Sex').Value :=sex;
tmpADO.Parameters.ParamByName('Birthday').Value := birthday;
tmpADO.Parameters.ParamByName('CoFax').Value :=fax;
tmpADO.Parameters.ParamByName('CoAddr').Value := coAddr;
tmpADO.Parameters.ParamByName('HomeTel').Value :=hometel;
tmpADO.Parameters.ParamByName('HomeAddr').Value := homeAddr;
tmpADO.Parameters.ParamByName('Email').Value :=email;
tmpADO.Parameters.ParamByName('CoDept').Value :=depart;
tmpADO.Parameters.ParamByName('CoTel').Value :=cotel;
tmpADO.Parameters.ParamByName('Description').Value :=desc;
tmpADO.Parameters.ParamByName('Province').Value :=province;
tmpADO.Parameters.ParamByName('City').Value :=city;
tmpADO.Parameters.ParamByName('Trade').Value := trade;
tmpADO.Parameters.ParamByName('CoName').Value :=coname;
tmpADO.Execsql;
end;
数据库表的字段可能比较多,有十几个,采用的是逐条插入。速度太慢了,1秒钟就三十多条,想请问各位大虾们,这插入速度正不正常?有没有比较快的操作方法?
for row:=1 to SheetGrid.RowCount-1 do
begin
tmpADO.Close;
tmpADO.SQL.Clear;
tmpADO.sql.add('insert into Contact(ContactId,ContactName,ContactMobile,HeadShip,Sex,Birthday,CoFax,CoAddr,'+
'HomeTel,HomeAddr,Email,CoDept,CoTel,Description,Province,City,Trade,CoName) values (:ContactId,:ContactName,:ContactMobile,:HeadShip,:Sex,:Birthday,:CoFax,:CoAddr,:HomeTel,:HomeAddr,:Email,:CoDept,:CoTel,:Description,:Province,:City,:Trade,:CoName)');
/////////////////////////////////////////////////
tmpADO.Parameters.ParamByName('ContactId').Value :=cid;
tmpADO.Parameters.ParamByName('ContactName').Value := name;
tmpADO.Parameters.ParamByName('ContactMobile').Value :=mobile;
tmpADO.Parameters.ParamByName('HeadShip').Value:=pos;
tmpADO.Parameters.ParamByName('Sex').Value :=sex;
tmpADO.Parameters.ParamByName('Birthday').Value := birthday;
tmpADO.Parameters.ParamByName('CoFax').Value :=fax;
tmpADO.Parameters.ParamByName('CoAddr').Value := coAddr;
tmpADO.Parameters.ParamByName('HomeTel').Value :=hometel;
tmpADO.Parameters.ParamByName('HomeAddr').Value := homeAddr;
tmpADO.Parameters.ParamByName('Email').Value :=email;
tmpADO.Parameters.ParamByName('CoDept').Value :=depart;
tmpADO.Parameters.ParamByName('CoTel').Value :=cotel;
tmpADO.Parameters.ParamByName('Description').Value :=desc;
tmpADO.Parameters.ParamByName('Province').Value :=province;
tmpADO.Parameters.ParamByName('City').Value :=city;
tmpADO.Parameters.ParamByName('Trade').Value := trade;
tmpADO.Parameters.ParamByName('CoName').Value :=coname;
tmpADO.Execsql;
end;
数据库表的字段可能比较多,有十几个,采用的是逐条插入。速度太慢了,1秒钟就三十多条,想请问各位大虾们,这插入速度正不正常?有没有比较快的操作方法?
解决方案 »
- 看了很多想关帖子,还是不找不到方法,再求助了: DBGrid/DBGridEh picklist有没有下拉事件
- delphi开发群
- 如何点击一个下级treeview节点时,依次得到这个节点连接到顶级节点的每个父节点
- 关于AnimateWindow
- 怎样读取dbgrid中的记录?(在线等待)!!!!!!!
- 我想利用ADO控件来分别动态连接DBF文件,我找了一段原来用于ACCESS的代码,改了一下没通过,请问是什么问题?
- CET-4成绩已经通过,特来散分
- 各位帮帮我,不然我要下岗了、、、^o^
- 怪事,我的程序在运行时提示内存错误,用单步却可以通过, 为什么?
- 我要改变数据库的编辑状态,但为何老出错!!请高手指点迷津!!!
- delphi读取txt数据问题(基于readln的)
- delphi 如何画曲线呢?
var
sqlstr:string;begin
sqlstr := 'insert into Contact'+
'(ContactId,ContactName,ContactMobile,HeadShip,Sex,Birthday,'+
'CoFax,CoAddr,HomeTel,HomeAddr,Email,CoDept,CoTel,Description,'+
'Province,City,Trade,CoName) values(:ContactId,:ContactName,'+
':ContactMobile,:HeadShip,:Sex,:Birthday,:CoFax,:CoAddr,:HomeTel,'+
':HomeAddr,:Email,:CoDept,:CoTel,:Description,:Province,:City,:Trade,:CoName)';
tmpADO.Close;
tmpADO.SQL.Clear;
tmpADO.sql.add(sqlstr);
for row:=1 to SheetGrid.RowCount-1 do
begin
tmpADO.Parameters.Items[0].Value :=cid;
tmpADO.Parameters.Items[1].Value := name;
tmpADO.Parameters.Items[2].Value :=mobile;
....
tmpADO.Execsql;
end;
end;
sqlstr:string;begin
sqlstr := 'select * from Contact where 1<>1';
tmpADO.Close;
tmpADO.SQL.Clear;
tmpADO.sql.add(sqlstr);
tmpADO.open;
tmpADO.edit;
tmpADO.FieldByName('ContactId').Value :=cid;
tmpADO.FieldByName('ContactName').Value := name;
tmpADO.FieldByName('ContactMobile').Value :=mobile;
tmpADO.FieldByName('HeadShip').Value:=pos;
tmpADO.FieldByName('Sex').Value :=sex;
......
tmpADO.post;
end;
sqlstr:string;begin tmpADO.CursorType := ctKeyset;
tmpADO.LockType:=ltBatchOptimistic;
sqlstr := 'select * from Contact where 1<>1';
tmpADO.Close;
tmpADO.SQL.Clear;
tmpADO.sql.add(sqlstr);
for row:=1 to SheetGrid.RowCount-1 do
tmpADO.open;
tmpADO.append;
tmpADO.FieldByName('ContactId').Value :=cid;
tmpADO.FieldByName('ContactName').Value := name;
tmpADO.FieldByName('ContactMobile').Value :=mobile;
tmpADO.FieldByName('HeadShip').Value:=pos;
tmpADO.FieldByName('Sex').Value :=sex;
......
tmpADO.post;
......
tmpado.UpdateBatch(arall);end;