首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于将Excel2007表导入Access的有关问题。多谢

2014-01-13 
求助:关于将Excel2007表导入Access的问题。谢谢!Excel2003导入Access的方法网上有好多答案,我贴一个如下:AD

求助:关于将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。
看来逆向思考问题很有好处。

热点排行