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

Requêtes et SQL. Discussion :

<DEBUTANT> Remplir une zone de texte en fonction d'une liste


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Points : 13
    Points
    13
    Par défaut <DEBUTANT> Remplir une zone de texte en fonction d'une liste
    Bonjour,

    mon problème est assez simple mais me parait difficile à expliquer. Je vais tacher d'être le plus clair possible.

    Dans un formulaire j'ai :

    -Une liste deroulante (Combo_eve) dont la valeur est la clef primaire d'une table("evenement") (qui n'est pas la table que gère ce formulaire).

    -Une zone de texte ("Frais")

    J'aimerais que lorsque je change l'événement choisi (via la liste déroulante), la zone de texte prenne la valeur evenement.frais (de l'enregistrement choisi via la clef primaire).

    J'ai essayé une utilisant une requête SQL mais apparemment on ne peut pas remplir une zone de texte via du SQL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Combo_eve_Change()
    SQL = "SELECT Frais FROM [TBL Pelerinage/evenement] WHERE ID =" & Me.evenement.Value
    Me.Frais.Value = SQL
    End Sub
    En fouillant sur le forum j'ai cru comprendre que je devrais utiliser la fonction "recordset" mais j'ai pas bien compris ce que c'etait exactement

    Merci bien !

  2. #2
    Expert éminent
    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
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    En effet on ne pas récupérer directement le résultat d'une requête.
    C'est pour cela que les fonctions DLookup, Dcount, DSum, ... etc existent.

    Un recordset est un objet spécialisé qui permet de lire et manipuler un jeu d'enregistrements (une requête SELECT retourne un jeu d'enregistrements).
    Code vb : 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
    Private Sub Combo_eve_Change()
    Dim rs As DAO.RecordSet
    SQL = "SELECT Frais FROM [TBL Pelerinage/evenement] WHERE ID =" & Me.evenement.Value
    ' Ouvre un recordset qui contiendra le résultat de la requête
    Set rs=CurrentDb.OpenRecordset(SQL)
    ' Par défaut, après ouverture, l'enregistrement actif est le premier
    ' S'il n'y a pas d'enregistrements EOF est Vrai
    If Not rs.EOF Then
       ' 1er champ (1ère colonne) a l'incide 0
       Me.Frais.Value = rs.Fields(0)
       ' autre écriture possible
       Me.Frais.Value = rs.Fields("Frais")
    Else
       ' aucun enregistrement retouné
    End If
    rs.Close
    End Sub
    Il n'y a toujours qu'un enregistrement actif.
    Comme quand tu ouvres une table, il y a un curseur tout à gauche pour montrer la ligne active (l'enregistrement actif).
    Fields est une collection des champs du jeu d'enregistrement. La propriété par défaut est Value.
    renvoie donc la valeur du champ Frais, de l'enregistrement actif.

    Voir le tuto Définition et manipulation de données avec DAO, en particulier les parties 2 et 5.

    Sinon, sans recordset :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Combo_eve_Change()
    Me.Frais.Value = Dlookup("Frais", "TBL Pelerinage/evenement", "ID=" & Me.evenement.Value)
    End Sub

    A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Waouh !

    Merci beaucoup ca marche. Je vais essayer de comprendre mieu en lisant le tuto!


    Bonne soirée

    Manu

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    J'ai un peu le même soucis que je n'arrive pas à régler.

    J'ai une table "[TBL Pelerinage/evenement]" qui possède entre autre les champs:
    -"ID" (clef primaire)
    -"Default" (Un booleen)

    J'aimerais que lorsque je clique sur un bouton ,l'événement suivant se passe :
    L'enregistrement dont le champs Défault est égal à OUI(il ne peut y en avoir qu'un) passe à non.

    J'arrive à repérer l'ID de l'enregistrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dlookup("ID", "TBL Pelerinage/evenement", "Default=Oui")
    Mais pas à modifier la valeur de Default.

    Je ne vois pas dans le tuto que tu m'a envoyé ce qui pourrais m'aider.

    Merci encore.

    Manu

  5. #5
    Expert éminent
    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
    Points : 7 759
    Points
    7 759
    Par défaut
    Dans la partie 5.4 le tuto traite de la modification des données à l'aide d'un recordset.
    Exemple
    Code vb : 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
    Dim db As DAO.Database
    Dim rs As DAO.RecordSet
    ' Instruction SQL de sélection des enregistrements pour lesquels
    ' Default=Oui
    SQL = "SELECT ID, [Default] FROM [TBL Pelerinage/evenement] WHERE [Default]=True"
    ' référence un objet base de données sur la base en cours
    Set db = CurrentDb
    ' Ouvre un recordset qui contiendra le résultat d'instruction SQL SELECT
    Set rs = db.OpenRecordset(SQL, dbOpenDynaset)
    ' S'il n'y a pas d'enregistrements EOF est Vrai
    If Not rs.EOF Then
       ' On passe en mode modification de l'enregistrement actif
       rs.Edit
       ' modification
       rs.Fields("Default")=False
       ' enregistrement des modifications 
       rs.Update
    Else
       ' aucun enregistrement retouné
    End If
    rs.Close
    End Sub
    Dans cet exemple pas besoin du DLookup car l'instruction SQL fait déjà le filtrage.


    Si tu veux utiliser DLookup, il faut ensuite exécuter une instruction SQL UPDATE.
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim strID As String, strSqlIns As String
    strID = Nz(Dlookup("ID", "TBL Pelerinage/evenement", "Default=Oui"), "")
    if strID <> "" Then
       strSqlIns = "UPDATE [TBL Pelerinage/evenement] SET [Default] = False WHERE ID = " & strID
       DoCmd.SetWarnings False
       DoCmd.RunSQL strSqlIns
       DoCmd.SetWarnings True
    End If
    Nz(..., "") sert à remplacer Null par "" dans le cas où DLookup ne trouve rien et renvoie Null.

    A+

Discussions similaires

  1. [AC-2007] remplir automatiquement une zone de texte à l'aide d'une requete
    Par zemickeyman dans le forum IHM
    Réponses: 5
    Dernier message: 15/03/2010, 10h05
  2. [AC-2003] renommer une colonne de requête en fonction d'une zone de texte d'un formulaire
    Par tibofo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 04/03/2010, 16h16
  3. Réponses: 4
    Dernier message: 02/07/2007, 19h01
  4. Réponses: 11
    Dernier message: 29/05/2007, 08h05
  5. Réponses: 1
    Dernier message: 19/04/2006, 14h29

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