关于execl数据导入sql的问题

coderee 2009-02-09 04:23:54
关于execl数据导入sql的问题或是execl通过delphi导入sql搜索了很多,都没有成功,有以下三种,很疑惑,到底有没有导入的方法呢?

1.procedure TForm1.Button1Click(Sender: TObject);
var
sSql, mdbpath, xlspath: string;
begin
if (trim(edit1.Text) = '') or (trim(edit2.Text) = '') then
begin
MessageBox(GetActiveWindow(), '请正确选择相关路径!', '警告', MB_OK + MB_ICONWARNING);
exit;
end;
mdbpath := trim(edit1.Text); //MDB路径
xlspath := trim(edit2.Text); //Excel路径
ADOConnection1.Connected := False;
try
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + mdbpath + ';Persist Security Info=False';
ADOConnection1.Connected := true;
try
//删除所有的记录
adoquery1.Close;
adoquery1.SQL.Clear;
sSql :='Delete * from Classes';
adoquery1.SQL.Text := sSql;
adoquery1.Execsql;
//添加记录
adoquery1.Close;
adoquery1.SQL.Clear;
sSql :='Insert into Classes (名次, 姓名, 性别, 总分)' + ' SELECT' + ' 名次, 姓名, 性别, 总分' + ' FROM [excel 8.0;database=' + xlspath + '].[Classes$]';
adoquery1.Parameters.Clear;
adoquery1.ParamCheck := false;
adoquery1.SQL.Text := sSql;
adoquery1.Execsql;
MessageBox(GetActiveWindow(), '批量导入EXCEL成功!', '警告', MB_OK + MB_ICONWARNING);
except
MessageBox(GetActiveWindow(), '批量导入EXCEL失败!', '警告', MB_OK + MB_ICONWARNING);
end;
except
MessageBox(GetActiveWindow(), '连接ACCESS失败!', '警告', MB_OK + MB_ICONWARNING);
end;
end;



2.SELECT * INTO ww1.dbo.ee
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=c:\ee.xls',
3.SELECT * FROM [ee$]') SELECT *
FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’,
’Data Source="xls文件的地址";User ID=Admin;Password=;Extended properties=Excel 5.0’)...工作区的名称


...全文
141 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhy1450 2009-02-10
  • 打赏
  • 举报
回复
不会你怎么拿到我的源码了哦,加我qq我给你看全部源码
zhy1450 2009-02-10
  • 打赏
  • 举报
回复
我给你个例子,是导入access的,超级简单
procedure TForm1.Button1Click(Sender: TObject);
var
sSql, mdbpath, xlspath: string;
begin
if (trim(edit1.Text) = '') or (trim(edit2.Text) = '') then
begin
MessageBox(GetActiveWindow(), '请正确选择相关路径!', '警告', MB_OK + MB_ICONWARNING);
exit;
end;
mdbpath := trim(edit1.Text); //MDB路径
xlspath := trim(edit2.Text); //Excel路径
ADOConnection1.Connected := False;
try
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + mdbpath + ';Persist Security Info=False';
ADOConnection1.Connected := true;
try
//删除所有的记录
adoquery1.Close;
adoquery1.SQL.Clear;
sSql :='Delete * from Classes';
adoquery1.SQL.Text := sSql;
adoquery1.Execsql;
//添加记录
adoquery1.Close;
adoquery1.SQL.Clear;
sSql :='Insert into Classes (名次, 姓名, 性别, 总分)' + ' SELECT' + ' 名次, 姓名, 性别, 总分' + ' FROM [excel 8.0;database=' + xlspath + '].[Classes$]';
adoquery1.Parameters.Clear;
adoquery1.ParamCheck := false;
adoquery1.SQL.Text := sSql;
adoquery1.Execsql;
MessageBox(GetActiveWindow(), '批量导入EXCEL成功!', '警告', MB_OK + MB_ICONWARNING);
except
MessageBox(GetActiveWindow(), '批量导入EXCEL失败!', '警告', MB_OK + MB_ICONWARNING);
end;
except
MessageBox(GetActiveWindow(), '连接ACCESS失败!', '警告', MB_OK + MB_ICONWARNING);
end;
BitBtn1.Enabled:=true;
end;
coderee 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhy1450 的回复:]
不会你怎么拿到我的源码了哦,加我qq我给你看全部源码
[/Quote]
说qq
coderee 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wxmijl 的回复:]
select 字段名 from OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 5.0;Database=c:\aa.xls, 'SELECT * FROM [sheet1$]')

注:要导入的excel文件,也就是aa.xls文件必须关闭.
[/Quote]
在sql7查询分析器里执行以上语句提示
服务器: 消息 7312, 级别 0, 状态 1, 行 1
[OLE/DB provider returned message: Microsoft Jet 数据库引擎找不到对象'Sheet1$'。请确定对象是否存在,并正确地写出它的名称和路径。]

耗时:
188

执行select type2,snw from OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 5.0;Database=\\192.168.150.69\app\ee.xls','SELECT * FROM [Sheet1$]')
提示
服务器: 消息 7399, 级别 16, 状态 1, 行 2
OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 报错。提供程序未给出有关错误的任何信息。

耗时:
47
我用的时客户端,sql装在服务器上,我的机器ip为192.168.150.69;
你确信这样能行吗,试过?

wxmijl 2009-02-10
  • 打赏
  • 举报
回复
特别说明:如果数据库服务器和客户程序不是同一台电脑,要用网络地址,c:\aa.xls换成\\192.168.0.23\app\aa.xls;如果访问客户程序所在的机器需要用户名密码,就麻烦多了.
wxmijl 2009-02-10
  • 打赏
  • 举报
回复
select 字段名 from OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 5.0;Database=c:\aa.xls, 'SELECT * FROM [sheet1$]')

注:要导入的excel文件,也就是aa.xls文件必须关闭.
22222bbb 2009-02-10
  • 打赏
  • 举报
回复
可以直接用ADO打开EXCEL,然后循环插入到SQL中,如果用DBF导的话EXCEL还要另存为,而且EXCEL里如果单元格字符数多又没有给单元格拉到足够显示的长度那么DBF里的数据会自动截断的,会造成数据丢失.
starluck 2009-02-09
  • 打赏
  • 举报
回复
' SELECT' + ' 名次, 姓名, 性别, 总分' + ' FROM [excel 8.0;database=' + xlspath + '].[Classes$]';

先 在查詢分析器看下有沒有數據。

llh6795 2009-02-09
  • 打赏
  • 举报
回复
手动导过,写程序还没有做过
bdmh 2009-02-09
  • 打赏
  • 举报
回复
你跟踪一下,看看具体的报错信息,不要显示except中的提示

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧