SQL to Access linked server - sql

I am trying to add a linked server to a Access database. I am using the following SQL code to do this.
exec sp_addlinkedserver
#server = 'Test',
#provider = 'Microsoft.Jet.OLEDB.4.0',
#srvproduct = 'OLE DB Provider for Jet',
#datasrc = '\\srv\public$\CM Database\Data\sysConfig_dat.mdb'
go
EXEC sp_addlinkedsrvlogin Test, FALSE, Null, Admin, Null
but when i run this...
select * from Test...tblProduct
i get this error...
OLE DB provider
'Microsoft.Jet.OLEDB.4.0' cannot be
used for distributed queries because
the provider is configured to run in
single-threaded apartment mode. what
am i doing wrong?
I am using SQL Server Management Studio 2008 on a 32 bit system.

I figured it out...
The server running SQL Server is a 64Bit machine. The typical data connectivity component drivers did not work with this machine (ie the download that installs the Microsoft.Jet.OleDB.4.0 as a provider). I had to download the components for Access 2010 which has a 64Bit option.
Download from here
That installs the Microsoft.ACE.OLEDB.12.0 as a provider and I can use the SQL command that BradBenning mentioned in his post.

Try using the Microsoft ACE OLEDB provider:
EXEC sp_addlinkedserver
#server = 'Test'
,#provider = 'Microsoft.ACE.OLEDB.12.0'
,#datasrc = '\\srv\public$\CM Database\Data\sysConfig_dat.mdb'
,#srvproduct='Access'
GO

Related

Cannot read Excel file from SQL Server with multiple versions of SQL Server

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO
Reading Excel
DECLARE #SQLconnect VARCHAR(8000)
SET #SQLconnect = 'SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',
''Excel 8.0;Database=D:\WAGES.xlsx;'',
''SELECT * FROM [Sheet2$]'')'
EXEC (#SQLconnect)
Exception
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. The provider reported an unexpected catastrophic failure.
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
Sometimes it gives error sometimes it goes in infinite loop of execution.
NOTE: I am getting this error after installing SQL Server 2008 R2 over SQL Server 2012.
OS: Windows 7 32-bit
SQL Server 2008 R2 and SQL Server 2012 installed
The SQL Server Error Message if a user have no rights for SQL Server TEMP directory:
OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)"
returned message "Unspecified error".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider
"Microsoft.Jet.OLEDB.4.0" for linked server "(null)".
Grant rigths to TEMP directory
(i.) This step is required only for 32-bit SQL Server with any OLE DB provider
The main problem is that an OLE DB provider creates a temporary file during the query in the SQL Server temp directory using credentials of a user who run the query.
The default directory for SQL Server is a default directory for SQL Server service account.
If SQL Server is run under Network Service account the temp directory is like:
C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp
If SQL Server is run under Local Service account the temp directory is like:
C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp
Microsoft recommends two ways for the solution:
A change of SQL Server TEMP directory and a grant of full rights for all users to this directory.
Grant of read/write rights to the current SQL Server TEMP directory.
See details: PRB: "Unspecified error" Error 7399 Using OPENROWSET Against Jet Database
Usually only few accounts are used for import operations. So we can just add rights for these accounts.
For example, icacls utility can be used for the rights setup:
icacls C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp /grant vs:(R,W)
For more information follow this Link
Try these settings
Open SQL Server Configuration Manager.
Select the SQL Server Services folder in the left pane.
Right-click the SQL Server (MSSQLSERVER) service in the right pane.
Click Properties.
Click the Advanced tab in the properties dialog that pops up.
Add “-g512;” to the front of the value for parameter “Startup Parameters”.
Click OK.

SQL Server 2008 linked server connection string setup

I'm trying to setup a linked server to another instance of SQL Server installed on the same Windows Server. In the SQL Server Management Console I have both instances added and I'm trying to do a insert from one database into another. I setup the linked server using the query below and I'm getting the following failure message when I test the connection of the the linked server. Can someone help me solve this problem?
USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
#server = 'Server Name', --actual server name
#srvproduct = '',
#provider = 'MSDASQL',
#provstr = 'DRIVER={SQL Server};SERVER=Database name;UID=test_user;PWD=test_pwd;'
GO
Error message
Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "Server Name".
OLE DB provider "MSDASQL" for linked server "Server Name" returned message "[Microsoft] [ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).".
OLE DB provider "MSDASQL" for linked server "Server Name" returned message "[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.". (.Net SqlClient Data Provider)
exec sp_addlinkedserver #server='servername';
exec sp_addlinkedsrvlogin #rmtsrvname='servername',#useself=false, #rmtuser='sa', #rmtpassword='Password';
if sql server is a named instance then servername\instancename

Openrowset on SQL Server 2008 R2 installed in Windows 2008 64 bit machine

I'm trying to working with Openrowset on SQL Server 2008 R2 installed in Windows 2008 64 bit machine.When I execute the below query, i got an error like below.Please help me out.
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=E:\01112012.xls;','SELECT * FROM [Sheet1$]')
ERROR:
Msg 7403, Level 16, State 1, Line 1
The OLE DB provider "Microsoft.Jet.OLEDB.4.0" has not been registered.
Have you installed: ->Microsoft Access Database Engine 2010 Redistributable
This download will install a set of components that facilitate the transfer of data between existing Microsoft Office files such as Microsoft Office Access 2010 (*.mdb and .accdb) files and Microsoft Office Excel 2010 (.xls, *.xlsx, and *.xlsb) files to other data sources such as Microsoft SQL Server. Connectivity to existing text files is also supported. ODBC and OLEDB drivers are installed for application developers to use in developing their applications with connectivity to Office file formats.
To run OPENROWSET in 64 bit version of windows.
1- Install AccessDatabaseEngine_x64.exe (Restart is required).
2- If you are using SQL Management Studio, run Management Studio as administrator. If you don’t run it as an administrator account you will have this error (Cannot initialize the data source object of OLE DB provider "MICROSOFT.ACE.OLEDB.12.0" for linked server "(null)".
3- Run this command to configure your Database
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE with override;
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE with override;
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1
GO
4- Don’t use ‘select * from sheet1$’ in OPENROWSET function. Try this code.
select * from OPENROWSET('MICROSOFT.ACE.OLEDB.12.0', 'Excel 12.0;HDR=YES;DATABASE=D:\test.xlsx', sheet1$)
If still you have (32 bit) error, try to restart your SQL service and check your C:\Windows\Temp and see do you have access to this directory or not.

How to setup a linked server to Access 2000 database?

I am using SQL 2005 Server Express.
How can I setup a linked server to an MS Access 2000 database?
Take a look at sp_addlinkedserver in Books Online.
EXEC sp_addlinkedserver
#server = 'linked server name',
#srvproduct = 'Access',
#provider = 'Microsoft.Jet.OLEDB.4.0',
#datasrc = 'C:\path\file.MDB';
You may also need to use sp_addlinkedsrvlogin to associate a user/login with the linked server. Also, if you are using Access 2007, you may need to use an alternate provider:
#provider = 'Microsoft.ACE.OLEDB.12.0',
And finally, if you are on a 64-bit operating system, you may run into issues.

SQL Server not configured for data access

I'm running a SQL Server 2005 database from a VB 6 Application. I connect to the database
through an ODBC DSN.
I renamed the computer on which I'm running the default instance of SQL server from 'Software' to 'IT'. I then ran the sp_dropserver and sp_addserver stored procedures to rename the instance.
On restarting the SQL Server service, the server was able to pick up on the new SQL Server name.
After configuring the ODBC data source name to the new name, the connection was Ok. I'm able to run my application and read records through ADO record sets. However I'm unable to update any recordset using the .Update method. I get the following error instead ... SQL Server not configured for data access
How can I enable data access on the renamed server instance?
How to: Rename a Computer that Hosts a Stand-Alone Instance of SQL Server 2005
You should be able to run this but not against any linked server. It's not a linked server. It's local.
EXEC sp_serveroption 'YourServer', 'DATA ACCESS', TRUE
Just go to the linked server properties > Server options > Data access --> true
Works on SQL Server 2014.
Regards
I just would like to add to the previous answers that, at least in my case here, I needed to enable data access in both places.
for instance:
there is server A and server B
On server A
I have a linked server LB that links me from server A to server B
I need to execute the following:
-- on server A
exec sp_serveroption 'LB', 'data access', 'true'
-- on server B
exec sp_serveroption 'B', 'data access', 'true'
with this
use master
go
exec sp_serveroption 'server name', 'data access', 'true'
go
linked servers generated for replication still showing same error
I've just come across this error and found that it was caused by me trying to run OpenQuery against the local server (doh!). Changing the server name to that of an actual linked server resolved my issue.