web-dev-qa-db-fra.com

Impossible de créer une instance de OLE Fournisseur de base de données Microsoft.Jet.OLEDB.4.0 pour le serveur lié null

J'essaie d'exporter de mes données Table dans les requêtes Excel à T-SQL. Après de petites recherches, je suis venu avec cette 

INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 
                        'Excel 8.0;Database=G:\Test.xls;', 
                        'SELECT * FROM [Sheet1$]') 
SELECT * 
FROM   dbo.products 

Quand j'exécute la requête ci-dessus, j'obtiens cette erreur 

Msg 7302, Niveau 16, État 1, Ligne 7 Impossible de créer une instance de OLE Fournisseur de base de données "Microsoft.Jet.OLEDB.4.0" pour le serveur lié "(null)".

Alors passé par internet pour solution, obtenu le lien ci-dessous 

https://blogs.msdn.Microsoft.com/spike/2008/07/23/ole-db-provider-Microsoft-jet-oledb-4-0-for-linked-server-null-returned-message- erreur non spécifiée/

Dans le lien ci-dessus, ils disaient que nous devions être un administrateur pour créer un dossier dans le dossier C lecteurTEMP puisque OPENROWSET crée des fichiers ou un dossier dans le dossier TEMP

Je le fais dans My Home PC et je suis l'administrateur. Je reçois toujours la même erreur.

SQL SERVER détails 

Microsoft SQL Server 2016 (RC1) - 13.0.1200.242 (X64) 10 mars 2016 16:49:45 Copyright (c) Évaluation de Microsoft Corporation Enterprise Edition (64 bits) sous Windows 10 Pro 6.3 (version 10586:)

Tous les indicateurs pour résoudre le problème seront très appréciés 

Mise à jour: J'ai déjà configuré le Ad Hoc Distributed Queries et

Exécuté les requêtes ci-dessous 

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1
GO 

maintenant je reçois cette erreur 

Msg 7438, niveau 16, état 1, ligne 7 Le fournisseur de base de données OLE 32 bits "Microsoft.Jet.OLEDB.4.0" ne peut pas être chargé en cours de processus sur un SQL 64 bits Serveur.

20

OK, j’ai fait en sorte que cela fonctionne pour moi et il semble que SO me laisse poster aujourd'hui.

J'ai le serveur MS SQL 2012 et Office 2013. Cela semble être très difficile, vous devrez peut-être vous adapter à vos versions.

  1. Téléchargez la version 64 bits de Microsoft.ACE.OLEDB.12.0 pour Windows disponible ici: https://www.Microsoft.com/en-us/download/details.aspx?id=13255
  2. Installez-le sur votre serveur.
  3. Vérifiez l'utilisateur qui exécute SQL Server et assurez-vous qu'il a accès au répertoire temporaire C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp s'il s'agit d'un compte de service local ou de C:\Windows\ServiceProfiles\NetworkService\AppData\Local.\Temp s'il s'agit d'un compte de service réseau.
  4. Configurez les «requêtes distribuées ad hoc» et activez les fichiers Microsoft.ACE.OLEDB comme ceci:

Voici les commandes SP_CONFIGURE: 

SP_CONFIGURE 'show advanced options', 1; 
GO 
RECONFIGURE; 
SP_CONFIGURE 'Ad Hoc Distributed Queries', 1; 
GO 
RECONFIGURE; 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1   
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParam', 1

Assurez-vous d’enregistrer msexcl40.dll comme ceci: 

regsvr32 C:\Windows\SysWOW64\msexcl40.dll
30
quest4truth

Découvrez sp_configure/RECONFIGURE ...

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO

Voir ces liens pour plus d'informations:

https://technet.Microsoft.com/en-us/library/aa259616(v=sql.80).aspx

http://blog.sqlauthority.com/2010/11/03/sql-server-fix-error-ms-jet-oledb-4-0-cannon le-fournisseur-est-utilisé-en-appartement-mode/

2
JimR

Travaux !!! Merci beaucoup ... juste pour le serveur Win 64 bits 2012R2. Permettez-moi de mettre tout le script de travail en répétant partiellement des éléments d'en haut, qui ne sont pas faciles (pour moi) à combiner:

1) Téléchargez la version 64 bits de Microsoft.ACE.OLEDB.12.0 pour Windows disponible ici: https://www.Microsoft.com/en-us/download/details.aspx?id=13255

2) Créez un fichier Excel avec les colonnes respectives (nom et classe dans ce cas).

3) Exécuter le code ci-dessous:

sp_configure 'show advanced options', 1;  
RECONFIGURE;
GO 
sp_configure 'Ad Hoc Distributed Queries', 1;  
RECONFIGURE;  
GO 

/* -- Not sure commented bits are necessary but I also have run them
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1
GO 

-- below two lines failed with: Msg 2787, Level 16, State 1, Procedure sp_MSset_oledb_prop, Line 106 Invalid format specification: '%1!.'.
    EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1   
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParam', 1

-- but works all two as below:
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1   
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
-- Succeded to run after success with Excel so does not looks like necessary


*/

INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
'Excel 8.0;Database=C:\testing.xlsx;', 
'SELECT Name, Class FROM [Sheet1$]') 
SELECT [Name],[Class] FROM Qry_2
GO
1
FerroPont