在delphi中怎样将Excel文件导入Sql中 ( 积分: 50 )

  • 主题发起人 主题发起人 642299277
  • 开始时间 开始时间
6

642299277

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi中怎样将Excel文件导入Sql中?在线等待
 
..给段代码你..自己看吧..
procedure Tindatafm.BitBtn1Click(Sender: TObject);
var str,s:string;
begin
s:='insert into pro_info'+
'a,b,c,d'+
//导入到数据库的字段'
'select'+' '+
'aa,bb,cc,dd'+' '+
//EXCEL表的列标题,相当于对应数据库里的字段名
'FROM OPENROWSET('+''''+'Microsoft.Jet.OLEDB.4.0'+''''+',';
s:=s+''''+'Excel 8.0;Database='+edit1.text+';HDR=YES'+''''+',';
//edit1.text 为文件路径
s:=s+''''+'SELECT * FROM [Sheet1$]'+''''+')';
//Sheet1$ 为EXCEL表里的工作表名
ADOConnection1.Execute(s);
application.MessageBox('导入成功!','提示',0);
end;

注意下引号..应该没问题..我是这么用的。
 
不明白你要的是什么,文件还是里面的数据
 
///--------------------------------------------------------------------
AdoQuery:=TADOQuery.Create(nil);
try
{删除存在的表}
AdoQuery.Connection:=ADOConnection1;
AdoQuery.SQL.Text:=Format('SELECT name FROM sysobjects WHERE name = ''%s'' AND type = ''U''',[edtSqlTable.Text]);
AdoQuery.Open;
if AdoQuery.RecordCount>0 then
begin
AdoQuery.Close;
AdoQuery.SQL.Text:=('Drop Table ['+edtSqlTable.Text+']');
AdoQuery.ExecSQL;
end;
{创建存储过程}
AdoQuery.SQL.Clear;
AdoQuery.SQL.Add('if exists (select * from sysobjects where id = object_id(N''[usp_TransExcel]'') and OBJECTPROPERTY(id, N''IsProcedure'') = 1)');
AdoQuery.SQL.Add('drop procedure [dbo].[usp_TransExcel]');
AdoQuery.ExecSQL;
AdoQuery.SQL.Clear;
AdoQuery.SQL.Add('Create PROCEDURE usp_TransExcel(');
AdoQuery.SQL.Add(' @tablename VARCHAR(50),');
AdoQuery.SQL.Add(' @ExcelName VARCHAR(50),');
AdoQuery.SQL.Add(' @SheetName VarChar(50)) AS ');
AdoQuery.SQL.Add('declare @s nvarchar(4000)');
AdoQuery.SQL.Add('set @s=''');
AdoQuery.SQL.Add('select * into [''+@tablename+''] from opendataSource(''''Microsoft.Jet.OLEDB.4.0'''',''''Data Source="''+@ExcelName+''";Extended Properties="Excel 5.0;HDR=Yes;";Persist Security Info=False'''')...[''+@SheetName+''$]''');
AdoQuery.SQL.Add('exec sp_executesql @s');
AdoQuery.SQL.Add(' ,N''@tablename varchar(50),');
AdoQuery.SQL.Add(' @ExcelName varchar(50),');
AdoQuery.SQL.Add(' @SheetName varchar(50)''');
AdoQuery.SQL.Add(' ,@tablename,@ExcelName,@SheetName');
AdoQuery.ExecSQL;
finally
AdoQuery.Free;
end;

{执行转换}
ADOStoredProc1.Parameters[0].Value:=edtSqlTable.Text;
ADOStoredProc1.Parameters[1].Value:=edtExcelFile.Text;
ADOStoredProc1.Parameters[2].Value:=cbbSheet.Text;
ADOStoredProc1.ExecProc;
btnViewSql.Click;
 
不應該用 存儲過程吧
 
jhddx:的方法我试了,每次都提示’验证失败‘,存储过程是不能用的,因为我要导入的Excel文件很多,每次导入Excel文件后,就把这次导入的Excel文件的内容加入到SQL表中.
我还想把Excel文件的文件名一起加入到SQL表中,以该如何做?在线等待!
 
好像不行。
 
Select * From
OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="c:/a.xls";Extended Properties=Excel 8.0;Persist Security Info=False')...Sheet1$
 
存儲過程,程序中都可以操作的,還有控件方式XLSReadWriteII.FS.v2.0.14.For.Delphi567.rar
 
后退
顶部