Échec de l'Appel ODBC - Erreur 3151
Nous avons une base de données Access migré à partir d'Access 97 pour accéder 2007 avec quelques tables liées à une base de données SQL Server 2008.
Nous sommes à l'aide d'un Fichier de source de données dans l'Administrateur ODBC. Des tests de connexion, beau travail. En fait, nous avons un formulaire principal dans Access 2007 application qui affiche les données toujours correctement.
Le problème apparaît quand on exécuter une tâche, qui fait l'appel suivant:
Dim dbs As Database
Dim rstAppend As Recordset
Set dbs = CurrentDb
Set rstAppend = dbs.OpenRecordset(strAccessTable, dbOpenDynaset, dbSeeChanges)
OpenRecordset jette le numéro de l'erreur 3151 et se produit au hasard, mais il apparaît assez fréquemment. C'est sporadique. Lorsque nous n'obtenons pas l'erreur, le groupe fonctionne bien.
- Il ne se passe toujours, pour la plupart, nous allons bien.
- Quand il arrive il arrive pour toutes les autres tâches essayé. Nous avons de fermer et de rouvrir la base de données Access et prier le bon dieu qu'il fonctionne.
- Parfois, l'actualisation de l'tables dans le Gestionnaire de tables Liées résout le problème, mais d'autres ne le font pas.
- Nous recevons parfois une erreur "ODBC--l'Appel a Échoué" lors de l'actualisation du Gestionnaire de tables Liées. La suppression d'un Fichier DSN et la création d'un nouveau résout le problème.
- Nous avons essayé avec deux conducteurs différents (SQL Server et SQL Server Native Client 10) et dans les deux cas, le problème reste le même.
- Nous avons aussi essayé de mettre le Fichier d'Accès dans la même machine que le Serveur SQL et le problème demeure.
- Nous avons augmenté le ODBC Délai d'attente pour toutes les requêtes sur de 60 à 180 secondes,mais le problème persiste.
- Nous n'avons pas à attendre pour voir l'erreur, il s'affiche en moins d'une seconde après l'exécution de la tâche.
Nous serions très heureux si quelqu'un pouvait nous aider à trouver une solution à ce problème.
Ne vous contentez pas de citer un numéro d'erreur -- donner la description de l'erreur, car il dispose d'informations que vous ne pouvez pas obtenir simplement en regardant le générique de description de l'erreur (?AccessError(3151): "ODBC--connexion à" | " a échoué.").
La description de l'erreur est "ODBC--connexion à "DataseProduction1DSN" a échoué". DataseProduction1DSN est la description de la source de données de Fichier que nous utilisons dans l'Administrateur ODBC. Voici la capture d'écran: img697.imageshack.us/img697/7804/errorpw.png
OriginalL'auteur rodpedja | 2010-09-24
Vous devez vous connecter pour publier un commentaire.
Après deux mois de recherches, nous avons trouvé une solution, changer de DAO pour ADO. C'est la réponse de MS m'a donné:
J'aimerais vous faire prendre conscience que la mise en œuvre de la solution de contournement (à l'aide d'ADO au lieu de DAO) peut être moins de temps que d'essayer de comprendre pourquoi DAO ne semble pas fonctionner.
Par conséquent, il peut être conseillé à l'aide de la solution de contournement au lieu d'essayer de trouver la cause de ce problème, d'autant qu'il ne semble pas être reproductible.
Cependant, voici ce que je voudrais vous faire par la suite:
Dans le code VBA d'utiliser des déclarations de type seulement, au lieu de déclarations implicites. Merci donc de remplacer l'utilisation de DAO. En face de n'importe quel type de base de données des déclarations dans le but de créer explicitement les objets DAO. Par exemple remplacer le suivant:
Dim dbs en tant Que Base de données
Dim rstAppend Comme jeu d'enregistrements
Par
Dim dbs Que DAO.Base de données
Dim rstAppend Que DAO.Jeu d'enregistrements
OriginalL'auteur rodpedja
De commutation de TCP/IP pour les canaux Nommés dans la Configuration du Client pour le Pilote ODBC de SQL Server a fait le tour pour moi.
OriginalL'auteur harrach
Une chose à regarder est la configuration de DNS (DNS pas DSN!) dans la configuration du réseau pour les stations de travail.
J'ai eu un client il y a quelques années qui était de rencontrer sporadiques ODBC se déconnecte comme ça avec certains utilisateurs, et il s'est avéré que le DNS primaire a été mis au point à l'Internet DNS du fournisseur. Qui a bien fonctionné pour l'Internet, mais les FAI ne savait rien à propos du client SQL Server adresse IP interne. La modification de la primaire DNS pour pointer vers le contrôleur de domaine local (qui agit en tant que serveur DNS en local) a résolu le problème de façon permanente.
Il peut ne pas être la cause de votre problème, mais il vaut la peine de regarder.
OriginalL'auteur David-W-Fenton
J'ai eu ce problème aussi. Ce que j'ai fait a été ajouté le DSN de la base de données SQL dans l'onglet Utilisateur. J'ai remarqué que c'était de travailler sur mon dev du système, et c'est la seule différence que j'ai pu trouver. Après la création de la source de données sur les utilisateurs de PC, il a travaillé.
OriginalL'auteur Ian