IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

"ODBC --call failed" au deuxième passage


Sujet :

Access

  1. #1
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2007
    Messages : 169
    Points : 241
    Points
    241
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Lionel Garnier

    N'oubliez pas de voter pour les posts en cliquant sur le
    Cliquez sur le bouton lorsque vous êtes satisfaits de la réponse!
    mon site pro

  2. #2
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2007
    Messages : 169
    Points : 241
    Points
    241
    Par défaut
    J'ai réalisé plusieurs tests. Voyons si cela peut aider à résoudre cette énigme

    J'ai créé une petite fonction toute simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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?
    Lionel Garnier

    N'oubliez pas de voter pour les posts en cliquant sur le
    Cliquez sur le bouton lorsque vous êtes satisfaits de la réponse!
    mon site pro

  3. #3
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2007
    Messages : 169
    Points : 241
    Points
    241
    Par défaut
    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...
    Lionel Garnier

    N'oubliez pas de voter pour les posts en cliquant sur le
    Cliquez sur le bouton lorsque vous êtes satisfaits de la réponse!
    mon site pro

  4. #4
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2007
    Messages : 169
    Points : 241
    Points
    241
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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???
    Lionel Garnier

    N'oubliez pas de voter pour les posts en cliquant sur le
    Cliquez sur le bouton lorsque vous êtes satisfaits de la réponse!
    mon site pro

  5. #5
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2007
    Messages : 169
    Points : 241
    Points
    241
    Par défaut
    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!
    Lionel Garnier

    N'oubliez pas de voter pour les posts en cliquant sur le
    Cliquez sur le bouton lorsque vous êtes satisfaits de la réponse!
    mon site pro

Discussions similaires

  1. [AC-2003] Access 2003 ODBC Call Failed error
    Par Skullish dans le forum VBA Access
    Réponses: 11
    Dernier message: 06/06/2012, 13h16
  2. [AC-2010] Insert Into erreur "ODBC --Call Failed" avec un champ sql server Identify
    Par jayjazz dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/05/2011, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo