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]Remplissage d'un formulaire par recordset


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 82
    Points : 52
    Points
    52
    Par défaut [VBA]Remplissage d'un formulaire par recordset
    Bonjour,

    Apres etude du tutorial de christophe warrin sur DAO je me suis lancé dans la réalisation d'un formulaire dont les données sont affichées apres recuperation d'une requete dans un recordset. J'ai repris le code du tutorial mais je rencontre une erreur que je n'arrive pas a résoudre.

    Tou d'abord voici l'apparence du formulaire qui recupere les données:



    et voici le code :

    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
     
    Option Compare Database
     
    Dim oRstDate As DAO.Recordset
    Dim intnbLus As Integer
     
    Private Sub Form_Load()
    Dim oDB As DAO.Database
    Set oDB = CurrentDb
    Set oRstDate = oDB.OpenRecordset("SELECT [Chantier].[DateDebut] FROM Moteur INNER JOIN Chantier ON [Moteur].[ESN]=[Chantier].[ESN] WHERE ((([Moteur].[ESN]) = [Forms]![Prepa_Rech_ESN]![Rch_Txt_ESN])) ORDER BY [Chantier].[DateDebut] DESC;", dbOpenDynaset)
    LectureVersLAvant
    End Sub
     
    Private Sub LectureVersLAvant()
    On Error GoTo err
    RemplirZoneTexte oRstDate.GetRows(5)
    Exit Sub
    err:
    If err.Number <> 3021 Then
    MsgBox "Une erreur est survenue pendant la lecture des données", vbCritical, "Erreur"
    End If
    End Sub
     
     
    Sub RemplirZoneTexte(Tableau As Variant)
    Dim I As Integer
    intnbLus = UBound(Tableau, 2) + 1
    For I = 0 To intnbLus - 1
        Controls("TDate" & I + 1) = Tableau(0, I)
        Controls("TDate" & I + 1).Visible = True
    Next I
    For I = intnbLus + 1 To 5
        Controls("TDate" & I).Visible = False
    Next I
    End Sub
     
    Private Sub LectureVersLArriere()
    On Error GoTo err
    oRstDate.Move -1 * intnbLus - 5
    RemplirZoneTexte oRstDate.GetRows(5)
    Exit Sub
    err:
    Select Case err.Number
    Case 3021: oRstDate.MoveFirst
    Case Else: MsgBox "Une erreur est survenue pendant la lecture des données", vbCritical, "Erreur"
    End Select
    End Sub
    L'erreur que j'obtiens lorsque j'ouvre le formulaire a partir d'un autre qui contient le champ de la requete est : " Trop peu de paramètres, 1 attendu"
    J'ai beau cherché je ne vois vraiment pas ou il manque un parametre.

    Merci pour votre aide :-)

  2. #2
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Lors de l'écriture de requêtes SQL sous forme de chaine de caractères, pense à tester le SQL généré voir s'il correspond à ton attente.
    Par exemple en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim strSQL as String
    strSQL =  "SELECT [Chantier].[DateDebut] FROM Moteur INNER JOIN Chantier ON [Moteur].[ESN]=[Chantier].[ESN] WHERE [Moteur].[ESN]) = [Forms]![Prepa_Rech_ESN]![Rch_Txt_ESN] ORDER BY [Chantier].[DateDebut] DESC;"
    Debug.Print strSQL
    Le SQL que tu as crée est alors affiché dans la fenêtre d'exécution (^g), et tu peux même la tester dans le requêteur d'Access pour savoir si elle renvoie le résultat attendu.

    En espérant t'aider.
    J'aime les gâteaux.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    Bonjour,
    Pour avoir le détail de ta reqête, il faut que tu places un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Debug.print ("SELECT [Chantier].[DateDebut] FROM Moteur INNER JOIN Chantier ON [Moteur].[ESN]=[Chantier].[ESN] WHERE ((([Moteur].[ESN]) = [Forms]![Prepa_Rech_ESN]![Rch_Txt_ESN])) ORDER BY [Chantier].[DateDebut] DESC;"
    Set oRstDate = oDB.OpenRecordset("SELECT [Chantier].[DateDebut] FROM Moteur INNER JOIN Chantier ON [Moteur].[ESN]=[Chantier].[ESN] WHERE ((([Moteur].[ESN]) = [Forms]![Prepa_Rech_ESN]![Rch_Txt_ESN])) ORDER BY [Chantier].[DateDebut] DESC;", dbOpenDynaset)
    Tu pourras ainsi récupérer dans la fenêtre de debug (Ctrl G) la String exacte de la requête exécutée.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 82
    Points : 52
    Points
    52
    Par défaut
    merci pour vos reponses je test ca tout de suite et je vous dis ce qui se passe :-)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 82
    Points : 52
    Points
    52
    Par défaut
    Alors j'ai testé avec le requeteur d'access en rentrant juste la valeur dans le formulaire , la requete marche bien.
    En revanche en faisant un debug.print dans le code et en faisant un pas a pas détaillé, il s'affiche la requete ( select ....) dans la fenetre d'execution mais pas le resultat.

    je pense que ca ne vient po de la requete puisque dans le requeteur cela marche.

    quand je passe sur la ligne LectureVersLAvant c'est la que se produit l'erreur : "trop peu de paramètres. 1 attendu"'

    j'ai toujours po d'idée . :-(

    edit: en fait en lancant le debogueur c'est la ligne :
    "Set oRstDate = oDB.OpenRecordset(strSQL,dbOpenDynaset)" qui genere l'erreur.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Le debug.print ne t'affiche par le résultat, l'objectif est de voir si tes variables dans ta clause WHERE sont bien là, si la syntaxe de l'ensemble est bonne, et notamment de voir si tes variables qui s'affichent sont bien entourés de ' pour du texte, de rien pour des chiffres et # pour des dates.

    Starec

  7. #7
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Utilise le debugger pour savoir où ça plante exactement. Une fois la ligne localisée ce sera plus simple.
    J'aime les gâteaux.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 82
    Points : 52
    Points
    52
    Par défaut
    ah d'accord. ben la requete s'affiche bien comme elle l'est dans le code .
    comme il n'y a que dans champ de formulaire , il n'y pas de guillemets.

    j'ai fait un edit de mon message precedent pour la cause de l'erreur.

    (edit: en fait en lancant le debogueur c'est la ligne :
    "Set oRstDate = oDB.OpenRecordset(strSQL,dbOpenDynaset)" qui genere l'erreur.)

    merci de votre aide

    L'erreur vient du faire qu'il n'arrive pas a trouver la valeur qui est entré dans le formulaire. Alors je l'ai rentré manuellement et cela marche jusqu'a générer une nouvelle erreur dans la fonction remplirzonetexte.

    la ligne controls("TDate" & I + 1) = Tableau(0, I)

    message " erreur de compilation, sub ou fonction non définie"

  9. #9
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Citation Envoyé par titof90
    comme il n'y a que dans champ de formulaire , il n'y pas de guillemets.
    Pas compris.

    Je pense que Starec t'a mis sur la bonne voie.
    Texte = guillemets obligatoires
    J'aime les gâteaux.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Re

    L'erreur ce signale là, c'est quand Access interpréte la chaine SQL, car pour lui elle n'existe pas avant. Ton message vient d'un problème sur la chaine SQL.

    C'est le résultat du Debug.Print que tu dois annalyser, montre le nous.

    Starec

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 82
    Points : 52
    Points
    52
    Par défaut
    L'erreur vient du fait qu'il n'arrive pas a trouver la valeur qui est entré dans le formulaire donc cela venait bien du sql vous aviez raison
    . Alors je l'ai rentré manuellement et cela marche jusqu'a générer une nouvelle erreur dans la fonction remplirzonetexte.

    la ligne controls("TDate" & I + 1) = Tableau(0, I)

    message " erreur de compilation, sub ou fonction non définie

    edit: erreur normale je suis bete c'est les controls du formulaire il faut que le lance le formulaire pour voir si ca marche.
    et ca marche !! :-)

    Merci a tous pour votre aide.

    titof90 content ( mais avec quelques cheveux en moins quand meme lol)

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

Discussions similaires

  1. [AC-2010] Remplissage d'un formulaire par requête SQL
    Par Kalskoy dans le forum IHM
    Réponses: 1
    Dernier message: 13/06/2014, 20h18
  2. Réponses: 2
    Dernier message: 25/07/2007, 11h24
  3. [VBA] remplissage de recordset
    Par ip203 dans le forum Access
    Réponses: 3
    Dernier message: 20/02/2007, 07h58
  4. Réponses: 6
    Dernier message: 07/06/2006, 12h41
  5. [VBA-E]ajouter un textbox sur un formulaire par code?
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 22/03/2006, 09h33

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