在客户端将excel数据导入远程sql 2000中,大量记录(100分)

  • 主题发起人 主题发起人 lileo
  • 开始时间 开始时间
L

lileo

Unregistered / Unconfirmed
GUEST, unregistred user!
在客户端将excel导入sql 2000中,大量记录,有什么快速的方法???
像在后台导入那样快的,知道的朋友给我讲讲,谢谢了,急啊。。。。。。。。
希望讲得详细点/
谢谢。。。
 
//Evan: 从excel文件导入数据
...
type
...
edFileName: TEdit;
con1: TADOConnection;
ads1: TADODataSet;
gdData: TAdvStringGrid;
lst1: TListBox;
gd1: TDBGrid;
ds1: TDataSource;
...

function DoFinish: Boolean;
var
i, j, recordnum: Integer;
mCard1, mCard2: TStringList;
mPointNumber: string;
begin
recordnum := 0;

if ads1.Active then
begin
mCard1 := TStringList.Create;
mCard2 := TStringList.Create;
for i := 1 to gdData.RowCount - 1 do
begin
mCard1.Clear;
mCard2.Clear;
Split(gdData.Cells[1, i], ',', mCard1);
Split(gdData.Cells[2, i], ',', mCard2);
for j := 0 to mCard1.Count - 1 do
begin
if j < mCard2.Count then mPointNumber := mCard2.Strings[j]
else mPointNumber := '';
加入Sql命令写表
...
Inc(recordnum);
end;
end;
mCard1.Free;
mCard2.Free;
end;
end;

procedure LoadTables;
begin
if con1.Connected then con1.Close;
con1.ConnectionString :=
Format(
'Provider=Microsoft.Jet.OLEDB.4.0;' + #13#10 +
'Data Source=%s;' + #13#10 +
'Extended Properties=Excel 8.0;' + #13#10 +
'Persist Security Info=False', [edFileName.Text]);
con1.Connected := True;
con1.GetTableNames(lst1.Items);
end;

procedure lst1Click(Sender: TObject);
var
i: integer;
mTableName: string;
mCol: TColumn;
begin
inherited;

for i := 0 to lst1.Count - 1 do
begin
if lst1.Selected then
begin
mTableName := lst1.Items.Strings;
Break;
end;
end;

//打开数据集
if mTableName <> '' then
begin
if ads1.Active then
ads1.Close;

gd1.DataSource := nil;
ads1.CommandText := ' select * from [' + mTableName + '] ';

try
ads1.Open;
ads1.Last;
ads1.First;
except
ErrMsg('打开出错,可能是不支持此表。');
Exit;
end;

gd1.Columns.Clear;
for i := 0 to ads1.Fields.Count - 1 do
begin
mCol := gd1.Columns.Add;
mCol.Title.Caption := ads1.Fields.Fields.FieldName;
mCol.Width := 100;
mCol.FieldName := ads1.Fields.Fields.FieldName;
end;

gd1.DataSource := ds1;
end;

end;
你改改就可以了。如果要加快速度,建议采用以下方法试试:
1、可以把数据读到内存中再插表而不要加载到Grid中;
2、把Excel文件另存为如下文本文件格式后再导入,这样速度会快很多:
张三,男,23,工程师,本科,2000
张三2,男,25,工程师,本科,2500
...
 
EXCEL可以装几十万记录???
 
就是。excel好像装不了那么的数据量吧
 
TO:szhcracker
这样太慢了,我15000多记录,一个小时还没有导完,
而且还会发生阻塞,不可取啊
 
TO:
Adao213,struts,是没有这么多,这不都是急出来的的
呵呵
即改过来
 
发生阻塞是不是网络的原因?你把Excel文件改成文本文件试试,应该不会这么慢的。如果你是导入到远程的SQL Server数据库上,则要注意网络、防火墙等的状况。可以先导到本地后把数据库文件备份再到服务器端恢复。
 
问题已经解决,用ODBC方法,太感谢了
下个星期结贴
 
楼主,能公布下你的解决方法吗?
这是个很实用的东东,拜托楼主了
 
TO suosng:
你可以查下温血剑富翁的帖,只要修改下就能实现导入远程SQL数据库了
再次感谢各位热心的朋友
结贴了
 
多人接受答案了。
 
后退
顶部