ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
Trim(OpenDialog1.FileName) +';Extended Properties=Excel 8.0;Persist Security Info=False';
ADOConnection1.Connected:=True;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := 'SELECT * FROM [Sheet1$]';
---- EXCEL的表单名只能写死么?[表单名$] ?而不能程序自动判定?
不想用ole方式,太慢而且机子中必须得装有excel。
另,ado,方式下如何读excel 2007?
谢谢了!
10 个解决方案
#1
读excel 2007的问题我自己已经解决:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MyExecl.xlsx;Extended Properties=excel 12.0;Persist Security Info=False
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MyExecl.xlsx;Extended Properties=excel 12.0;Persist Security Info=False
#2
if opendialog1.execute then
with adoquery do
begin
close;
sql.clear;
sql.add('select * from opendatasource(''microsoft.jet.oledb.4.0'',''data source="'+opendialog1.filename+'"',user id=admin;password=;extended properties=excel 5.0')...[sheet1$]');
open;
end;
#3
鶴嘯九天兄弟, 你没看清楚我问的问题,呵呵
你还是没有解决打开excel工作簿后,工作表名问题(如果我打开的文件工作表名为其它呢?用SHEET1 就出错了)
你还是没有解决打开excel工作簿后,工作表名问题(如果我打开的文件工作表名为其它呢?用SHEET1 就出错了)
#4
经过一下午的研究,找到其他方法了
用adoconnection的GetTableNames方法,得到所有表名
本问题就暂告一段落。如果有同学知道 ADOQuery也能用,那就再跟贴吧。谢谢
用adoconnection的GetTableNames方法,得到所有表名
本问题就暂告一段落。如果有同学知道 ADOQuery也能用,那就再跟贴吧。谢谢
#5
up一下!
#6
var
a_cc: TStrings;
begin
a_cc :=TStringList.Create;
with ADOConn do begin
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + OpenDialog1.FileName + ';Extended Properties=excel 8.0;Persist Security Info=false';
Connected := True;
GetTableNames(a_cc);{将EXCL文件中的表格名赋值于a_cc}
end;
with adoquery1 do begin
Close;
SQL.text:='select * from ['+a_cc[0]+']'{a_cc[0]得到EXCEL文件中的第一个表格的名}
Open;
end;
end;
#7
Study
#8
GetTableNames方法可以到数据库中的所有表名,ADO是封装在TADOConnection中,BDE是封装在TDatabase,dbExpress是封装在TSQLConnection中,另外BDE也可以用TSession,而如果是InterBase数据库则可以直接使用TIBDatabase
AdoQuery是取不到表名的,如果一定要用它,有一个思路,就是直接操作数据库的元数据表,如MS-SQL的sysobjects表
AdoQuery是取不到表名的,如果一定要用它,有一个思路,就是直接操作数据库的元数据表,如MS-SQL的sysobjects表
#9
已解决,谢谢各们的热心帮助。
adoconnection2.GetTableNames();
用这个可以取得
adoconnection2.GetTableNames();
用这个可以取得
#10
这个我也知道,但中文有问题
#1
读excel 2007的问题我自己已经解决:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MyExecl.xlsx;Extended Properties=excel 12.0;Persist Security Info=False
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MyExecl.xlsx;Extended Properties=excel 12.0;Persist Security Info=False
#2
if opendialog1.execute then
with adoquery do
begin
close;
sql.clear;
sql.add('select * from opendatasource(''microsoft.jet.oledb.4.0'',''data source="'+opendialog1.filename+'"',user id=admin;password=;extended properties=excel 5.0')...[sheet1$]');
open;
end;
#3
鶴嘯九天兄弟, 你没看清楚我问的问题,呵呵
你还是没有解决打开excel工作簿后,工作表名问题(如果我打开的文件工作表名为其它呢?用SHEET1 就出错了)
你还是没有解决打开excel工作簿后,工作表名问题(如果我打开的文件工作表名为其它呢?用SHEET1 就出错了)
#4
经过一下午的研究,找到其他方法了
用adoconnection的GetTableNames方法,得到所有表名
本问题就暂告一段落。如果有同学知道 ADOQuery也能用,那就再跟贴吧。谢谢
用adoconnection的GetTableNames方法,得到所有表名
本问题就暂告一段落。如果有同学知道 ADOQuery也能用,那就再跟贴吧。谢谢
#5
up一下!
#6
var
a_cc: TStrings;
begin
a_cc :=TStringList.Create;
with ADOConn do begin
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + OpenDialog1.FileName + ';Extended Properties=excel 8.0;Persist Security Info=false';
Connected := True;
GetTableNames(a_cc);{将EXCL文件中的表格名赋值于a_cc}
end;
with adoquery1 do begin
Close;
SQL.text:='select * from ['+a_cc[0]+']'{a_cc[0]得到EXCEL文件中的第一个表格的名}
Open;
end;
end;
#7
Study
#8
GetTableNames方法可以到数据库中的所有表名,ADO是封装在TADOConnection中,BDE是封装在TDatabase,dbExpress是封装在TSQLConnection中,另外BDE也可以用TSession,而如果是InterBase数据库则可以直接使用TIBDatabase
AdoQuery是取不到表名的,如果一定要用它,有一个思路,就是直接操作数据库的元数据表,如MS-SQL的sysobjects表
AdoQuery是取不到表名的,如果一定要用它,有一个思路,就是直接操作数据库的元数据表,如MS-SQL的sysobjects表
#9
已解决,谢谢各们的热心帮助。
adoconnection2.GetTableNames();
用这个可以取得
adoconnection2.GetTableNames();
用这个可以取得
#10
这个我也知道,但中文有问题