我原来的代码如下:
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.Visible := False ;
ExcelApp.WorkBooks.Add;
ExcelApp.WorkBooks.Open(xlsFileName );
ExcelApp.WorkSheets[1].Activate;
然后判断该条记录是否已存在于Table中,若无则将Cell中的数据存入到Table 中
Excel中的记录约有10000条,速度很慢,
不知有否更好的方案?
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.Visible := False ;
ExcelApp.WorkBooks.Add;
ExcelApp.WorkBooks.Open(xlsFileName );
ExcelApp.WorkSheets[1].Activate;
然后判断该条记录是否已存在于Table中,若无则将Cell中的数据存入到Table 中
Excel中的记录约有10000条,速度很慢,
不知有否更好的方案?
SELECT * into table FROM Tab1 IN [ODBC]
[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]
INSERT INTO urtable
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')
FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="C:\temp\b.xls";Extended Properties="Excel 5.0;HDR=Yes;";Persist Security Info=False')
//open excel
procedure TForm1.ConnectClick(Sender: TObject);
var
str,path,xlsName:string;
begin
//connect excel
path:=extractfilepath(application.exename);
OpenDialog1.InitialDir :=path;
OpenDialog1.Filter :='*.xls|*.xls';
if OpenDialog1.Execute then
xlsName :=extractfilename(OpenDialog1.FileName);str:='Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source= ' + path + xlsName + ';Extended Properties=Excel 8.0;' +
'Persist Security Info=False';
conn.Close;
conn.ConnectionString :=str;
try
conn.Connected :=true;
Adotable1.Close;
Adotable1.TableDirect:=True ;
adotable1.tablename:='sheet1$';
tType.ItemIndex :=-1;
try
adotable1.Open;
dbgrid1.Columns[0].Width :=50;
dbgrid1.Columns[1].Width :=50;
dbgrid1.Columns[2].Width :=50;
dbgrid1.Columns[3].Width :=80;
dbgrid1.Columns[4].Width :=80;
dbgrid1.Columns[5].Width :=200;
except
showmessage('Open Error');
end;
except
self.Caption :='Excel connect error';
exit;
end;end;//导入,我使用批处理,adoquery1.locktype->ltBatchOptimistic
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from tablename where 0=1');
ADOQuery1.Open;ADOTable1.First;
while not ADOTable1.Eof do
begin
ADOQuery1.Append;
ADOQuery1.FieldByName('xx').AsString :=trim(Adotable1.fieldbyname('yy').AsString );
//和上句相同,相应字段数据导入即可
ADOQuery1.Post;
ADOTable1.Next;
end;
ADOQuery1.UpdateBatch();
showmessage('over');
在SQL Server中做一个DTS导入包
然后在程序中运行之