求助:关于将Excel2007表导入Access的问题。谢谢!
Excel2003导入Access的方法网上有好多答案,我贴一个如下:
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=×××.mdb; Persist Security Info=False';
ADOConnection1.Connected := true;
try
Adoquery1.Close;
Adoquery1.SQL.Clear;
sSql :=
'INSERT INTO ×××表(字段1, 字段2, 字段...)'+
' SELECT 字段1, 字段2, 字段...'+
' FROM [excel 8.0; database=' + path +'].[sheet1$]';
Adoquery1.SQL.Text := sSql;
Adoquery1.Execsql;
MessageBox(GetActiveWindow(), '批量导入EXCEL成功!', '提示', MB_OK +
MB_ICONWARNING);
except
MessageBox(GetActiveWindow(), '批量导入EXCEL失败!', '警告', MB_OK +
MB_ICONWARNING);
end;
但是,当Excel表为2007时,此方法不行,试着改了好多遍都不行,不知哪位大侠能指点一下。先谢谢!
上边的方法是先把Access连接上,再在sql语句中连接Excel2003。
现在Excel2007能连接上,所以我考虑能不能把上边的方法变一下:先把Excel2007连接上,再在sql语句中连接Access。代码应该是这样的:
'INSERT INTO ( 连接Access字串 )×××表(字段1, 字段2, 字段...)'+
' SELECT 字段1, 字段2, 字段...'+
' FROM [sheet1$]';
请高手指点。谢谢!!!
[解决办法]
Excel2003导入Access是不同数据源之间的导入和导出。网上搜的,供参考。
Transact-SQL语句进行导入导出:
1. 在SQL SERVER里查询access数据:
-- ======================================================
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
字串9
'Data Source="c:DB.mdb";User ID=Admin;Password=')...表名
-------------------------------------------------------------------------------------------------
2. 将access导入SQL server
-- ======================================================
在SQL SERVER 里运行:
SELECT *
INTO newtable
FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0',
'Data Source="c:DB.mdb";User ID=Admin;Password=' )...表名 www.mrans.com
-------------------------------------------------------------------------------------------------
3. 将SQL SERVER表里的数据插入到Access表中
-- ======================================================
在SQL SERVER 里运行:
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source=" c:DB.mdb";User ID=Admin;Password=')...表名
(列名1,列名2)
select 列名1,列名2 from sql表
实例:
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
m r a n s
'C:db.mdb';'admin';'', Test)
select id,name from Test
INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:trade.mdb'; 'admin'; '', 表名)
SELECT *
FROM sqltablename
-------------------------------------------------------------------------------------------------
二、 SQL SERVER 和EXCEL的数据导入导出
1、在SQL SERVER里查询Excel数据:
-- ======================================================
SELECT *
mrans.com
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
SELECT *
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:Financeaccount.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
-------------------------------------------------------------------------------------------------
2、将Excel的数据导入SQL server :
-- ======================================================
字串6
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
实例:
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:Financeaccount.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
-------------------------------------------------------------------------------------------------
[解决办法]
有些Excel 2003能用的方法,Excel 2007就不行了。
不过一条条读出来存进去是通用的。
[解决办法]
这个问题网上好象没有答案,不太好弄,期待高手的答复。
[解决办法]
研究了一下,没想到答案是超级简单。
先用 Microsoft.ACE.OLEDB.12.0 连接Excel2007表,连接字串是这样的:
Provider=Microsoft.ACE.OLEDB.12.0;Password="";Data Source=d:\xx表.xlsx;Extended Properties=Excel 12.0;Persist Security Info=False
然后语句这样写:
'INSERT INTO Access表(字段1, 字段2, 字段...) in "d:\xxx.mdb"'+
'SELECT 字段1, 字段2, 字段...'+
' FROM [sheet1$]';
关键是:in "d:\xxx.mdb"这句。超好笑吧。
我觉得的成功的原因是Microsoft.ACE.OLEDB.12.0先连接Excel2007后,在查询中仍然可连接Access,但如果先用Microsoft.ACE.OLEDB.12.0连接Access(没问题),再在查询中连接Excel2007,因为需要一句Excel 12.0,而这句又不知放在哪儿,导致连接不上Excel2007。
看来逆向思考问题很有好处。