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

IHM Discussion :

[VBA-A97] DAO : Syntaxe SQL, erreur d'exécution '3078'


Sujet :

IHM

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 310
    Points : 139
    Points
    139
    Par défaut [VBA-A97] DAO : Syntaxe SQL, erreur d'exécution '3078'
    Bonjour à tous...

    Je me tourne vers vous pour une difficulté que je rencontre.
    Via un code agrémenté de DAO (merci Tofalu ;-)), je souhaite mettre à jour des champs de tables de ma db. Pour ce faire j'ai donc crée une table avec [Table]-> Table qui va petre modifiée; [NCde]->Champ à modifier; [NLigCde]->Champ servant à la modif.
    Le code est le suivant :
    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
     '=====> FONCTION DE FUSION DU N° COMMANDE AVEC N° DE LIGNE (boucle sur tblFusionNCde pour définition des tables et champs) <=====
    Private Function FusionCdeLigne()
    Dim strTable As String
    Dim strChampFirst As String
    Dim strChampSecond As String
     
    Set oRst = oDB.OpenRecordset("tblFusionNCde", dbOpenTable)
        With oRst
            While Not .EOF
            strTable = (oRst.Fields("Table").Value)
            strChampFirst = (oRst.Fields("NCde").Value)
            strChampSecond = (oRst.Fields("NLigCde").Value)
                oDB.Execute "UPDATE strTable SET strChampFirst = strChampFirst * 10000 + strChampSecond"
                .MoveNext
            Wend
        End With
        'Libération des objets
        oRst.Close
        Set oRst = Nothing
    End Function
    Les 3 variables sont bien reconnues (quand je passe dessus j'ai bien la valeur attendu entre "") mais le code plante sur la ligne avec la syntaxe SQL (Le moteur de base de données Microsoft Jet ne peut pas trouver la table ou la requête source strTable. Assurez-vous qu'elle existe et qu'elle est correctement orthographiée. (Erreur 3078).

    Je sais pas si cela ne viendrait pas des "" car mes tables n'en ont pas ! Mais comment les enlever lors de l'affectation des variables...?

    Merci à tous pour votre aide.
    @+

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 353
    Points : 23 819
    Points
    23 819
    Par défaut
    Non ton pb vient du fait que tes noms de variables sont DANS la chaine SQL et Access les considère comme du texte simple.

    Je te suggère ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "UPDATE " & strTable  & " SET " & strChampFirst & " = " & strChampFirst & " * 10000 + " & strChampSecond

    Accessoirement tu peux remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strTable = (oRst.Fields("Table").Value)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strTable = oRst![Table]
    C'est seulement un peu plus compacte comme notation.

    A+

    A+

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 310
    Points : 139
    Points
    139
    Par défaut
    Merci Marot, je n'avais pas bien cerné la notion du & ;-)
    Bien joué également pour le compactage :-p

    @+

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 310
    Points : 139
    Points
    139
    Par défaut
    Bonjour à tous...

    J'ai "cogiter" depuis et pouvez-vous m'expliquer la différence fondamentale entre ces 2 notations, laquelle préférer,...?
    Je n'ai pas réussi à percevoir ce qu'il fallait que je perçoive

    Merci
    @+

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 353
    Points : 23 819
    Points
    23 819
    Par défaut
    Personnellement je préfére la notation ! et c'est avce celle la que j'ai appris Access, mais si tu es un puriste de l'objet tu préférera la notation Fields("Table").Value qui montre clairement même si tu ne connais pas Access que tu va chercher la valeur de l'élément "Table" dans la collection des champs. Elle est aussi plus 'portable', par exemple c'est là même en ASP.

    Evidement la seconde est la seule utilisable pour ittérer sur tous les champs par programme.

    A+

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 310
    Points : 139
    Points
    139
    Par défaut
    merci marot ;-)

  7. #7
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Euh, il n'y a pas vraiment besoin de recorset ici. De plus un UPDATE sans WHERE ça me parait un peu bizarre. Tu es sur qu'une requete UPDATE sans DAO n'aurait pas fait l'affaire ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Ajout d'Enrg par VBA/SQL = > Erreur d'exécution '-2147217900 (80040e14)'
    Par joan-74 dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/02/2015, 05h47
  2. Syntaxe SQL - Erreur 2465
    Par Domi2 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 03/08/2007, 16h53
  3. erreur de syntaxe sql dans vba
    Par @rkane dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/12/2006, 18h23
  4. Réponses: 2
    Dernier message: 08/06/2006, 06h29
  5. [VBA-A97] DAO : Suppression champs et création MCD...
    Par JeremieT dans le forum VBA Access
    Réponses: 27
    Dernier message: 01/06/2006, 17h34

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