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$])
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?
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.
Au lieu de changer d'utilisateur, j'ai trouvé ce conseil:
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
Assurez-vous que le fichier Excel n'est pas ouvert.
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.
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$]')
Dans le serveur SQL, essayez ces étapes:
Server Object
.Linked Servers
.Providers
.Microsoft.ACE.OLEDB.12.0
et cliquez sur Properties
.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.
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.
Fermez SQL Server Management Studio. Tapez Services.msc dans la commande d'exécution pour ouvrir la fenêtre de services.
Recherchez le service SQL Server, cliquez dessus avec le bouton droit et sélectionnez Propriétés.
Dans l'onglet Connexion, sélectionnez le compte système/ou sélectionnez votre ID de domaine, votre compte et votre mot de passe.
Une fois votre nom de connexion trouvé, appuyez sur OK.
Maintenant, tapez vos mots de passe de connexion dans les deux champs.
Redémarrez les services afin que les nouvelles modifications soient appliquées comme indiqué dans la figure ci-dessous.
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
Dans notre cas, il a été utile d’ajouter un paramètre au service SQL Server:
Services.msc
, sélectionnez Service SQL Server .__ et ouvrez Propriétés. Startup Parameters
et ajoutez un nouveau paramètre –g512
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
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.
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.
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' ....);
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.