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 :

Champs de Requête dans un formulaire calendrier


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Champs de Requête dans un formulaire calendrier
    Bonsoir ,

    Après des recherche infructueuse sur le forum et des test farfelus, je reviens pour vous exposer mon problème:
    Je débute sur Access depuis peu, dans l'objectif de créer une base de donnée de type calendrier .

    Je souhaite insérer le résulta d'une requête de concaténation (ConcatéNom) ,qui contiens les noms des personne qui seront présent pour une date (Projet),
    dans un formulaire type calendrier .

    j'ai tenté de lié La requete (Req conca) a ma table (moncalendrier) avec type de jointure 2 ,pour renseigner les enregistrement date de mon calendrier mais je ne retrouve pas la requéte dans la liste de champs lié lorsque j’édite mon formulaire (moncalendrier)

    Par la suite je me suis orienté vers les requêtes "mise à jour" et "création de table" ... rien de convaincant ... mais peut étre que ?

    merci de m'avoir lu

    Maj : je vient de voir la règle sur les P.J je la retire

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Bonjour,
    j'essaye d'éclaircir ma question :

    Comment mettre à jour une table avec les dernières valeurs trouvés d'une requête ?
    Dans le but d’insérer ces valeurs dans ma table calendrier avec une liaison type 2 .

    une tite idée ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Bonsoir ,

    Aurais-je mal formulé ma question ? ou es ce simplement impossible ?

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    C'est possible et c'est une question qui revient régulièrement.

    Il faut se le programmer. Ici un exemple de 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
     
    public function Conactener() as string
       dim result a string
       dim db as dao.database: set db=currentdb
       dim r as dao.recordset: set r=db.openRecordset("NomTaTable", dbOpenDynaset)
     
       do while not r.eof()
     
         if result<>"" then
            result=result "; "
         end if
     
         result=result & r![NomTonChamp]
         r.movenext
       loop
     
       r.close: set r=nothing
       db.close:set db=nothing
       Concatener=result
    end function
    s'utilise en faisant un champ calculé :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Concatenation : Concatener()

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Bonsoir marot_r,

    Merci beaucoup pour ton aide ,mais j'ai besoin d'un éclaircissement sur ce code Sql ...

    Ou dois je placé ce code SQL ? Es ce bien dans l'expression du champ calculé crée dans ma table que je souhaite renseigner ?

    Si c'est le cas une erreur d'expression survient ...

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Autant que je sache on ne peut pas faire la concaténation que tu demandes en SQL et donc ceci est du code VBA.

    Il faut le mettre dans un module et ensuite tu peux l'appeler depuis une requête, un formulaire ou un rapport.
    Comme la fonction est Public elle devient disponible comme les fonctions internes de Access telle que DSum().
    C'est un moyen très puissant d'augmenter les capacités de Access et je remercie tous les jours (ou presque) le collègue qui me l'a appris il y a plus de 15 ans.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Bonjour marot_r,

    Les Voix du VBA commencent a me pénétrer

    j'ai bien crée le Module en vba , c'est lorsque que vous me parlez du Champ calculé et du Code Sql que je ne saisie pas l'Astuce:

    "S'utilise en faisant un champ calculé :
    Code SQL:
    Concatenation : Concatener()"

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Va dans l'éditeur de requête et va dans une colonne vide.
    Tape : Concatenation : Concatener()Cela va créer un champ calculé.

    Le SQL est le langage (ou code) qui est utilisé pour "représenter" ta demande.

    ici un exemple de SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from [TaTable]
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Bonjour marot_r,

    Décidément je ne m'en sort toujours pas ... j'ai besoin de ton aide encore

    Lorsque que je lance la requête ,le débogueur VBA se lance en indiquant la première ligne en jaune.
    J'ai repéré 2 petite erreur dans le code "Conactener" ansi que "A string" mais sa ne corrige pas l'erreur.

    je voulais aussi revenir sur ton précédent commentaire qui décrit la méthode depuis une requête, mais comment appeler ce champ calculer depuis un formulaire ?

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 637
    Points : 14 611
    Points
    14 611
    Par défaut
    Bonjour,
    ci-joint le code après correction :
    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
    Public Function Concatener() As String
       Dim result As String
       Dim db As dao.Database: Set db = CurrentDb
       Dim r As dao.Recordset: Set r = db.OpenRecordset("NomTable", dbOpenDynaset)
     
       Do While Not r.EOF()
     
         If result <> "" Then
            result = result & "; "
         End If
     
         result = result & r![NomChamp]
         r.MoveNext
       Loop
     
       r.Close: Set r = Nothing
       db.Close: Set db = Nothing
       Concatener = result
    End Function
    Il faut remplacer NomTable et NomChamp par les noms corrects. Cela dit, on peut aussi modifier le code pour les passer en paramètres mais ce n'est pas le sujet.
    Essaie déjà avec ce code.
    Pour l'utilisation avec formulaire, il suffit de mettre =Concatener() dans la propriété Source Contrôle d'une zone de texte.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Bsoir tee_grandbois !

    Merci pour le coup de pouce

    je me suis trouvé d'autre problématique Access entre tant , je test ton code dans peu de temps et je revient mettre le poste en résolu

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Bonjour ,
    Damn !!
    le code fonctionne parfaitement mais malheureusement c'est une mauvaise piste

    Il faut donc que je repose mon problème par étape

    Donc ,mon objectif est de créer un calendrier 365 jour dynamique afin d'y insérer le champ "Nomparticipant" présent dans la table "Tbl_projet" en fonction de la date.
    j'ai trouvé un code me permettant de créer une table calendrier

    J'ai commencé par lier le champ "mdate" de "Tbl_calendrier" avec le champ date "Projet" de "Tbl_projet" avec le type de jointure 2 .
    Ensuite dans le formulaire continu moncalendrier j'ajoute le champ participant ainsi lorsque les champs date sont égaux le champ "Nomparticipant" est renseigné sinon il vide.

    Probléme 1 lorsque plusieurs "Nomparticipant" on la même dates, moncalendrier crée des enregistrement supplémentaire ce qui n'est mon but.

    j'ai donc pensai à utilisé une requête "Req_conca" de concaténation via VBA qui regroupe les participants par dates :

    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
    48
    49
    50
    51
    Option Explicit
     
    Option Compare Database
    Public Function ConcatColonne(ByVal vProjet As Variant, _
                                  ByVal Projet As String, _
                                  ByVal NomParticipant As String, _
                                  ByVal Tbl_projet As String, _
                                  ByVal sWhere As String, _
                                  ByVal bGroupBy As Boolean, _
                                  ByVal vIsOrderAsc As Variant, _
                                  ByVal sSeparateur As String) As String
     
       On Error GoTo errtag
       Dim odb As dao.Database
       Dim ors As dao.Recordset
       Dim sSql As String
       If Not IsNull(vProjet) Then
          'Préparation de la requête
          sSql = "SELECT " & NomParticipant & " & """ & sSeparateur & """ As C FROM " & _
                 Tbl_projet & " WHERE " & Projet & "="
          Select Case VarType(vProjet)
          Case vbString
             sSql = sSql & """" & vProjet & """"
          Case vbDate
             sSql = sSql & Format(vProjet, "\#m-d-yyyy h:n:s\#")
          Case Else 'Numériques
             sSql = sSql & Replace(vProjet, ",", ".")
          End Select
          If Len(sWhere) Then sSql = sSql & " And " & sWhere
          If bGroupBy Then sSql = sSql & " GROUP BY " & NomParticipant
          If IsNumeric(vIsOrderAsc) Then
             sSql = sSql & " ORDER BY " & NomParticipant
             If vIsOrderAsc = 0 Then sSql = sSql & " DESC"
          End If
          'Lance la requête et concatène la colonne
          Set odb = CurrentDb
          Set ors = odb.OpenRecordset(sSql, dbOpenForwardOnly)
          While Not ors.EOF
             ConcatColonne = ConcatColonne & ors(0)
             ors.MoveNext
          Wend
          ConcatColonne = Left$(ConcatColonne, Len(ConcatColonne) - Len(sSeparateur))
       End If
    fin:
       Set ors = Nothing
       Set odb = Nothing
       Exit Function
    errtag:
       ConcatColonne = "Erreur !"
       Resume fin
    End Function
    Pour par la suite ,renseigner le résultat de ma requête dans mon formulaire moncalendrier avec un champ calculé obtenu avec le code VBA 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
    Public Function Concatener() As String
       Dim result As String
       Dim db As dao.Database: Set db = CurrentDb
       Dim r As dao.Recordset: Set r = db.OpenRecordset("Req_conca", dbOpenDynaset)
     
       Do While Not r.EOF()
     
         If result <> "" Then
            result = result & "; "
         End If
     
         result = result & r![ConcatéNom]
         r.MoveNext&
       Loop
     
       r.Close: Set r = Nothing
       db.Close: Set db = Nothing
       Concatener = result
    End Function
    Probléme 2 le champ calculé "Concatener()" ne prend pas en compte la date, il se déverse dans toute les dates de mon calendrier .

    j'ai pensé a créé une table venant de ma requête req_conca mais je ne maîtrise pas les mise à jour automatique en vba encore...

    Auriez vous une piste à me proposer pour remédier à mon problème ?

    Merci pour votre compréhension

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/05/2015, 09h35
  2. Réponses: 2
    Dernier message: 06/06/2014, 16h26
  3. Choix d'un champ d'une requête dans un formulaire
    Par Christaline dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/02/2012, 17h50
  4. Réponses: 1
    Dernier message: 18/03/2009, 14h03
  5. ajout d'un champs input text dans un formulaire
    Par korrigann dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/04/2006, 15h45

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