Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/06/2011, 10h53   #1
Membre actif
 
Homme Lionel Garnier
Consultant informatique
Inscription : octobre 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Lionel Garnier
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2007
Messages : 134
Points : 179
Points : 179
Par défaut "ODBC --call failed" au deuxième passage

Bonjour,

J'ai réalisé une application frontale Access qui se connecte à un serveur SQL.

L'application fonctionne parfaitement sous Access 2003 mais je rencontre un bug sous Access 2007.

Ce problème se produit lorsque je copie des tables locales vers des tables temporaires sur le serveur.
Pour cela j'utilise le code suivant:

Code :
1
2
strSQL = "SELECT * INTO [ODBC;DRIVER=SQL Server;SERVER=" & strSQLServer & ";DATABASE=tempdb;UID=" & strUser & ";PWD=" & strPassword & "].[" & strDestTable & "] FROM [" & strSrcTable & "];"
CurrentDb.Execute strSQL
strSrcTable contient le nom de ma table locale
strDestTable contient le nom de ma table temporaire sur le serveur (commencant par ##)

Sous Access 2007, le code plante toujours lors de la seconde exécution, même lorsque je l’exécute avec les mêmes paramètres.
Cela bug si je mets ces lignes de code à la suite dans la même fonction mais aussi si j'exécute manuellement deux fois d'affilé la fonction...

Pour info le volume de données à transférer est faible et cela plante au boute de quelques secondes (ce n'est pas un pb de runtime error)


=> Est ce que ce problème vous parle?
=> Comment est ce je pourrais arriver à avoir plus de détails sur l'erreur? (je n'ai que la version Express de SQL server)

Merci beaucoup par avance pour votre support
yonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 09h04   #2
Membre actif
 
Homme Lionel Garnier
Consultant informatique
Inscription : octobre 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Lionel Garnier
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2007
Messages : 134
Points : 179
Points : 179
J'ai réalisé plusieurs tests. Voyons si cela peut aider à résoudre cette énigme

J'ai créé une petite fonction toute simple
Code :
1
2
3
4
5
Sub TestSQL()
        Dim strSQL As String
        strSQL = "SELECT * INTO [ODBC;DRIVER=SQL Server;SERVER=PC\SERVER;DATABASE=Database_Name;UID=UserLogin;PWD=UserPassword].[Test1] FROM [Source_Table];"
        CurrentDb.Execute strSQL
End Sub
Si j’exécute la fonction une première fois, tout marche.
Si je la ré-exécute avec un nom de table de destination différent (Test2), j'ai l'erreur 3146 "ODBC --call failed".
=> Dans ce cas la table "Test2" est créé avec les bons champs mais elle est vide...
Je peux ensuite essayer autant de fois que je veux la fonction me retourne toujours la même erreur.

Cela remarche une et une seule fois seulement après le redémarrage de l'application.

J'ai fais ce test sur plusieurs machines (windows XP et 7) et plusieurs serveurs différents (SQL Server 2005 et 2008), le problème est toujours le même (avec Access 2007 full version et runtime version)...


Alors, des pistes pour me guider dans ma recherche de solutions?
yonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 09h46   #3
Membre actif
 
Homme Lionel Garnier
Consultant informatique
Inscription : octobre 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Lionel Garnier
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2007
Messages : 134
Points : 179
Points : 179
Salut,

J'ai essayé avec une autre de mes base et tout fonctionne correctement (en mettant exactement le même code sur la même machine)!!!

J'ai alors tenté de mettre le code dans une nouvelle base vide et là j'ai le même problème (erreur 3146 au deuxième passage).

J'ai comparé les paramètres et les références des deux projets et tout me parait identique. Je ne comprends donc pas pourquoi on a deux comportements différents...
yonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 10h50   #4
Membre actif
 
Homme Lionel Garnier
Consultant informatique
Inscription : octobre 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Lionel Garnier
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2007
Messages : 134
Points : 179
Points : 179
Bon, je pense avoir trouvé la cause mais je ne la comprends pas vraiment!

Lorsque j'utilise la méthode TransferDatabase pour passer ma table de Access vers SQL server, j'ai une erreur #8107:
"IDENTITY_INSERT est déjà défini sur ON pour la table 'Database_Name.dbo.Test1'. Impossible d'effectuer l'opération SET pour la table 'Test2'."

C'est donc un problème lié au Numéro Auto. C'est pour cela que je n'avais pas eu l'erreur avec l'autre base...
J'ai bien essayé de faire un
Code :
SET INDENTITY_INSERT Test1 OFF
Mais ca ne marche pas comme je l'aurais souhaité...
Et mon problème est que j'ai besoin de transférer des tables avec et sans champs numéro auto...

=> Savez vous comment contourner ce problème???
yonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 11h15   #5
Membre actif
 
Homme Lionel Garnier
Consultant informatique
Inscription : octobre 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Lionel Garnier
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2007
Messages : 134
Points : 179
Points : 179
Je me fait ma conversation tout seul mais ça pourra toujours servir à quelqu'un

Pour contourner le problème que créé des requêtes en convertissant les NuméroAutos en Long (CLng). Et j'exporte ensuite cette requête...

Mais si quelqu'un à une autre solution je suis preneur!
yonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h48.


 
 
 
 
Partenaires

Hébergement Web