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 :

Concaténation dans une fonction et dans une requéte InsertInto [AC-2007]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Concaténation dans une fonction et dans une requéte InsertInto
    Bonjour,

    Voici mon problème : Dans un premier temps je souhaiterai réaliser une concaténation dans l'appel d'une fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub btnAjout_Click()
    Dim rep As String
    Dim nbAjout As Integer
    rep = InputBox("combien voulez vous ajouter de ligne(s)? (4 lignes au maximum)")
    If rep = 1 Then
    nbAjout=nbAjout+1
    Call AfficherChamps" & cstr(nbAjout) & "()
    Dans le but d'appeler la fonction AfficherChamps1. Cela me génère une erreur de syntaxe que je n'arrives pas à résoudre.



    Dans un second temps je souhaiterais réaliser aussi une concaténation mais dans une requête Insert Into qui est dans une boucle pour . Dans le but de réaliser une requête d'insertion pour chaque champ que j'ai, car j'ai plusieurs textBox qui commence par numSup mais dont le numéros est différent (numSup1,numSup2 ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim i as integer
    for i = 1 to nbAjout+1
    DoCmd.RunSQL ("INSERT INTO [table](numeroSupport)VALUES('" & numSup" & Cstr(i) & ".Value &"')
    Ce code me génère aussi une erreur de syntaxe

    En espérant avoir été assez clair ! Merci d'avance de votre aide !

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Pour quoi ne pas directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call AfficherChamps & nbAjout & "()"
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim i as integer
    for i = 1 to nbAjout+1
    DoCmd.RunSQL "INSERT INTO [table](numeroSupport)VALUES ('" & numSup" & i & ".Value ')"
    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 117
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 117
    Points : 1 640
    Points
    1 640
    Par défaut
    1er point:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call AfficherChamps" & cstr(nbAjout) & "()
    Tu ne peut pas construire dynamiquement le nom d'une fonction ou procedure. Le nom n'est pas une variable, et fonctionne un peut comme une adresse postale, il doit etre complet avant l'appel, sinon le facteur (et par analogie, le programme) ne la retrouve pas.
    Donc soit tu appelle directement ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If (maVariable = 5) Then
        call maFonction5()
    End If
    Si tu as vraiment besoin de générer le nom de ta fonction dynamiquement, et ne peut pas faire autrement, tu peux utiliser l'instruction Evaluate (mais c'est très moche).

    2e point:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL ("INSERT INTO [table](numeroSupport)VALUES('" & numSup" & Cstr(i) & ".Value &"'
    Même scenario, le nom des contrôles doit etre integralement qualifié.
    Ici tu peux utiliser une boucle For Each sur la collection Controls de ton formulaire, tester le nom des contrôles et generer ton code SQL en conséquences.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    madefemere tes deux réponses ne fonctionnent pas j'ai toujours une erreur.

    Deedolith je prend bonne note de ta remarque. Pour ce qui est de la solution numéros 2 serais tu capable de me l'expliquer plus en détail (avec du code). J'ai testé chaque cas au lieu de faire un for each et honnêtement c'est ingérable.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 117
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 117
    Points : 1 640
    Points
    1 640
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim oCtrl As Control
     
        '// Boucle sur tous les contrôles du formulaire    
    For Each oCtrl In Me.Controls
            '// Filtre sur le nom du contrôle
        If (InStr(oCtrl.Name, "numSup") <> 0) Then
                '// Instruction SQL
            DoCmd.RunSQL ("INSERT INTO [table](numeroSupport) VALUES(" & oCtrl.Value & ")")
        End If
    Next

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Merci pour ta solution ! Je mets la discussion en résolu !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/03/2013, 17h13
  2. Réponses: 7
    Dernier message: 09/06/2011, 14h32
  3. Réponses: 3
    Dernier message: 09/06/2011, 14h22
  4. Réponses: 8
    Dernier message: 05/04/2011, 08h06
  5. Réponses: 4
    Dernier message: 27/11/2009, 17h08

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