2012-08-08 3 views
0

J'ai essayé depuis environ une semaine d'importer des données par programmation dans une table SQL Server 2008 à partir d'un fichier Microsoft Access .mdb. Je n'ai rien obtenu d'autre que des erreurs, et en résoudre une vient en révéler une autre. J'ai fait le fichier dans un serveur lié, et maintenant lorsque je tente de l'interroger avec:Impossible de se connecter au fichier MS Access à partir de SQL Server 2008

Select * from OPENQUERY(Importdata, 'Select * from [IMBPieceBC]') 

Je reçois l'erreur:

OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "Importdata" returned message "Cannot open database ''. It may not be a database that your application recognizes, or the file may be corrupt.". 
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 "Importdata". 

J'ai lu plusieurs suggestions à réassocier dll dans le registre , mais j'ai fait cela, et je reçois toujours l'erreur. Y a-t-il autre chose que je puisse faire pour y remédier, ou du moins comprendre ce qui ne va pas?

La migration des données vers une instance SQL Server n'est pas une option. Les fichiers mdb sont générés par un programme tiers, donc nous ne pouvons rien y faire.

+0

Auparavant, ce problème était dû à des autorisations, pour moi, c'était aussi simple que d'exécuter mon service SQL Server Express connecté au compte système local, vous aurez besoin de quelque chose de mieux: http://blogs.msdn.com/ b/spike/archive/2008/07/23/ole-db-fournisseur-microsoft-jet-oledb-4-0-for-linked-serveur-null-retourné-message-unspecified-error.aspx – Fionnuala

+0

@Remou L'erreur message dans votre lien était le message d'erreur que je recevais avant celui-ci. Je l'ai corrigé en modifiant certains paramètres, je ne me souviens plus de quoi et en redémarrant le serveur. Le service est déjà exécuté sous le compte LocalSystem. – SaintWacko

+0

L'installation des pilotes gratuits MS Access ACE est-elle une option pour vous? http://www.microsoft.com/en-us/download/details.aspx?id=23734 – Fionnuala

Répondre

0

J'ai une situation similaire sur mon lieu de travail - une application tierce qui maintient les données dans les MDB, mais d'autres applications nécessitant un accès. Comment je l'ai fait, c'est que cette application 'intermédiaire' a des liens vers les tables SQL Server et les tables MDB. Vous pouvez utiliser une requête ou un événement de formulaire écrit VBA pour transférer des informations de la ou des tables MDB impliquées dans vos tables SQL Server correspondantes à l'aide d'une requête INSERT INTO, équipée d'une sous-requête SELECT FROM fournissant les valeurs insérées.

+0

Je ne suis pas sûr que vous lisiez la question. C'est exactement ce que j'essaie de faire, et j'ai une erreur. La question était de savoir comment corriger l'erreur, pas comment le faire en premier lieu. – SaintWacko

+0

@SaintWacko - Je n'ai pas reconnu le code que vous avez écrit comme étant le même que le mien, d'où ma confusion. Je n'ai pas non plus vu de mention d'un «intermédiaire». Je ne voulais pas être bête à dessein. Est-il possible que votre syntaxe soit incorrecte? Pouvez-vous lire les deux tables (la MDB créée par le fournisseur et la table SQL Server?) En utilisant des instructions SELECT simples? –

+0

Tout ce que mon code ici fait est d'essayer d'interroger à partir d'un serveur lié qui est en fait une base de données Access, juste pour voir si je peux faire fonctionner la connexion. Nous avons essayé de le faire depuis Access, mais c'est trop lent. Je peux, bien sûr, lire/écrire dans la table SQL, car ce code est en cours d'exécution sur le serveur, mais le problème se produit lorsque j'essaie de lire le MDB. – SaintWacko

Questions connexes