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 :

Requête SQL qui ne s'applique pas à un sous-formulaire [AC-2007]


Sujet :

IHM

  1. #1
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut Requête SQL qui ne s'applique pas à un sous-formulaire
    Bonjour,

    J'ai utilisé le bout de code proposé par LedZepII dans ce sujet : Synchronisation dynamique d'un sous-formulaire et l'ai adapté pour faire la mise à jour de mon sous-formulaire (sfrm_Neolithique dont la source est la table "Neolithique") selon les valeurs saisies dans le formulaire (frm_Neolithique) dans 1. Un menu déroulant (Site_cbo) puis éventuellement 2. Une zone de texte (N°St_txt).
    Pourtant, malgré la présence d'un Me.sfrm_Neolithique.Form.Requery, le sous-formulaire ne se met pas à jour, je n'obtiens aucune réponse à ma requête.

    Voici le code que j'utilise :
    Après la mise à jour du combo "Site_cbo"
    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
    Private Sub Site_cbo_AfterUpdate()
     
        'Variables
        Dim r As DAO.Recordset
        Dim SQL As String
        Dim Test As Byte
        On Error GoTo ErrorHandler
     
        'Vérification de l'existense de l'enregistrement
        SQL = "SELECT Count (*) FROM tbl_Site WHERE Site = '" & Replace(Me.Site_cbo, "'", "''") & "'"
        Set r = CurrentDb.OpenRecordset(SQL)
        Test = r.Fields(0).Value
     
        'Si l'enregistrement n'existe pas
        If IsNull(Site_cbo) Then
            DoCmd.CancelEvent
        ElseIf Test = 0 Then
            SQL = "INSERT INTO tbl_Site (Site) VALUES (Site_cbo);"
            DoCmd.RunSQL (SQL)
        End If
     
    ErrorHandler:
            If DataErr = 3059 Then
                Beep
                Response = acDataErrContinue
            End If
     
        Resume Next
     
        Me.Refresh
        Me.Site_cbo.Requery
        Me.Site_cbo.SetFocus
        Me.Site_cbo.SelStart = 0
     
        sfmRefresh
     
    End Sub
    Après la mise à jour de la zone de txt "N°St_txt"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub N°St_txt_AfterUpdate()
     
        sfmRefresh
     
    End Sub

    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
    Private Sub sfmRefresh()
     
    Dim strCrit1 As String, strCrit2 As String
    Dim strSQL As String, p As Long, strWHERE As String
     
    strCrit1 = Nz(Me.Site_cbo, "")
    strCrit2 = Nz(Me.N°St_txt, "")
     
    ' Récupérer source du sous-formulaire
    strSQL = Me.sfrm_Neolithique.Form.RecordSource
     
    ' Si pas de SELECT alors Table ou Requête que l'on change
    ' en SELECT * FROM Table/Requête
    If InStr(1, strSQL, "SELECT", vbTextCompare) = 0 Then
        strSQL = "SELECT * FROM " & strSQL
    End If
    ' Si WHERE, l'enlever
    p = InStr(1, strSQL, "WHERE", vbTextCompare)
    If p > 1 Then
       strSQL = Left(strSQL, p - 1)
    End If
    ' Si ; l'enlever
    p = InStr(1, strSQL, ";")
    If p > 1 Then
       strSQL = Left(strSQL, p - 1)
    End If
     
    ' Construire clause WHERE
    If strCrit1 <> "" Then
       If strWHERE <> "" Then strWHERE = strWHERE & " AND "
       strWHERE = strWHERE & "Site='" & strCrit1 & "'"
    End If
     
    If strCrit2 <> "" Then
       If strWHERE <> "" Then strWHERE = strWHERE & " AND "
       strWHERE = strWHERE & "N°St='" & strCrit2 & "'"
    End If
     
    ' Si Critères, ajouter une clause WHERE
    If strWHERE <> "" Then strSQL = strSQL & " WHERE " & strWHERE & ";"
    Debug.Print strSQL
     
    ' Modifier source du sous-formulaire
    Me.sfrm_Neolithique.Form.RecordSource = strSQL
    Me.sfrm_Neolithique.Form.Requery
     
    End Sub
    Je ne comprends pas ce que j'ai pu oublié pour que la mise à jour ne se fasse pas. Est-ce que quelqu'un aurait une idée, s'il vous plaît ?

    Merci de votre attention.

  2. #2
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut
    Au temps pour moi...

    Mon problème venait du fait que le sous-formulaire avait des champs définis dans "Champs père" et "Champs fils".

    En supprimant les valeurs et en laissant les Données champs père et champs fils vides, la requête agit tel qu'elle le doit.

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

Discussions similaires

  1. Requête SQL qui ne s'execute pas.
    Par dimitri13 dans le forum SGBD
    Réponses: 1
    Dernier message: 24/11/2014, 16h56
  2. Réponses: 3
    Dernier message: 03/10/2009, 22h51
  3. Interbase requête SQL qui ne fonctionne pas
    Par colorid dans le forum InterBase
    Réponses: 6
    Dernier message: 20/11/2007, 17h36
  4. [SQL] Requête UPDATE qui ne s'exécute pas avec PHP
    Par xplose dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 16/08/2007, 09h42
  5. Réponses: 2
    Dernier message: 06/06/2005, 15h13

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