日期:2014-05-19  浏览次数:20469 次

SQL中 打开Access数据库出错当(Opendatasource)
在SQL中打开Access数据库当数据文件小时没问题,当Access文件大时出错

------解决方案--------------------

在SQL Server中,可以使用OpenRowSet或 OpenDataSource访问Access。

所以,如果允许,楼主可以连接到SQL Server,然后,用OpenRowSet或 OpenDataSource关联Access的表。


示例:


SELECT a.*
FROM OPENROWSET( 'Microsoft.Jet.OLEDB.4.0 ', 'D:\Test.mdb '; 'admin '; '密码 ', 表名) AS a

------解决方案--------------------
楼上说得没错,可以用OpenDataSource函数、OPENROWSET 函数来访问
------解决方案--------------------
在SQL Server中提供了两个函数可以根据各种类型数据库的OLE DB Provider打开并操作这些数据库,这两个函数是OPENDATASOURCE和OPENROWSET。它们的功能基本上相同,不同之处主要有两点。

(1) 调用方式不同。

OPENDATASOURCE的参数有两个,分别是OLE DB Provider和连接字符串。使用OPENDATASOURCE只相当于引用数据库或者是服务(对于SQL Server、Oracle等数据库来说)。要想引用其中的数据表或视图,必须在OPENDATASOURCE(...)后进行引用。

在SQL Server中通过OPENDATASOURCE查询Access数据库abc.mdb中的table1表


SELECT * FROM OPENDATASOURCE( 'Microsoft.Jet.OLEDB.4.0 ',
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=abc.mdb;Persist Security
Info=False ')...
table1


OPENROWSET相当于一个记录集,可以将直接当成一个表或视图使用。

在SQL Server中通过OPENROWSETE查询Access数据库abc.mdb中的table1表


SELECT * FROM OPENROWSET( 'Microsoft.Jet.OLEDB.4.0 ', 'abc.mdb ';
'admin '; ' ', 'SELECT * FROM table1 ')


(2) 灵活度不同。

OPENDATASOURCE只能打开相应数据库中的表或视图,如果需要过滤的话,只能在SQL Server中进行处理。而OPENROWSET可以在打开数据库的同时对其进行过滤,如上面的例子,在OPENROWSET中可以使用SELECT * FROM table1对abc.mdb中的数据表进行查询,而OPENDATASOURCE只能引用table1,而无法查询table1。因此,OPENROWSET比较OPENDATASOURCE更加灵活。