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 :

Comment insérer des enregistrements dans un sous-formulaire créé à partir d'une instruction SQL


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 66
    Points : 42
    Points
    42
    Par défaut Comment insérer des enregistrements dans un sous-formulaire créé à partir d'une instruction SQL
    Bonjour à tous,
    Je pense que tout est dit à partir de mon intitulé. Sur mon formulaire, j'ai créer un sous-formulaire à partir d'une instruction sql dans la propirété source du sous-formulaire, voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Demandeur.TDemandeur, Activite.TActivite, Intitule.TIntitule, Ligne.TLigne, Poste.TPoste, Cause.TCause, Action.TAction,  Action.Type,  Action.Close, Delai.TDelai,  Pilote.TPilote, DateRealise.TRealise,  Produit.TProduit, Service.TService FROM Demandeur, Activite, Intitule, Ligne, Poste, Cause, [Action], Delai, Pilote, DateRealise, Produit, Service WHERE Activite.NumActivite = Intitule.NumActivite AND Produit.NumProduit = Intitule.NumProduit AND Ligne.NumLigne = Intitule.NumLigne AND  Ligne.NumLigne = Poste.NumLigne AND Service.NumService = Action.NumService AND Pilote.NumPilote = Action.NumPilote AND Cause.NumCause = Action.NumCause AND Delai.NumDelai = Action.NumDelai AND Demandeur.NumDemandeur = Pilote.NumDemandeur AND DateRealise.NumRealise = Pilote.NumRealise AND Activite.NumActivite = Pilote.NumActivite
    Ce sous-formulaire affiche les enregistrements sous forme d'un tableau. Mon souci est que comment ce sous-formulaire pourrait prendre en compte de nouvels enregistrements recemment entrés dans différentes tables qui s'y trouvent dans l'instruction sql qui le compose.
    Merci d'avance pour votre aide.

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    Un petit rafraichissement peut-être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me!NomSousFormulaire.Requery

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 66
    Points : 42
    Points
    42
    Par défaut
    Salut Hellas,
    voici le code de mon sous-formulaire:
    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
    Function FiltreDonnees(ByVal strNomChamp As String, ByVal varValeurChamp As Variant)
        ' Teste le contenu du controle
        If IsNumeric(varValeurChamp) Then
            ' Initialisation du contenu de p_strSqlWhere sans ajout de quotes si le contenu est ALPHA
            If p_strSqlWhere = "" Then
                p_strSqlWhere = "WHERE " & strNomChamp & " = " & varValeurChamp
            Else
                p_strSqlWhere = p_strSqlWhere & " AND " & strNomChamp & " = " & varValeurChamp
            End If
        Else
            ' Initialisation du contenu de p_strSqlWhere avec ajout des quotes si le contenu est ALPHA
            If p_strSqlWhere = "" Then
                p_strSqlWhere = "WHERE " & strNomChamp & " = '" & varValeurChamp & "'"
            Else
                p_strSqlWhere = p_strSqlWhere & " AND " & strNomChamp & " = '" & varValeurChamp & "'"
            End If
        End If
     
        ' réactualisation du sous formulaire
        Me.RecordSource = cstSourceFiltre & p_strSqlWhere
        Me.Requery
     
        ' réactualisation de la zone de liste du formulaire principal
     
    End Function
     
    Private Sub Form_Load()
    ' Déclaration de la variable
    Dim ctlEnCours As Control
    ' Boucle sur toutes les zones de textes pour affecter la procédure de filtrage sur l'évènements DoubleClic
    For Each ctlEnCours In Me.Controls
       If ctlEnCours.ControlType = acTextBox Then
            If left(ctlEnCours.Name, 3) <> "txt" Then
                ctlEnCours.Properties("onDblClick") = "=FiltreDonnees('" & ctlEnCours.Name & "' , " & ctlEnCours.Name & ")"
                ' renseigne le tableau avec les noms de champs
     
          End If
       End If
    Next ctlEnCours
     
    ' Désactivation de la variable
    Set ctlEnCours = Nothing
    End Sub
    Dans un module, j'ai déclarer les variables suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Compare Database
    Option Explicit
     
    Public Const cstSourceFiltre As String = " SELECT Demandeur.TDemandeur, Activite.TActivite, Intitule.TIntitule, Ligne.TLigne, Poste.TPoste, Cause.TCause, Action.TAction, Action.Type, Action.Close, Delai.TDelai, Pilote.TPilote, DateRealise.TRealise, Produit.TProduit, Service.TService FROM (Demandeur RIGHT JOIN (((((((Activite INNER JOIN Intitule ON Activite.NumActivite = Intitule.NumActivite) INNER JOIN Ligne ON Intitule.NumLigne = Ligne.NumLigne) INNER JOIN Poste ON Ligne.NumLigne = Poste.NumLigne) INNER JOIN (Delai INNER JOIN (Cause RIGHT JOIN [Action] ON Cause.NumCause = Action.NumCause) ON Delai.NumDelai = Action.NumDelai) ON Intitule.NumIntitule = Action.NumIntitule) INNER JOIN Pilote ON Action.NumPilote = Pilote.NumPilote) INNER JOIN Service ON Action.NumService = Service.NumService) LEFT JOIN DateRealise ON Pilote.NumPilote = DateRealise.NumPilote) ON Demandeur.NumDemandeur = Pilote.NumDemandeur) INNER JOIN Produit ON Intitule.NumProduit = Produit.NumProduit "
     
    Public p_strSqlWhere As String
    Public p_tabCriteres() As Variant
    Public p_intCompteur As Integer
    Et sur le formulaire principal, on a:
    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
    Option Compare Database
    Option Explicit
     
    Private Sub btnEfface_Click()
        ' Initialisation du formulaire
        InitialisationFormulaire
    End Sub
     
    Private Sub btnFermer_Click()
        ' Ferme le formulaire de filtre
        DoCmd.Close
    End Sub
     
    Private Sub Form_Open(Cancel As Integer)
        ' Initialisation du formulaire
         InitialisationFormulaire
    End Sub
     
    Sub InitialisationFormulaire()
    ' Initialisation des variables
    p_strSqlWhere = ""
     
    ' Initialisation du sous formulaire et réinitialisation
    Me.Formulaire11.Form.RecordSource = cstSourceFiltre
    Me.Formulaire11.Requery
     
    End Sub
    Formulaire11 est mon sous-formulaire. Donc j'ai implanté le sous-formulaire dans le formulaire principal. Le but étant en lançant le formulaire principal les enregistrements sont affichés dans un tableau et je pourrais le filtrer, là ça marche impécablement. Le souci est que sur un autre formulmaire, je saisi de nouvels enregistrements qui sont enregistrés dans les tables de ma base. Mais en relançant de nouveau le formulaire principal s'affiche toujours les anciens enregistrements, les nouvels ne sont pas pris en compte.
    Une aide de votre part, me fera avancer sur mon projet de stage.
    Merci

  4. #4
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Comme je l'ai indiqué un rafraichissement suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me!Formulaire11.Requery
    si les nouveaux enregistrements n'apparaissent pas, c'est qu'un critère de sélection l'en empêche. Vérifier cstSourceFiltre
    Il suffit de créer une requête avec ce même code , supprimer les critères de sélection un à un pour connaitre le fautif et y remédier

Discussions similaires

  1. [AC-2007] Ajouter des enregistrements dans un sous-formulaire
    Par reims87 dans le forum IHM
    Réponses: 1
    Dernier message: 05/11/2011, 18h01
  2. [AC-2003] Numerotation des enregistrements dans un sous formulaire
    Par castours dans le forum IHM
    Réponses: 1
    Dernier message: 03/08/2011, 14h51
  3. Réponses: 1
    Dernier message: 07/11/2008, 09h13
  4. ajouter des enregistrement dans un sous-formulaire
    Par polianita dans le forum Access
    Réponses: 3
    Dernier message: 29/08/2006, 16h12
  5. comment eviter des doublons dans un sous formulaire ??
    Par azde7015 dans le forum Access
    Réponses: 2
    Dernier message: 21/02/2006, 09h03

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