你可以在这里搜索使用sql语言的载入方式。
我给你一段代码参考,方法效率很低,供参考。
function InputDataFromExcel(FileName:string; tablename:string; Append_flag:Boolean; keyFieldName:string):integer;
var no,i,j:integer;
tt:TStrings;
SheetName:string; //
begin
with datam.DataM1 do //首先查找数据库中是否已经存在。如果存在,则修改已经存在的数据。
begin
ExcelConnection.Close;
ExcelConnection.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=Excel Files;'+
'DBQ='+FileName+';DriverId=790;MaxBufferSize=2048;PageTimeout=5;"';
ExcelConnection.Open;
tt:=tstringlist.Create;
ExcelConnection.GetTableNames(tt,true);
SheetName:=tt.Strings[0];
ExcelQuery1.Close;
ExcelQuery1.SQL.Clear;
ExcelQuery1.SQL.Add('select * from ['+SheetName+'] '); //全部数据
ExcelQuery1.Open; //打开EXCEL文件.
if ExcelQuery1.IsEmpty then Exit; //excel中无数据,无法载入.
if Append_flag=false then
begin
command1.CommandText:='delete from '+tablename;
command1.Execute;
end;
inputdata.Close; //打开要载入数据的表.
inputdata.SQL.Clear;
inputdata.SQL.Add('select * from '+tablename);
inputdata.Open;
tt.Clear;
//寻找载入数据库中,字段对应的情况.
for i:=0 to inputdata.FieldCount-1 do
begin
for j:=0 to ExcelQuery1.FieldCount-1 do
begin
if uppercase(Trim(inputdata.fields.fields.FullName))=uppercase(Trim(ExcelQuery1.fields.fields[j].FullName)) then
// if Trim(inputdata.fields.fields.FullName)=Trim(ExcelQuery1.fields.fields[j].FullName) then
begin
tt.Add(Trim(inputdata.fields.fields.FullName));
end;
end;
end;
no:=0;
if Append_flag=false then
begin//全新追加,不考虑该项数据,
repeat
if ExcelQuery1.fieldbyname(tt.Strings[0]).IsNull then break;
inputdata.Append;
inputdata.Edit;
for i:=0 to tt.Count-1 do
begin
inputdata.fieldbyname(tt.Strings).AsVariant:=ExcelQuery1.fieldbyname(tt.Strings).AsVariant;
end;
inputdata.Post;
inc(no);
ExcelQuery1.Next;
Application.ProcessMessages;
until ExcelQuery1.Eof;
end
else
begin//覆盖,先检查是否已经存在,存在的覆盖。
for i:=0 to tt.Count-1 do
begin//寻找关键字段的序号
if keyFieldName=tt.Strings then
begin
j:=i;
break;
end;
end;
repeat
if ExcelQuery1.fieldbyname(tt.Strings[0]).IsNull then break;
if not inputdata.Locate(keyFieldName,ExcelQuery1.fieldbyname(tt.Strings[j]).AsVariant, [loCaseInsensitive]) then
inputdata.Append; //如果该想数据不存在, 则追加新的,
inputdata.Edit;
for i:=0 to tt.Count-1 do
begin
inputdata.fieldbyname(tt.Strings).AsVariant:=ExcelQuery1.fieldbyname(tt.Strings).AsVariant;
end;
inputdata.Post;
inc(no);
ExcelQuery1.Next;
Application.ProcessMessages;
until ExcelQuery1.Eof;
end;
ExcelConnection.Close;
end;
InputDataFromExcel:=no;
// messagedlg('数据载入完毕,共载入数据:'+IntToStr(no)+' 项。',mtinformation, [mbok],0);
end;