ADO 连接Excel 的问题

右脚小拇指 2010-09-01 09:09:42
我现在做的是简单的例子,用ADO 连接Excel

procedure TForm1.btn1Click(Sender: TObject);
const
Connectionstr =
'Provider=Microsoft.ACE.OLEDB.12.0;Password="";Data Source=%s;Extended Properties=''Excel 12.0;IMEX=1;HDR=YES'';Persist Security Info=True;';
var
OpenDlg: TOpenDialog;
sFilename: string;
ArrValue: array of array of string;
i, j: Integer;
begin
OpenDlg := TOpenDialog.Create(nil);
OpenDlg.Filter := 'Excel文件|*.xls;*.xlsx';
try
if OpenDlg.Execute then
begin
sFilename := OpenDlg.FileName;
tbl1.Close;
tbl1.ConnectionString := Format(Connectionstr, [sFilename]);
tbl1.TableDirect := True;
tbl1.TableName := 'Sheet1$';
tbl1.Open;
end
finally
FreeAndNil(OpenDlg);
end;
end;



运行后,它总是报“未找到提供程序。该程序可能未正确安装”

在网上找了信息是要注册 这个
regsvr32 "C:\Program Files\Common Files\System\Ole DB\sqloledb.dll"

但发现还是不行。应该怎么办啊



...全文
381 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiaozhu009 2010-11-23
  • 打赏
  • 举报
回复
学习学习~~
zgplyl 2010-09-15
  • 打赏
  • 举报
回复
学习了
nicholasse7en 2010-09-11
  • 打赏
  • 举报
回复
进来学习学习
xjq2003 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kye_jufei 的回复:]
Delphi adoquery 連接excel:

第一部分:
1. 设置ADOConnection的ConnectionString属性的OLE DB的提供者要选择Microsoft Jet 4.0 OLE DB Provider(这本来是用于连接Access数据库的驱动程序,但也可打开Excel文件),按 "下一步"按钮

2. 选择数据库名称。注意:Excel的扩展名是*.xl……
[/Quote]够详细,学习一下,我用excel2003
kye_jufei 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huang_yungui0515 的回复:]
连接Excel 2003 的没问题,
连2007 就报那个错
[/Quote]

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES";
hongqi162 2010-09-07
  • 打赏
  • 举报
回复
ajige 2010-09-06
  • 打赏
  • 举报
回复
学习学习 ~~
lyhoo163 2010-09-06
  • 打赏
  • 举报
回复
使用Serveru单元控件连接excel也是很方便的。
右脚小拇指 2010-09-01
  • 打赏
  • 举报
回复
连接Excel 2003 的没问题,
连2007 就报那个错
kye_jufei 2010-09-01
  • 打赏
  • 举报
回复
類似這樣,LZ請結合上面的方法再自行研究一下。。。

.........
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Edit1.Text:=OpenDialog1.FileName;
ADOConnection1.Close;
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+OpenDialog1.FileName+';Extended Properties=Excel 8.0;Persist Security Info=False';
ADOConnection1.LoginPrompt:=false;
try
ADOConnection1.Open;
try
Adoquery1.Close;
Adoquery1.SQL.Clear;
Adoquery1.SQL.Add(' select * from [sheet1$] ');
Adoquery1.ExecSQL;
except
showmessage('NG!');
exit;
end;
except
Application.MessageBox('NG','提示',MB_ICONINFORMATION);
end;
end;
end;
.........
kye_jufei 2010-09-01
  • 打赏
  • 举报
回复
Delphi adoquery 連接excel:

第一部分:
1. 设置ADOConnection的ConnectionString属性的OLE DB的提供者要选择Microsoft Jet 4.0 OLE DB Provider(这本来是用于连接Access数据库的驱动程序,但也可打开Excel文件),按 "下一步"按钮

2. 选择数据库名称。注意:Excel的扩展名是*.xls,而默认文件类型是Microsoft Access 数据库(*.mdb), 我们就选择"全部文件(*.*)"吧,接着选择我们要连接的Excel文件!!如果在当前路径,就直接填2007.xls。 这时先别慌按 "测试连接"按钮,不然会出现错误对话框的。可以试试看

3. 在"所有"选项卡中找到 "Extended Properties",双击它或者按"编辑值"按钮,设置Extended Properties为"Excel 8.0 "。

4. 我们返回"连接"选项卡,按 "测试连接"按钮。测试连接成功!!! ^_^ 最后,设置完成后的ConnectionString中的各项参数为: Provider=Microsoft.Jet.OLEDB.4.0 Data Source=2007.xls //因为在当前路径 Extended Properties=Excel8.0 Persist Security Info=False

第二部分:
接着就用ADOTable,ADODataSet和ADOQuery连接到刚才的ADOConnection,当然你可以直接设置ADOTable,ADODataSet或ADOQuery的ConnectionString属性。

1. ADOTable设置: a. ADOTable的TableName属性值:系统自动生成Excel的Sheet1$,Sheet2$和Sheet3$。直接Active设置成true,系统会报告SQL语句格式错误等信息。 b. 找到TableDirect属性,设置为True。因为,访问Excel文件是直接的数据文件访问,不是通过SQL语句来操作游标访问的。接着将Active设置成true。
c. 可以不使用TableDirect属性,将TableName属性中的Sheet1$,Sheet2$和Sheet3$分别改成[Sheet1$],[Sheet2$]和[Sheet3$]。 对,就是加"[]"就行了。

2. ADODataSet设置: a. 只需要将CommandType属性设置为cmdTableDirect,选择工作表,Active设置成true就成功了。 b. 也可以将CommandType属性设置为cmdTable,将CommandText属性中改成[Sheet1$],[Sheet2$]和[Sheet3$]。

3. ADOQuery设置: SQL属性如下: select * from [sheet1$] 总结:复习以前所学的,尝试新的连接方法,有益于加深记忆。我发现工作表名后面都要多加一个$符号,还有就是打开ADOTable,ADODataSet或者ADOQuery以后,它们的CursorType自动变成ctStatic。

2,497

社区成员

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

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