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 :

limiter le nombre d'enregistrements retourner par une requête [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut limiter le nombre d'enregistrements retourner par une requête
    Bonjour, je vous soumets mon problème à propos duquel je ne trouve pas de solution.

    J'ai une table qui contient mes enregistrements.
    je dois extraire de cette table, tous les jours,
    220 enregistrements max avec comme critères :
    - 13 enregistrements max par département (qui est dans un champ)

    et parmi ces 13 enregs :
    - 9 de type 1
    - 4 de type 2

    Si vous voyez une solution ou une piste je suis preneur
    Merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 335
    Points : 229
    Points
    229
    Par défaut
    Bonjour,

    Même si je ne maîtrise pas trop le SQL et les requêtes (le VBA est plus souple je trouve ), je me lance ...

    Comme tu ne donnes pas trop d'info sur la structure de ta table, je suis donc parti avec une table bidon ordonnée comme ceci:
    Nom : img1.jpg
Affichages : 143
Taille : 161,4 Ko
    Il y a 9 départements (de A à I ). Chaque département a, respectivement, plus de 10 enregistrements de type 1 et 2. Plus les données associées à ces enregistrements.

    J'ai créé 2 requêtes intermédiaires qui limite l'affichage pour chaque type:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TOP 9 Table1.Type, Table1.Data
    FROM Table1
    GROUP BY Table1.Type, Table1.Data
    HAVING (((Table1.Type)=1));
    et
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TOP 4 Table1.Type, Table1.Data
    FROM Table1
    GROUP BY Table1.Type, Table1.Data
    HAVING (((Table1.Type)=2));

    Puis, j'ai combiné ces requêtes à l'aide de jointures
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Table1.Departement, rqTop9Type1.Type, rqTop4Type2.Type, rqTop9Type1.Data, rqTop4Type2.Data
    FROM (Table1 LEFT JOIN rqTop9Type1 ON Table1.Type = rqTop9Type1.Type) LEFT JOIN rqTop4Type2 ON Table1.Type = rqTop4Type2.Type
    GROUP BY Table1.Departement, rqTop9Type1.Type, rqTop4Type2.Type, rqTop9Type1.Data, rqTop4Type2.Data;

    Et, on obtient:
    Nom : img2.jpg
Affichages : 144
Taille : 224,8 Ko

    Je pense que c'est une première piste pour faire ce que tu veux.
    Il faut encore améliorer les requêtes car tu remarqueras que ce sont toujours les même valeurs de data qui sont affichées (donc, tu as du travail )

    Belle journée à toi

  3. #3
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    Merci beaucoup pour cette piste prometteuse... je reviendrai pour donner le résultat !
    Merci encore

  4. #4
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    Effectivement après transposition dans ma base, j'obtiens les mêmes datas pour tous les départements, mais je ne vois pas pourquoi.
    La sélection des TOP 4 et TOP 9 est sans doute le problème car ces requêtes sélectionnent les 9 ou 4 TOP de la table, et dans la table finale on demande à ACCESS d'afficher ces mêmes TOP, ce qu'il fait

    Nom : 2021-06-02 16_26_29-Window.png
Affichages : 123
Taille : 24,1 Ko

    S'il y a une bonne âme pour y réfléchir avec moi, je suis preneur

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 335
    Points : 229
    Points
    229
    Par défaut
    Bonjour,

    Je suis toujours en train d'y réfléchir mais de l'aide du forum sera utile je pense

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select i.*
    from Table1 as i 
    where i.Data in (select top 13 i2.Data
                   from table1 as i2
                   where i2.Departement = i.Departement
                   order by i2.Data desc
                  );
    Cette requête basée directement sur la table1 de mon exemple (je l'ai alimentée pour avoir plus de 13 données par type et plsu de 20 données par département) renvoie un maximum de 13 enregistrements par département, mais avec un nombre variable de type d'un département à l'autre.
    Je pense que on est sur le bon chemin mais j'espère de l'aide du forum pour clarifier cela car je ne suis pas du tout doué en SQL pur.

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 335
    Points : 229
    Points
    229
    Par défaut
    Bonjour,

    Après une nuit de réflexion et quelques tests ce matin, ceci donne quasi le résultat attendu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT i.*
    FROM Table1 AS i
    WHERE i.Data IN (SELECT i2.Data
                  FROM table1 AS i2
                  WHERE i2.Data IN (SELECT TOP 9 i3.Data
                                                      FROM table1 AS i3
                                                      WHERE (i3.Departement = i.Departement AND i3.type = 1)
                                                      )
                              OR
                              i2.Data IN (SELECT TOP 4 i3.Data
                                                       FROM table1 AS i3
                                                       WHERE (i3.Departement = i2.Departement AND i3.type = 2)));
    MAIS je ne sais pas pourquoi, pour le département A (ou le premier rencontré dans la table?) uniquement, ça retourne toujours 5 enregistrements de type 2. Peut-être qu'un spécialiste SQL pourra m'éclairer (car là je sèche lamentablement)?

    Tout est ok pour les autres départements.

    A toi de tester si ça réponds à ton besoin. Si oui, n'oublie pas de mettre résolu

  7. #7
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    Je suis aussi encore à réfléchir au sujet, et c'est compliqué...
    Je vais tester ta piste et je reviendrai donner le résultat
    Merci en tout cas pour ton aide..

  8. #8
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 335
    Points : 229
    Points
    229
    Par défaut
    Re-Bonjour,

    En VBA c'est mieux ;-)
    J'ai mis le code ci-dessous (certainement améliorable) sur le chargement d'un formulaire, mais tu peux le mettre sur un bouton aussi.

    Il crée une TableResultat au départ des données de la Table 1, avec exactement 13 enregistrements par département, 9 pour le type 1 et 4 pour le type 2.
    Ne pas oublier d'effacer la TableResultat avant de lancer la procédure sinon ça plante tel que c'est.

    A modifier en fonction de tes besoins

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    Option Compare Database
    Option Explicit
     
    Private Sub Form_Load()
        Dim Db As DAO.Database
        Dim rst As DAO.Recordset
        Dim rst2 As DAO.Recordset
        Dim rstDepartement As DAO.Recordset
        Dim rstType As DAO.Recordset
        Dim sql As String
        Dim sqlDepartement As String
        Dim sqlType As String
        Dim i As Integer
        Dim n As Integer
        Dim n1 As Integer   'compteur pour le type 1
        Dim n2 As Integer   'compteur pour le type 2
     
        n1 = 9
        n2 = 4
     
        Set Db = CurrentDb()
        'Ouvrir le recordset de la table 1
        sql = "SELECT * FROM Table1 Order by Departement, Type, Data Desc"
        Set rst = Db.OpenRecordset(sql, dbOpenDynaset)
     
        'créer la table résultat
        CreerTable rst
     
        'Ouvrir le recordset sur la table qui recevra les enregistrements adéquats
        Set rst2 = Db.OpenRecordset("SELECT * FROM TableResultat", dbOpenDynaset)
     
        'Ouvrir le recordset  qui servira a parcourir les différents Départements
        sqlDepartement = "SELECT Departement FROM Table1 GROUP BY Departement"
        Set rstDepartement = Db.OpenRecordset(sqlDepartement, dbOpenDynaset)
        If rstDepartement.EOF Then GoTo Sortie
        rstDepartement.MoveLast
        rstDepartement.MoveFirst
     
        'Ouvrir le recordset  qui servira a parcourir les différents Types
        sqlType = "SELECT Type FROM Table1 GROUP BY Type"
        Set rstType = Db.OpenRecordset(sqlType, dbOpenDynaset)
        If rstType.EOF Then GoTo Sortie
        rstType.MoveLast
        rstType.MoveFirst
     
        'on ajoute au rst2 les données de la table 1 qui correspondent aux différents critères
        If rst.RecordCount <> 0 Then
            rst.MoveFirst
            Do While rst.EOF = False
                Do While rstDepartement.EOF = False
                    Do While rstType.EOF = False
                        If rstType.Fields(0).Value = 1 Then
                            For i = 0 To n1 - 1
                                rst2.AddNew
                                rst2.Fields(0) = rstDepartement.Fields(0)
                                rst2.Fields(1) = rstType.Fields(0)
                                rst2.Fields(2) = rst.Fields(2)
                                rst2.Update
                                rst.MoveNext
                            Next
                        End If
                        If rstType.Fields(0).Value = 2 Then
                            For i = 0 To n2 - 1
                                rst2.AddNew
                                rst2.Fields(0) = rstDepartement.Fields(0)
                                rst2.Fields(1) = rstType.Fields(0)
                                rst2.Fields(2) = rst.Fields(2)
                                rst2.Update
                                rst.MoveNext
                            Next
                        End If
                        rstType.MoveNext
                    Loop
                    rstType.MoveFirst
                    rstDepartement.MoveNext
                Loop
                rst.MoveNext
            Loop
        Else
            MsgBox "La table Table1 n'a pas d'enregistrements"
        End If
     
    Sortie:
        'fermer les objets
        rstType.Close
        Set rstType = Nothing
        rstDepartement.Close
        Set rstDepartement = Nothing
        rst2.Close
        Set rst2 = Nothing
        rst.Close
        Set rst = Nothing
        Db.Close
        Set Db = Nothing
     
    End Sub
     
    ''''
    'modifié d'après https://www.developpez.net/forums/d151638/logiciels/microsoft-office/access/vba-access/vba-creer-table-partir-d-recordset/#post976616
    ''''
    Public Sub CreerTable(ByVal rsSrce As DAO.Recordset)
        Dim Db As DAO.Database 'Base de données cible
        Dim Td As DAO.TableDef 'Table à créer
        Dim fdSrce As DAO.Field 'Champ générique du recordset source
     
        'Création de la structure de la table sans ajouter de données dedans
        Set Db = CurrentDb()
        Set Td = New DAO.TableDef
     
            Td.Name = "TableResultat"
            For Each fdSrce In rsSrce.Fields
                Set fdDest = New DAO.Field
                fdDest.Name = fdSrce.Name
                fdDest.Type = fdSrce.Type
                Select Case fdDest.Type
                    Case dbBinary, dbLongBinary, dbText 'Champs de taille réglable fdDest.Size = fdSrce.Size
                Case Else
                    'On ne fait rien car la taille est implicite
                End Select
                Td.Fields.Append fdDest 'Ajout du champ à la table
            Next
     
            Db.TableDefs.Append Td 'Ajout de la table à la base
     
        'Fermeture 
        Set Td = Nothing
        Db.Close
        Set Db = Nothing
     
    End Sub

  9. #9
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    Merci encore pour cette autre piste, dès que je sors du train je m'y mets pour essayer de comprendre et d'adapter ton code.

    a+

  10. #10
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    Bonjour,
    Après moultes essais, j'en arrive à la conclusion que la version VBA est plus compréhensible et plus adaptable à mes besoins.
    Merci encore pour tes 2 pistes (sql et vba) qui fonctionnent toutes les 2.

    Bonne journée.

  11. #11
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    Désolé de revenir sur ce sujet

    Je viens de réadapter le code VBA à ma base de production, et avec le code impossible de copier les enregs dans la TableResultat.
    Je ne comprends pas ce qui se passe ...
    Merci d'avance pour vos précisions

    Ci-dessous le code utilisé.sur un click de bouton :
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    Private Sub Boîte286_Click()
        Dim Db As DAO.Database
        Dim rst As DAO.Recordset
        Dim rst2 As DAO.Recordset
        Dim rstDepartement As DAO.Recordset
        Dim rstType As DAO.Recordset
        Dim sql As String
        Dim sqlDepartement As String
        Dim sqlType As String
        Dim i As Integer
        Dim n As Integer
        Dim n1 As Integer   'compteur pour le type 1
        Dim n2 As Integer   'compteur pour le type 2
     
        n1 = 9
        n2 = 4
     
        Set Db = CurrentDb()
        'Ouvrir le recordset de la table 1
        sql = "SELECT * FROM T1 Order by Departement, TestCT, IDCLIENT Desc"
        Set rst = Db.OpenRecordset(sql, dbOpenDynaset)
     
        'créer la table résultat
        CreerTable rst
     
        'Ouvrir le recordset sur la table qui recevra les enregistrements adéquats
        Set rst2 = Db.OpenRecordset("SELECT * FROM TableResultat", dbOpenDynaset)
     
        'Ouvrir le recordset  qui servira a parcourir les différents Départements
        sqlDepartement = "SELECT Departement FROM T1 GROUP BY Departement"
        Set rstDepartement = Db.OpenRecordset(sqlDepartement, dbOpenDynaset)
        If rstDepartement.EOF Then GoTo Sortie
        rstDepartement.MoveLast
        rstDepartement.MoveFirst
     
        'Ouvrir le recordset  qui servira a parcourir les différents Types
        sqlType = "SELECT TESTCT FROM T1 GROUP BY TESTCT"
        Set rstType = Db.OpenRecordset(sqlType, dbOpenDynaset)
        If rstType.EOF Then GoTo Sortie
        rstType.MoveLast
        rstType.MoveFirst
     
        'on ajoute au rst2 les données de la T1 qui correspondent aux différents critères
        If rst.RecordCount <> 0 Then
            rst.MoveFirst
            Do While rst.EOF = False
                Do While rstDepartement.EOF = False
                    Do While rstType.EOF = False
                        If rstType.Fields(0).Value = 1 Then
                            For i = 0 To n1 - 1
                                rst2.AddNew
                                rst2.Fields(0) = rstDepartement.Fields(0)
                                rst2.Fields(1) = rstType.Fields(0)
                                rst2.Fields(2) = rst.Fields(2)
                                rst2.Update
                                rst.MoveNext
                            Next
                        End If
                        If rstType.Fields(0).Value = 2 Then
                            For i = 0 To n2 - 1
                                rst2.AddNew
                                rst2.Fields(0) = rstDepartement.Fields(0)
                                rst2.Fields(1) = rstType.Fields(0)
                                rst2.Fields(2) = rst.Fields(2)
                                rst2.Update
                                rst.MoveNext
                            Next
                        End If
                        rstType.MoveNext
                    Loop
                    rstType.MoveFirst
                    rstDepartement.MoveNext
                Loop
                rst.MoveNext
            Loop
        Else
            MsgBox "La table T1 n'a pas d'enregistrements"
        End If
     
    Sortie:
        'fermer les objets
        rstType.Close
        Set rstType = Nothing
        rstDepartement.Close
        Set rstDepartement = Nothing
        rst2.Close
        Set rst2 = Nothing
        rst.Close
        Set rst = Nothing
        Db.Close
        Set Db = Nothing
     
    End Sub
    '*************
    Public Sub CreerTable(ByVal rsSrce As DAO.Recordset)
        Dim Db As DAO.Database 'Base de données cible
        Dim Td As DAO.TableDef 'Table à créer
        Dim fdSrce As DAO.Field 'Champ générique du recordset source
        Dim fdDest As DAO.Field 'Champ générique du recordset source
     
        'Création de la structure de la table sans ajouter de données dedans
        Set Db = CurrentDb()
        Set Td = New DAO.TableDef
     
            Td.Name = "TableResultat"
            For Each fdSrce In rsSrce.Fields
                Set fdDest = New DAO.Field
                fdDest.Name = fdSrce.Name
                fdDest.Type = fdSrce.Type
                Select Case fdDest.Type
                    Case dbBinary, dbLongBinary, dbText 'Champs de taille réglable fdDest.Size = fdSrce.Size
                Case Else
                    'On ne fait rien car la taille est implicite
                End Select
                Td.Fields.Append fdDest 'Ajout du champ à la table
            Next
     
            Db.TableDefs.Append Td 'Ajout de la table à la base
     
        'Fermeture
        Set Td = Nothing
        Db.Close
        Set Db = Nothing
     
    End Sub

  12. #12
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 335
    Points : 229
    Points
    229
    Par défaut
    Bonjour,

    Le code semble bien le même (tu as bien vu que j'avais oublié de déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim fdDest As DAO.Field 'Champ générique du recordset source
    dans la procédure CreerTable).

    Ta TableResultat est bien effacée avant de relancer le clic sur ton bouton?

    Je continue mes tests et te reviens si/quand je trouve une solution....

  13. #13
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    Ma table est bien effacée avant.

    un truc que je ne comprends pas trop et qui pose peut-être problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                                rst2.AddNew
                                rst2.Fields(0) = rstDepartement.Fields(0)
                                rst2.Fields(1) = rstType.Fields(0)
                                rst2.Fields(2) = rst.Fields(2)
                                rst2.Update
                                rst.MoveNext

    que représente exactement les 0, 1 et 2
    Je pense qu'il s'agit des champs 1, 2 et 3 de ma table, dans cet ordre.
    Je les ai remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                                rst2.Fields([Departement]) = rstDepartement.Fields([Departement])
                                rst2.Fields([TestCT]) = rstType.Fields([TestCT])
                                rst2.Fields([IDCLIENT]) = rst.Fields([IDCLIENT])
    Mais c'est pareil...

  14. #14
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    Mon erreur vient bien de cette partie

    Je teste le critère T ou vide. Si je remplace par T ou " " je ne récupère que les enregs avec T, ceux qui sont vides ne s'ajoutent pas... Et le problème c'est que rst2 ne peut être vide a priori selon le message d'erreur que je reçois

    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
    If rstType.Fields(0).Value = T Then
                            For i = 0 To n1 - 1
                                rst2.AddNew
                                rst2.Fields(0) = rstDepartement.Fields(0)
                                rst2.Fields(1) = rstType.Fields(0)
                                rst2.Fields(2) = rst.Fields(2)
                                rst2.Update
                                rst.MoveNext
                            Next
                        End If
                        If rstType.Fields(0).Value = " " Then
                            For i = 0 To n2 - 1
                                rst2.AddNew
                                rst2.Fields(0) = rstDepartement.Fields(0)
                                rst2.Fields(1) = rstType.Fields(0)
                                rst2.Fields(2) = rst.Fields(2)
                                rst2.Update
                                rst.MoveNext
                            Next

  15. #15
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    trouvé en modifiant la ligne en If IsNull(rstType.Fields(0).Value) Then et ça fonctionne !

    Petite question... comment intégrer "proprement" dans le code la suppression de la table. Je suppose que c'est dans la fonction CreerTable

    un simple : DoCmd.DeleteObject acTable, "TableResultat" ?

    Merci encore

  16. #16
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 335
    Points : 229
    Points
    229
    Par défaut
    Bonjour Fbu78,

    Bon ben tu as trouvé la solution :-) Et, en effet, 0, 1 et 2 sont les champs 1, 2 et 3 de ta table.

    Concernant l'effacement de la table si elle existe, la FAQ ici te donne une solution clé en main
    J'utiliserai l'appel de la fonction Delete_Table juste avant CreerTable dans le module du bouton.
    Et je rajouterai un DoEvents entre les deux (pas nécessaire normallement, mais on ne sait jamais si Access coince un peu entre la délétion et la création de la table, ca l'aidera).

    Content d'avoir pu t'aider :-)
    Bonne continuation!

    PS: ne pas oublier un petit résolu

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

Discussions similaires

  1. tri les enregistrements retournée par une requête
    Par badysoom dans le forum HyperFileSQL
    Réponses: 14
    Dernier message: 22/02/2011, 12h13
  2. Réponses: 2
    Dernier message: 13/07/2009, 16h54
  3. Nombre de rows retournés par une requète
    Par awalter1 dans le forum Sql*Plus
    Réponses: 2
    Dernier message: 03/07/2008, 09h17
  4. Réponses: 2
    Dernier message: 17/04/2008, 11h16
  5. [HQL] Nombre de colonnes retourné par une requête
    Par Fr@ncky dans le forum Hibernate
    Réponses: 4
    Dernier message: 13/07/2007, 13h47

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