Question

J'ai une solution Visual Studio 2008 avec deux projets (un projet Word-Template et une application console VB.Net à des fins de test). Les deux projets font référence à un projet de base de données qui ouvre une connexion à un fichier de base de données MS-Access 2007 et comporte des références à System.Data.OleDb. Dans le projet de base de données, j’ai une fonction qui extrait une table de données comme suit

 private class AdminDatabase
   ' stores the connection string which is set in the New() method
   dim strAdminConnection as string

   public sub New()
   ...
   adminName = dlgopen.FileName
   conAdminDB = New OleDbConnection
   conAdminDB.ConnectionString = "Data Source='" + adminName + "';" + _
       "Provider=Microsoft.ACE.OLEDB.12.0"

   ' store the connection string in strAdminConnection
   strAdminConnection = conAdminDB.ConnectionString.ToString()
   My.Settings.SetUserOverride("AdminConnectionString", strAdminConnection)
   ...
   End Sub

   ' retrieves data from the database
   Public Function getDataTable(ByVal sqlStatement As String) As DataTable
        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim da As New OleDbDataAdapter
        Dim localCon As New OleDbConnection


        localCon.ConnectionString = strAdminConnection

        Using localCon
            Dim command As OleDbCommand = localCon.CreateCommand()
            command.CommandText = sqlStatement
            localCon.Open()
            da.SelectCommand = command
            da.Fill(dt)
            getDataTable = dt
        End Using

    End Function
End Class

Lorsque j'appelle cette fonction à partir de mon projet de modèle Word 2007, tout fonctionne correctement. pas d'erreurs. Mais quand je le lance à partir de l’application console, il lève l’exception suivante

  

ex = {" Le 'Microsoft.ACE.OLEDB.12.0'   fournisseur n'est pas inscrit sur le   ordinateur local. "}

Les deux projets ont la même référence et l'application de la console fonctionnait bien lorsque je l'ai écrite pour la première fois (il y a quelque temps), mais le travail a maintenant cessé. Je dois manquer quelque chose mais je ne sais pas quoi. Des idées?

Était-ce utile?

La solution

J'ai un programme Visual Basic avec Visual Studio 2008 qui utilise une base de données Access 2007 et qui recevait la même erreur. J'ai trouvé des threads qui conseillaient de changer la configuration de compilation avancée en x86 dans les propriétés du programme si vous utilisez un système 64 bits. Jusqu'ici, je n'ai eu aucun problème avec mon programme depuis.

Autres conseils

En gros, si vous utilisez une machine 64 bits, IIS 7 ne sert pas (par défaut) les applications 32 bits sur lesquelles le moteur de base de données fonctionne. Alors voici exactement ce que vous faites:

1) Assurez-vous que le moteur de base de données 2007 est installé. Vous pouvez le télécharger à l'adresse suivante: displaylang = fr "rel =" noreferrer "> http: // www .microsoft.com / downloads / details.aspx? FamilyID = 7554F536-8C28-4598-9B72-EF94E038C891 & amp; displaylang = fr

2) ouvrez le gestionnaire IIS7 et ouvrez la zone Pools d'applications. Dans la barre latérale droite, vous verrez une option indiquant & "Définir les paramètres par défaut du pool d'applications &"; Cliquez dessus et une fenêtre s’ouvrira avec les options.

3) le deuxième champ vers le bas, qui indique «Activer les applications 32 bits», est probablement défini sur FALSE par défaut. Cliquez simplement là où il est dit "faux" pour le changer en "vrai".

4) Redémarrez votre pool d'applications (vous pouvez le faire en appuyant sur RECYCLE au lieu de STOP puis de START, ce qui fonctionnera également).

5) terminé, votre message d'erreur disparaîtra.

Utilisez-vous un système 64 bits avec une base de données 32 bits et une console 64 bits? Il n’existe pas de pilotes MS Access fonctionnant en 64 bits et signalant une erreur identique à celle signalée.

Solution:

C'est ça! Merci Arjun Paudel pour le lien. Voici la solution trouvée sur Club Online de XNA Creator. C'est par Stephen Styrchak.

L'erreur suivante me fait penser que vous compilez pour 64 bits:

  

Le fournisseur 'Microsoft .ACE.OELDB.12.0' n'est pas enregistré sur la machine locale

Je n'ai pas l'édition express, mais les étapes suivantes sont-elles valides en 2008 express?

http://forums.xna.com/forums/t/4377 .aspx # 22601

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/ed374d4f-5677-41cb-bfe0-198e68810805/?prof=required
- Arjun Paudel

Dans VC# Express, cette propriété est manquante, mais vous pouvez toujours créer une configuration x86 si vous savez où chercher.

Cela ressemble à une longue liste d'étapes, mais une fois que vous savez où sont ces choses, c'est beaucoup plus facile. Quiconque n’a que Configuration Manager trouvera probablement cela utile. Une fois que vous saurez Tools -> Options, ce sera beaucoup plus intuitif la prochaine fois.

1.Dans VC # Express 2005, accédez à "Show all settings".
2.Dans le coin inférieur gauche de la boîte de dialogue Options, cochez la case "Projects and Solutions".
3.Dans l'arborescence située à gauche, sélectionnez "Show advanced build configuraions.".
4.Dans les options de droite, cochez la case OK
5.Cliquez sur Build -> Configuration Manager.
6.Allez à "<New...>" ...
7.Dans la colonne Plate-forme à côté de votre projet, cliquez sur la liste déroulante et sélectionnez "New platform" setting, choose "x86".
8.Dans le Close.
9.Cliquez sur <=>.
10.Cliquez sur <=>.
Là, vous avez maintenant une configuration x86! C'est de la tarte! : -)

Je recommande également d'utiliser <=> pour supprimer la plateforme Any CPU. Vous ne voulez vraiment pas cela si vous avez déjà des dépendances sur des DLL natives 32 bits (même des dépendances indirectes).

Stephen Styrchak | Développeur XNA Game Studio http://forums.xna.com/forums/p/4377/ 22601.aspx # 22601

Je pensais répondre parce que j’avais trouvé cette question lorsque j’étais confronté à un contexte légèrement différent et que cela pourrait aider d’autres âmes tourmentées à l’avenir:

J'avais une application ASP.NET hébergée sur IIS 7.0 sous Windows Server 2008 64 bits.

Etant donné qu'IIS contrôle le bitness du processus, la solution dans mon cas a été de définir le paramètre Enable32bitAppOnWin64 sur true: http://blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip-2-you- can-now-run-32-bit-and-64-bit-applications-on-the-same-server.aspx

Cela fonctionne légèrement différemment dans IIS 6.0 (vous ne pouvez pas définir Enable32bitAppOnWin64 au niveau du pool d'applications) : //www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx?mfr=true

J'ai le même problème. J'essaie d'installer Office 2010 64 bits sur Windows 7 64 bits, puis le Pilote Office System 2007: Composants de connectivité de données.

après cela, visual studio 2008 peut ouvrir une connexion à un fichier de base de données MS-Access 2007.

Voir mon message sur un fil de discussion Stack Exchange similaire https://stackoverflow.com/a/21455677/1368849

J'avais la version 15, et non la 12 installée, ce que j'ai découvert en exécutant ce code PowerShell ...

(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION

... ce qui m'a donné ce résultat (j'ai supprimé d'autres sources de données par souci de brièveté) ...

SOURCES_NAME              SOURCES_DESCRIPTION                                                                       
------------              -------------------                                                                       
Microsoft.ACE.OLEDB.15.0  Microsoft Office 15.0 Access Database Engine OLE DB Provider

J'ai la même erreur sur une famille Windows Vista 64 bits entièrement mise à jour avec une application .NET compilée en 32 bits uniquement: le programme est installé dans le dossier programx86 sur des ordinateurs 64 bits. Il échoue avec ce message d'erreur même avec le fournisseur de base de données d'accès 2007 installé, avec / sans le SP2 du même installé, IIS installé et le pool d'applications mis en place pour la prise en charge des applications 32 bits ... oui, j'ai essayé toutes les solutions partout et toujours sans succès.

J'ai basculé mon application vers ACE OLE DB.12.0 car JET4.0 échouait sur les ordinateurs 64 bits - et ce n'est pas mieux: - / Le fil le plus prometteur que j'ai trouvé était celui-ci:

http://ellisweb.net/2010/01/connecting-to-excel-and-access-files-using-net-on-a-64-bit-server/

mais lorsque vous essayez d'installer la version bêta du pilote 2010 Office System 64 bits & 2010: Composants de connectivité de données " il vous indique que vous ne pouvez pas installer la version 64 bits sans désinstaller toutes les applications Office 32 bits ... et en installant la version 32 bits de la version bêta du pilote Office System 2010: les composants de connectivité de données ne résolvent pas le problème initial, même avec quot; Microsoft.ACE.OLEDB.12.0 " en tant que fournisseur au lieu de " Microsoft.ACE.OLEDB.14.0 " que cette page (et d'autres) recommandent.

Ma prochaine tentative sera de suivre ce post:

Le problème est dû au mauvais modèle d’OLEDB32.DLL et d’OLEDB32r.DLL en cours d’enregistrement sur le serveur. Si les versions 64 bits sont enregistrées, elles doivent être désenregistrées, puis les versions 32 bits enregistrées. Pour résoudre ce problème, annulez l'inscription des versions situées dans% Program Files% / Fichiers communs / Système / OLE DB. Enregistrez ensuite les versions sur le même chemin, mais dans le répertoire% Program Files (x86).

Quelqu'un d'autre a-t-il rencontré autant de problèmes avec les fournisseurs JET4.0 et OLEDB ACE sur des machines 64 bits? Quelqu'un a-t-il trouvé une solution si aucun des autres ne fonctionne?

Je suppose que si vous exécutez un système 64 bits avec une base de données 32 bits et essayez d'exécuter une console 64 bits, les packages suivants doivent être installés sur la machine.

  1. Installer le moteur de base de données Microsoft Access 2010 x86 Redistribuable, cette installation est disponible sur: http://www.microsoft.com/download/en/details.aspx ? id = 13255 .
  2. Composants de connectivité de données d'Office 2007, cette installation est disponible à: http://www.microsoft.com/download/en/confirmation.aspx ? id = 23734 .
  3. Redistribuable du moteur de base de données Microsoft Access 2010 x64. Vous serez devez télécharger le package localement et l’exécuter avec un indicateur passif. Vous pouvez télécharger l'installation ici: http://www.microsoft.com/en-us/download /details.aspx?id=13255 Installation à l'aide de l'invite de commande avec l'indicateur '/ passive'. dans le l'invite de commande lance la commande suivante: 'AccessDatabaseEngine_x64.exe / passive'

Remarque: l'ordre semble avoir de l'importance - si vous avez déjà installé quelque chose, désinstallez-le et suivez les étapes ci-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top