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 :

DoCmd.RunSQL avec INSERT INTO [AC-2003]


Sujet :

IHM

  1. #1
    Invité
    Invité(e)
    Par défaut DoCmd.RunSQL avec INSERT INTO
    Bonjour,
    J'ai un petit soucis sur une macro VBA pour la création d'une base access. J'ai un formulaire de saisie de document qui regroupe différentes informations dont :
    La référence (format texte)
    La date de publication du document (format date)
    Le numéro de bordereau d'envoi (format texte)
    L'état (format numérique)
    Sa révision (format numérique)

    Je souhaite sur le clic d'un boutton que les informations du formulaire soit envoyées dans une table historique (nommé histo)

    J'ai fais la macro VBA suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Commande81_Click()
    If IsNull(Me.ref_doc) Then Exit Sub
    DoCmd.SetWarnings False 'on suspend les avertissements
       DoCmd.RunSQL "INSERT INTO histo (document, revision, date, num_be, etat) VALUES " & ref_doc & " AS Expr1," & lst_rev & " AS Expr2," & date_be & " AS Expr3," & num_be & " AS Expr4," & lst_etat & " AS Expr5;"
    DoCmd.SetWarnings True ' on rétablit les messages d'avertissement
    End Sub
    Je précise que :

    ref_doc : nom donné au champ formulaire ayant la référence document

    lst_rev : nom donné à la liste déroulante ayant la révision

    date_be : nom donné au champ formulaire ayant la date de publication

    num_be: nom donné au champ formulaire ayant le numéro de bordereau

    lst_etat : nom donné au à la liste déroulante ayant l'état du document

    Lors de l'execution j'ai un problème run-time error 3134 : Erreur de syntaxe dans INSERT INTO mais je ne comprend pas pourquoi. J'ai regardé sur des forum et meme l'aide sur la commande DoCmd.RunSQL mais je n'ai rien trouvé.
    J'ai testé aussi avec SELECT à la place de VALUES et & Me.variable & afin de trouver mais en vain..

    Merci d'avance de la moindre idée de solution!

    Nicolas

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour
    Il semble qu'il y ait des erreurs dues aux champs texte et numériques.
    Suit l'exemple ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim strSql as string
    strSql = "Insert into TaTable (champ1, champ2, champ3) Values ('ValeurTexte', ValeurNumérique, 'ValeurTexte');"
     
    DoCmd.SetWarnings False
    DoCmd.RunSQL strSql
    DoCmd.SetWarnings True
    Ne pas hésiter à incorporer une ligne après la définition de strSql:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print strSql 'sert à contrôler dans la fenêtre d'exécution
    Cela permet de voir si les variables sont bien retranscrites dans la requête.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Exact. Le problème vient de date.

    Je viens de faire cette macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Commande81_Click()
    Dim strSql As String
    strSql = "Insert into test (texte, num) Values ('ValeurTexte', 14);"
     
    DoCmd.SetWarnings False 'on suspend les avertissements
       DoCmd.RunSQL strSql
    DoCmd.SetWarnings True ' on rétablit les messages d'avertissement
    End Sub
    Avec une table test avec:
    texte en string
    num en numérique

    Si j'ajoute date en format date et que le code devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Commande81_Click()
    Dim strSql As String
    strSql = "Insert into test (texte, num, date) Values ('ValeurTexte', 14, 11/07/2012);"
     
    DoCmd.SetWarnings False 'on suspend les avertissements
       DoCmd.RunSQL strSql
    DoCmd.SetWarnings True ' on rétablit les messages d'avertissement
    End Sub
    la ça bug.. Meme en stockant la variable date dans une string ca ne fonctionne pas.
    J'ai testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    strSql = "Insert into test (texte, num, date) Values ('ValeurTexte', 14, '11/07/2012');"
    et
    strSql = "Insert into test (texte, num, date) Values ('ValeurTexte', 14, '11072012');"
    Par contre le fait de nommer les variable du formulaire "& variable &" c'est bon?

    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il faut que la date soit encadrée par #

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'ai toujours la même erreur meme avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSql = "Insert into test (texte, num, date) Values ('ValeurTexte', 14, #11/07/2012#);"
    et test.date en format date

  6. #6
    Invité
    Invité(e)
    Par défaut
    il ne faut pas appeler un champ: date. C'est un nom réservé. Appelle le autrement.

  7. #7
    Invité
    Invité(e)
    Par défaut
    J'ai trouvé !
    En faite ce qui était curieux c'est que même en texte cela bug. En faite l'erreur était dans le nom de la variable date ... qui est réservé par Access.
    Je test du coup mon code de base avec un autre nom de variable et je vous tiens au courant.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Je viens de changer le nom de la variable date et j'ai tester la macro avec mon formulaire. Je ne comprend pas ce qui bug encore.

    J'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Commande81_Click()
    Dim strSql As String
    strSql = "Insert into histo(doc, revision, moment, num_be, state) VALUES " & ref_doc & "," & lst_rev & "," & date_be & "," & num_be & "," & lst_etat & ";"
     
    DoCmd.SetWarnings False 'on suspend les avertissements
       DoCmd.RunSQL strSql
    DoCmd.SetWarnings True ' on rétablit les messages d'avertissement
    End Sub
    Lorsque je passe ma souris sur les variables ref_doc etc...
    J'ai bien la variable s'affiche en info-bulle.
    J'ai controlé les formats des variables de histo pour m'assurer du bon format
    mais rien à faire...
    Est-ce date_be? ou le format de la date? c'est à en perdre la tête

  9. #9
    Invité
    Invité(e)
    Par défaut
    Tu fais les mêmes erreurs qu'au début:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSql = "Insert into TaTable (champ1, champ2, champ3) Values ('" & VariableTexte & "', " & VariableNumerique & ", #" & VariableDate & "#);"

  10. #10
    Invité
    Invité(e)
    Par défaut
    Oups j'avais testé avec # dans les " "
    Merci beaucoup ca fonctionne du tonnerre !!

    Bonne continuation
    Nicolas

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

Discussions similaires

  1. [MySQL][Debutant] "unknow field" avec "INSERT INTO"
    Par L3gion dans le forum Langage SQL
    Réponses: 8
    Dernier message: 12/12/2006, 12h15
  2. Réponses: 12
    Dernier message: 25/11/2005, 13h29
  3. probleme avec insert into
    Par bscorpion dans le forum Langage SQL
    Réponses: 5
    Dernier message: 05/07/2005, 14h00
  4. Réponses: 3
    Dernier message: 10/05/2005, 12h02
  5. probleme clé sequentiel avec insert into
    Par shake dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/06/2004, 16h54

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