web-dev-qa-db-fra.com

Le OLE Fournisseur de base de données "Microsoft.ACE.OLEDB.12.0" pour le serveur lié "(null)"

J'essaie d'exécuter l'instruction suivante, mais je reçois les messages d'erreur ci-dessous. J'ai recherché des réponses sans fin et aucune n'a fonctionné pour moi. J'exécute Office 365 (64bit). J'ai chargé le moteur de base de données Microsoft Access (64 bits). C'est dans Visual Studio 2013 avec SSDT ainsi que SQL Server 2012. Je n'ai pas accès à la modification des paramètres d'environnement ou de démarrage vers SQL Server. Toute aide est appréciée.

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.15.0', 
    'Excel 12.0;Database=C:\Users\UserName\Folder\SomeFile.xlsx;;HDR=NO;IMEX=1', [Table 1$])
  • Msg 7399, niveau 16, état 1, ligne 1 Le fournisseur de base de données OLE "Microsoft.ACE.OLEDB.15.0" pour le serveur lié "(null)" a signalé une erreur Le fournisseur n'a donné aucune information sur l'erreur.
  • Msg 7303, niveau 16, état 1, ligne 1 Impossible d'initialiser la source de données Objet du fournisseur de base de données OLE "Microsoft.ACE.OLEDB.15.0" pour. Server lié "(null)".

Voici ce que j'ai essayé:

D'abord, j'ai couru ...

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

Suivi par ... sans amour.

EXEC sys.sp_addsrvrolemember @loginame = N'<<Domain\User>>', @rolename = N'sysadmin';
GO

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'DynamicParameters', 1 
GO 

J'ai changé le code pour lire Microsoft.ACE.OLEDB.12.0 comme je l'ai vu aussi, toujours pas d'amour.

J'ai également vérifié les autorisations de C:\Utilisateurs\MSSQLSERVER\AppData\Local\Temp et C: Windows\ServiceProfiles\NetworkService\AppData\Local qui ont accordé un contrôle total sur les éléments suivants: Système, MSSQLSERVER et Administrateurs, Service réseau (sur le dernier).

Toujours pas d'amour.

Enfin, j'ai essayé de passer à la version 32 bits du moteur de base de données Microsoft Access, qui n'a pas fonctionné.

Aide, quelqu'un?

26
Steven Kanberg

http://www.aspsnippets.com/Articles/The-OLE-DB-provider-Microsoft.Ace.OLEDB.12.0-for-linked-server-null.aspx

Cela résout le problème ..___ Pour une raison quelconque, SQL Server n’aime pas le compte MSSQLSERVER par défaut. Le basculement vers un compte d'utilisateur local résout le problème.

14
Rahul Goel

Au lieu de changer d'utilisateur, j'ai trouvé ce conseil:

https://social.technet.Microsoft.com/Forums/lync/en-US/bb2dc720-f8f9-4b93-b5d1-cfb4f8a8b1cb/the-ole-db-provider-microsoftaceoledb120-for-link-server rapporté-une-erreur-d'accès? forum = sqldataaccess

Cela pourrait aider quelqu'un d'autre - après avoir essayé chaque solution de essayer et corriger cette erreur sur SQL 64 ..

Impossible d'initialiser l'objet source de données du fournisseur de base de données OLE "Microsoft.ACE.OLEDB.12.0" pour le serveur lié "(null)".

..J'ai trouvé un article ici ...

http://sqlserverpedia.com/blog/sql-server-bloggers/too-many-bits/

..qui a suggéré que je donne à chacun l'autorisation complète sur ce dossier ..

C:\Users\Nom du compte de service SQL\AppData\Local\Temp

Et hop! Ma requête a soudainement éclaté dans la vie. J'ai frappé l'air en délice.

Edwaldo

18
Michael Møldrup

Assurez-vous que le fichier Excel n'est pas ouvert. 

14
Drew

Ceci est pour ma référence, car j'ai rencontré une variété de messages d'erreur SQL lors de la tentative de connexion avec le fournisseur. D'autres réponses prescrivent "essayez ceci, alors ceci, alors ceci". J'apprécie les autres réponses, mais j'aime bien jumeler solutions spécifiques à des problèmes spécifiques


Erreur

... le fournisseur n'a pas donné d'informations ... Impossible d'initialiser l'objet de source de données ...

Numéros d'erreur

7399, 7303

Détail de l'erreur

Msg 7399, Level 16, State 1, Line 2 The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. 
  The provider did not give any information about the error. 
Msg 7303, Level 16, State 1, Line 2 Cannot initialize the data source object
  of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Solution

Le fichier était ouvert. Ferme le.

Crédit


Erreur

Accès refusé ... Impossible d'obtenir les informations sur la colonne ...

Numéros d'erreur

7399, 7350

Détail de l'erreur

Msg 7399, Level 16, State 1, Line 2 The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. 
  Access denied.
Msg 7350, Level 16, State 2, Line 2 Cannot get the column information 
  from OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Solution

Donner l'accès

Crédit


Erreur

Aucune valeur donnée pour un ou plusieurs paramètres obligatoires .... Impossible d'exécuter la requête ...

Numéros d'erreur

???, 7320

Détail de l'erreur

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "No value given for one or more required parameters.".
Msg 7320, Level 16, State 2, Line 2
Cannot execute the query "select [Col A], [Col A] FROM $Sheet" against OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)". 

Solution

Les noms de colonne peuvent être faux. Est-ce que [Col A] et [Col B] existent réellement dans votre feuille de calcul?


Erreur

"Erreur non spécifiée" ... Impossible d'initialiser l'objet de source de données ...

Numéros d'erreur

???, 7303

Détail de l'erreur

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error".
Msg 7303, Level 16, State 1, Line 2 Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Solution

Exécutez SSMS en tant qu'administrateur. Voir cette question.


Autres références

Autres réponses suggérant de modifier les propriétés. Vous ne savez pas comment modifier ces deux propriétés (les vérifier ou les décocher) pourrait être utile.

14
The Red Pea

Voici ce qui a fonctionné pour moi uniquement lorsque le fichier Excel interrogé n’était pas ouvert et lors de l’exécution du service SQL Server en tant que moi [en tant qu’utilisateur ayant accès au système de fichiers]. Je vois des morceaux de ma réponse déjà donnés ailleurs, alors je m'excuse pour toute redondance, mais pour une réponse plus succincte:

USE [master]
GO

EXEC sp_configure 'Show Advanced Options', 1
RECONFIGURE
GO

EXEC sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
GO

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO


SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                'Excel 12.0;Database=C:\MyExcelFile.xlsx',
                'SELECT * FROM [MyExcelSheetName$]')
2
MapLion

Dans le serveur SQL, essayez ces étapes:

  1. Ouvrez une base de données.
  2. Cliquez dans l'option Server Object.
  3. Cliquez dans Linked Servers.
  4. Cliquez dans Providers.
  5. Cliquez avec le bouton droit sur Microsoft.ACE.OLEDB.12.0 et cliquez sur Properties.
  6. Décochez toutes les options et fermez.
2
Diego Castro

Avec SQL 2014, j'ai modifié le service SQL Server (MSSQL) pour qu'il s'exécute en tant que LocalSystem. Cela a résolu le problème pour moi.

Cela fonctionnait comme NT_SERVICE\MSSQL$MSSQL fine en 2008, d'après mes souvenirs.

1
jocox500

J'exécute SQL Server 2014 64 bit sur Windows 10. J'ai tout essayé. Ce qui l'a fait fonctionner, c'est:

EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 0

Je ne sais pas pourquoi le processus AllowInProcess désactivé le fait fonctionner, mais c'était la clé dans mon cas. Merci de votre suggestion de désactiver toutes les options du serveur de liens.

1
Mark Alberts
  1. Fermez SQL Server Management Studio. Tapez Services.msc dans la commande d'exécution pour ouvrir la fenêtre de services.

  2. Recherchez le service SQL Server, cliquez dessus avec le bouton droit et sélectionnez Propriétés.

  3. Dans l'onglet Connexion, sélectionnez le compte système/ou sélectionnez votre ID de domaine, votre compte et votre mot de passe.

  4. Une fois votre nom de connexion trouvé, appuyez sur OK.

  5. Maintenant, tapez vos mots de passe de connexion dans les deux champs.

  6. Redémarrez les services afin que les nouvelles modifications soient appliquées comme indiqué dans la figure ci-dessous.

  7. Maintenant, démarrez SQL Server Management Studio et essayez d’exécuter la requête si cela ne fonctionne toujours pas, essayez un redémarrage du système.

... ou exécutez la requête suivante:

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 
0
Subhash Chander

Dans notre cas, il a été utile d’ajouter un paramètre au service SQL Server:

  1. Allez à Services.msc, sélectionnez Service SQL Server .__ et ouvrez Propriétés. 
  2. Choisissez Startup Parameters et ajoutez un nouveau paramètre –g512 
  3. Redémarrez le service SQL Server.
0
Ilya Urikh
Exec sp_configure 'show advanced options', 1;
RECONFIGURE;
GO

Exec sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
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

Insert into OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0','Data Source=C:\upload_test.xlsx;Extended Properties=Excel 12.0')...[Sheet1$]
SELECT ColumnNames FROM Your_table -- Sheet Should be already Present along with headers

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 0;
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 0;
GO

Exec sp_configure 'Ad Hoc Distributed Queries', 0;
RECONFIGURE;
GO

Exec sp_configure 'show advanced options', 0
RECONFIGURE;
GO
0
M_ Fa

Ceci est mon code d'erreur:

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "The Microsoft Access database engine could not find the object 'ByStore$'. Make sure the object exists and that you spell its name and the path name correctly. If 'ByStore$' is not a local object, check your network connection or contact the server administrator.".

Msg 7350, Level 16, State 2, Procedure PeopleCounter_daily, Line 26

Cannot get the column information from OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Mon problème était le fichier Excel manquant sur le chemin. Il suffit de mettre le fichier avec la feuille correcte fera l'affaire.

0
YHTAN

Pour moi, ces deux choses ont aidé à différentes occasions:

1) Si vous venez d'installer le runtime MS Access, redémarrez le serveur. Faire rebondir l'instance de base de données n'est pas suffisant.

2) En plus de s’assurer que le fichier Excel n’est pas ouvert, vérifiez que l’Explorateur Windows n’a pas été ouvert avec le volet de visualisation activé - cela le verrouille également.

0
pierreluigi88

Dans mon cas, ce problème se posait car j’accédais au fichier à partir du dossier partagé en utilisant computerName . OPENROWSET ('' Microsoft.Jet.OLEDB.4.0 '', '' Excel 8.0; Database = '\ ntpc0100\MysharedFolder\KPI_tempData\VariablePayoutDetails.xls '; IMEX = 1;' ',' .....) Institué d'utiliser computerName ntpc0100 (quel que soit le nom de votre machine) vous devez spécifier l'adresse IP de votre machine . par exemple: - OPENROWSET ('' Microsoft.Jet.OLEDB.4.0 '', '' Excel 8.0; Database = '\ 193.34.23.200\MysharedFolder\KPI_tempData\KPIVariablePayoutDetails.xls' ....);

0
Vinit Bhardwaj

J'ai eu exactement le même message d'erreur et j'ai essayé les solutions suggérées dans ce fil, mais sans succès.

ce qui a résolu le problème pour moi, c’est d’ouvrir le fichier .xlsx et de l’enregistrer en tant que fichier .xls (Excel 2003).

peut-être que le fichier était corrompu ou dans un format différent, et le sauver de nouveau le corrigea.

0
Abu Assar