excel数据导入到数据库---速度太慢求优化
我先说一下下面代码的思路,Button1先把excel数据导入到dbgrid中,Button2把dbgird的数据导入到数据库
有4000条数据,需要1分钟,速度太慢了,请各位大虾帮忙看看
如嫌分少,问题完美解决了,我在散100分!
有4000条数据,需要1分钟,速度太慢了,请各位大虾帮忙看看
如嫌分少,问题完美解决了,我在散100分!
Unit Unit1;
代码
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, Grids, DBGrids, ComObj;
Type
TForm1 = Class(TForm)
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
OpenDialog1: TOpenDialog;
Procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
PRIVATE
{ Private declarations }
PUBLIC
{ Public declarations }
End;
Var
Form1: TForm1;
Implementation
{$R *.dfm}
Procedure TForm1.Button1Click(Sender: TObject);
Var
ASql, APath: String;
ExcelApp: Variant;
AInt: Integer;
Begin
If OpenDialog1.Execute Then
APath := OpenDialog1.FileName
Else
Exit;
If not FileExists(APath) Then
Begin
ShowMessage('您所选择的文件不存在!');
Exit;
End;
Try
//ADOQuery1.DisableControls;
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.Workbooks.Open(APath);
ExcelApp.WorkSheets[1].Activate;
ASql := 'select * from stock where 1=2'; //表名 ,也可以在show里面先打开数据集
ADOQuery1.Close; //数据集的 LockType属性 要设为 ltBatchOptimistic
ADOQuery1.SQL.Text := ASql; //才可以批量保存
ADOQuery1.Open;
// DataSource1.DataSet:=nil;
For AInt := 2 To ExcelApp.ActiveSheet.UsedRange.rows.count Do //AInt 起始行数,重哪行开始导入,Aint初始值就是几
Begin
ADOQuery1.Append;
ADOQuery1.FieldByName('st_id').AsString := ExcelApp.Cells[AInt, 1].Value; //Aint是第几行,后面的数字是第几列,
ADOQuery1.FieldByName('st_dcdate').AsDateTime := ExcelApp.Cells[AInt, 2].Value;
ADOQuery1.FieldByName('st_gc').AsString := ExcelApp.Cells[AInt, 3].Value;
ADOQuery1.FieldByName('st_kcd').AsString := ExcelApp.Cells[AInt, 4].Value;
ADOQuery1.FieldByName('st_zt').AsString := ExcelApp.Cells[AInt, 5].Value;
ADOQuery1.FieldByName('st_lx').AsString := ExcelApp.Cells[AInt, 6].Value;
ADOQuery1.FieldByName('st_sx').AsString := ExcelApp.Cells[AInt, 7].Value;
ADOQuery1.FieldByName('st_gys').AsString := ExcelApp.Cells[AInt, 8].Value;
ADOQuery1.FieldByName('st_sku').AsString := ExcelApp.Cells[AInt, 9].Value;
ADOQuery1.FieldByName('st_spmc').AsString := ExcelApp.Cells[AInt, 10].Value;
ADOQuery1.FieldByName('st_pch').AsString := ExcelApp.Cells[AInt, 11].Value;
ADOQuery1.FieldByName('st_tkdate').AsDateTime := ExcelApp.Cells[AInt, 12].Value;
ADOQuery1.FieldByName('st_kw').AsString := ExcelApp.Cells[AInt, 13].Value;
ADOQuery1.FieldByName('st_qty').AsString := ExcelApp.Cells[AInt, 14].Value;
ADOQuery1.FieldByName('st_bzs').AsString := ExcelApp.Cells[AInt, 15].Value;
ADOQuery1.FieldByName('st_tj').AsSingle := ExcelApp.Cells[AInt, 16].Value;
ADOQuery1.FieldByName('st_zl').AsFloat := ExcelApp.Cells[AInt, 17].Value;
ADOQuery1.FieldByName('st_tps').AsFloat := ExcelApp.Cells[AInt, 18].Value;
ADOQuery1.FieldByName('st_mj').AsFloat := ExcelApp.Cells[AInt, 19].Value;
ADOQuery1.FieldByName('st_kcts').AsString := ExcelApp.Cells[AInt, 20].Value;
ADOQuery1.FieldByName('st_bz').AsString := ExcelApp.Cells[AInt, 21].Value;
//因为你的excel是固定格式,所以,这里需要写死;
ADOQuery1.Post;
End;
//ADOQuery1.EnableControls;
Finally
ExcelApp.WorkBooks.Close;
ExcelApp.quit;
ShowMessage('读取库存数据成功 ');
End;
End;
procedure TForm1.Button2Click(Sender: TObject);
begin
try
ADOQuery1.UpdateBatch;
ShowMessage('数据导入成功');
except
ShowMessage('数据库存储错误!');
end;
end;
End.
...全文
相关推荐
excel大量数据如何导入到oracle数据库中
### Excel大量数据导入Oracle数据库的方法#### 一、前言在日常工作中,我们经常会遇到需要将Excel中的数据批量导入到Oracle数据库的情况。
Qt 导出Excel(二)(数据库 | table) 导出速度太慢 , 二维数组思路
二维数组思路1.线程导出2.快速导出参考博文 1.线程导出 开启新线程导出方法,虽然是在当前界面不受影响,但是在时间意义上,并没有做到改善,如果是那种需要实时数据的导出,就显得比较捉襟肘见了。 2.快速导出 为什么之前的导出速度慢,就是因为数据是一行一行写进Excel的,如果数据量大,导出速度也就必然是慢了;所以减少写出次数,就会相对的节约时间。 在原来的基础上优化代码: Qt 导出Excel(一)(数据库 | table) 导出速度太慢 , 使用新的线程导出 /** * @brief HistoryS
用Python将Excel数据导入到SQL Server的例子
标题中的例子展示了如何使用Python将Excel数据导入到SQL Server数据库中。这个操作在数据分析和数据管理中非常常见,特别是当需要处理大量结构化的表格数据时。
javaWeb导入Excel分析后添加到数据库
**性能优化**: 为了提高导入速度,可以采用多线程并行处理Excel文件的行,或者使用数据库的批量导入功能,如MySQL的LOAD DATA INFILE。8.
使用JAVA内存数据库h2database性能优化
**数据模型优化**:设计高效的数据库模式,减少冗余,使用合适的数据类型,以及优化索引策略,可以大幅提高查询速度。2.


数据库相关
