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

VBA Access Discussion :

Access 2003 ODBC Call Failed error


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 11
    Par défaut Access 2003 ODBC Call Failed error
    Bonjour,
    Premièrement, voici mes outils : j'ai un application Access 2003 qui utilise une BD SQL (je sais, c'est étrange). J'utilise Microsoft SQL Server Management Studio Express.
    J'essaie présentement d'exécuter une requête à partir de mon application pour insérer quelques lignes de 2 tables dans une autre. Ma requête fonctionne bien quand je l'exécute directement dans SQL Server Management ou quand je crée une nouvelle requête et que je l'exécute en mode SQL dans Access, mais étrangement elle ne fonctionna pas à partir de mon application... Je reçois un erreur du genre "ODBC Call failed" pour une raison inconnue que je ne peux découvrir car ma requête fonctionne bien quand je l'exécute à partir d'SQL Server Management ou le créateur de requête de Access...

    Voici mon code VBA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    Private Sub cmdReport_Click()
    On Error GoTo Erreur
    ErrRoll = False
     
    '** sauvegarde l'enregistrement !!
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
    Dim Db As Database
    Dim Ws As Workspace
    Dim Rs As Recordset
    Dim Rs1 As Recordset
    Dim Rs2 As Recordset
    Set Ws = DBEngine.Workspaces(0)
    Set Db = CurrentDb
    Dim HasDuplicate As Boolean
    HasDuplicate = False
    '** Recherche les doublons dans Tag #
    Set Rs = Db.OpenRecordset("SELECT DISTINCTROW First(TbTrxInHstDtl.NoTrx) AS NoTrxChamps, First(TbTrxInHstDtl.TagNo) AS UnitéNumberChamps, Count(TbTrxInHstDtl.NoTrx) AS NombreDeDbls FROM TbTrxInHstDtl " _
        & "GROUP BY TbTrxInHstDtl.NoTrx, TbTrxInHstDtl.tagNo " _
        & "HAVING (((Count(TbTrxInHstDtl.NoTrx))>1) AND ((TbTrxInHstDtl.NoTrx)=" & Me![NoTrx] & ") AND ((Count(TbTrxInHstDtl.TagNo))>1));", 8)
    If Not Rs.BOF Then
        MsgStop ("Le même numéro de Tag est inscrit en double !" & Chr$(13) & "Corrigez.")
        [RqTrxInDtl].SetFocus
        Exit Sub
    End If
    '*** check si en inventaire on a meme Tag No pour meme BOL(in)
    Set Rs = Db.OpenRecordset("SELECT TbInventaire.TagNumber, TbTrxInHstHdr.NoTrx FROM (TbInventaire INNER JOIN TbTrxInHstDtl ON TbInventaire.TagNumber = TbTrxInHstDtl.TagNo) INNER JOIN TbTrxInHstHdr ON (TbTrxInHstHdr.NoTrx = TbTrxInHstDtl.NoTrx) AND (TbInventaire.ClientProduitNo = TbTrxInHstHdr.ClientProduitNo) AND (TbInventaire.CliSource = TbTrxInHstHdr.ClientSource) AND (TbInventaire.BolIn = TbTrxInHstHdr.ClientBOLNo) " _
        & "WHERE (((TbTrxInHstHdr.NoTrx)=" & Me![NoTrx] & "));", 8)
    If Not Rs.BOF Then
        If vbNo = MsgConfirmA("Le numéro d'entreposage(U.E.) " & Rs![TagNumber] & " est inscrit" _
            & Chr$(13) & "en inventaire pour le même client" _
            & Chr(13) & " et le même numéro d'expédition du client(Exp.#-Client) !" _
            & Chr(13) & "Voulez-vous reporter quand même ?") Then
            [RqTrxInDtl].SetFocus
            Exit Sub
        End If
    End If
     
    If vbNo = MsgConfirmQ("Reporter cette transaction maintenant ?") Then
        Exit Sub
    End If
    DoCmd.Hourglass True
    Ws.BeginTrans
    ErrRoll = True
     
    '** insère Dtl
    Db.Execute ("INSERT INTO TbTrxInHstDtl ( NoTrx, TagNo, FormatExp, UnitéDeMesure, Localisation, [Note], Qté, QtéExtension, LigneNo, QtéUnit ) " _
        & "SELECT TbTrxInHstDtl.NoTrx, TbTrxInHstDtl.TagNo, TbTrxInHstDtl.FormatExp, TbProduits.UnitéDeMesure, TbTrxInHstDtl.Localisation, TbTrxInHstDtl.Note, TbTrxInHstDtl.Qté, TbTrxInHstDtl.QtéExtension, TbTrxInHstDtl.LigneNo, TbTrxInHstDtl.QtéUnit FROM (TbTrxInHstHdr INNER JOIN TbTrxInHstDtl ON TbTrxInHstHdr.NoTrx = TbTrxInHstDtl.NoTrx) INNER JOIN TbProduits ON (TbTrxInHstHdr.ClientSource = TbProduits.CliId) AND (TbTrxInHstHdr.ClientProduitNo = TbProduits.CliProduitNo) " _
        & "WHERE (((TbTrxInHstDtl.NoTrx)=" & Me![NoTrx] & "));"), dbFailOnError
    '*** Envoie en inventaire
    Db.Execute ("INSERT INTO TbInventaire (DateIn, CliSource, ClientProduitNo, CliLotNo, NbreUnits, QtéStock, TotalStock, FormatExp, TagNumber, Localisation, TrxLigneNo, RemorqueIn, BOlIn, TrxNumber, LaNote) " _
        & "SELECT DateTrx, ClientSource, ClientProduitNo, ClientLotNo, QtéUnit, Qté, QtéExtension, FormatExp, TagNo, Localisation, LigneNo, RemorqueNo, ClientBOLNo, TbTrxInHstHdr.NoTrx, Note " _
        & "FROM TbTrxInHstHdr INNER JOIN TbTrxInHstDtl ON TbTrxInHstDtl.NoTrx = TbTrxInHstHdr.NoTrx " _
        & "WHERE TbTrxInHstHdr.NoTrx = " & Me![NoTrx]), dbFailOnError
    Mon code bogue au dernier Db.Execute.

    Est-ce que quelqu'un est en mesure de m'aider?

  2. #2
    Membre chevronné Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Par défaut
    Bonsoir,

    La connection vers SQL Server n'est pas établie.
    en executant l'instruction suivante

    L'objet Db (de type database) va pointer vers la base Access et non pas vers une base SQL Server.

    Pour faire un lien vers une base extérieur il faut utiliser un objet connection qui va faire la connection entre l'application access et la base de donnée SQL Server. Dans la chaine de connection il est possible d'utiliser un driver ODBC.

    Un bon article de départ sur la msdn : http://msdn.microsoft.com/fr-fr/library/bb469898.aspx

    Cordialement,

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 11
    Par défaut
    Bonjour Tonioyo,

    La connexion avec la base de données SQL est active puisque le "INSERT INTO TbTrxInHstDtl" qui est fait avant le "INSERT INTO TbInventaire" fonctionne parfaitement sur la base de données SQL. Ce n'est pas moi qui ai fait le lien entre l'application et la base de données SQL, mais il fonctionne.

  4. #4
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonsoir,

    je pencherai pour une erreur de syntaxe ou un problème de compatibilité de type entre champ source et champ destination.

    Je note que dans la deuxième requête les champs ne sont pas préfixés du nom de la table source.
    Se pourrait-il que le nom d'un champ existe dans plus d'une table ?

    A+

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 11
    Par défaut
    J'ai vérifié et revérifié des dizaines de fois la syntaxe et le problème n'est pas là, car quand je l'exécute directement via SQL Management ou le créateur de requête d'Access, cette requête fonctionne. Pourquoi ne marche-t-elle pas à partir de mon application?

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 134
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Et si tu posais un On Error Goto... tu aurais un bel élément de réponse.
    Du moins un N° d'erreur que nous pourrions interpréter...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

Discussions similaires

  1. [AC-2007] "ODBC --call failed" au deuxième passage
    Par yonnel dans le forum Access
    Réponses: 4
    Dernier message: 10/06/2011, 11h15
  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
  3. Access 2003 -> SQL Serveur 2005 Sans ODBC
    Par Destiny dans le forum Access
    Réponses: 2
    Dernier message: 21/02/2007, 15h28
  4. Réponses: 1
    Dernier message: 20/06/2006, 19h42
  5. Réponses: 1
    Dernier message: 11/12/2005, 21h21

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