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

Access Discussion :

lancer un recordset sur les n derniers enregistrements [AC-2019]


Sujet :

Access

  1. #1
    Membre habitué
    Homme Profil pro
    Coordinateur service technique
    Inscrit en
    Novembre 2021
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Coordinateur service technique

    Informations forums :
    Inscription : Novembre 2021
    Messages : 152
    Points : 143
    Points
    143
    Par défaut lancer un recordset sur les n derniers enregistrements
    Bonjour,

    alors voilà: j'ai un formulaire de saisie de demande concernant des interventions techniques. A la mise à jour d'un champ, je lance une procédure pour vérifier si il y a d'autres demandes similaires (entre d-5 et d+5). Le code suivant fonctionne:

    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
    Private Sub cmbDomaine_AfterUpdate()
     
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim strSql As String
    Dim DateDem As String
    Dim DateMin As String
    Dim DateMax As String
     
    DateDem = Me.txtDateDem
    DateMin = DateAdd("d", -5, DateDem)
    DateMin = Format(DateMin, "mm/dd/yyyy")
    DateMax = DateAdd("d", 5, DateDem)
    DateMax = Format(DateMax, "mm/dd/yyyy")
     
    strSql = "SELECT DemCode FROM qryDemandeEtendu WHERE (ObjetId = '" & Me.cmbObjetId & "' AND Dom_Id = " & Me.cmbDomaine & " AND Demande_Date Between #" & DateMin & "# AND #" & DateMax & "#);"
     
    Set db = CurrentDb
    Set rst = db.OpenRecordset(strSql, dbOpenDynaset)
     
     
    If rst.RecordCount = 0 Then
        Else
        rst.MoveLast
            If rst.RecordCount = 1 Then
            MsgBox " Une demande similaire existe déjà"
            rst.MoveLast
            DoCmd.OpenForm "frmDemande", , , "[DemCode] = '" & rst.Fields(0).Value & "'" 'si j'ai une demande similaire j'ouvre le formulaire pour vérifier et modifier ou non la demande
            Else
            MsgBox "plusieurs demandes similaires existent déjà" 'normalement cette condition ne sera pas utile puisque je n'aurai pas de "demandes similaires"
            rst.MoveFirst
                While Not rst.EOF
                MsgBox rst.Fields(0).Value
                rst.MoveNext
                Wend
            End If
        End If
     
    rst.Close: Set rst = Nothing
     
     
    End Sub
    Par contre je crains que très rapidement le Set rst = db.OpenRecordset(strSql, dbOpenDynaset) ne prenne du temps si l'ensemble de la qryDemandeEtendu doit être exploré. Aussi je voulais savoir si il était possible de limiter ce set sur les 50 derniers enregistrments... Auriez vous une piste?

  2. #2
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Une idée à tester et à adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP 50 * FROM maTable ORDER BY id DESC
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  3. #3
    Membre habitué
    Homme Profil pro
    Coordinateur service technique
    Inscrit en
    Novembre 2021
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Coordinateur service technique

    Informations forums :
    Inscription : Novembre 2021
    Messages : 152
    Points : 143
    Points
    143
    Par défaut
    Je viens de trouver cette solution en modifiant ma strsql de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     strSql = "SELECT DemCode FROM (SELECT TOP 50 qryDemandeEtendu.* FROM qryDemandeEtendu ORDER BY qryDemandeEtendu.DemCode DESC) WHERE (ObjetId = '" & Me.cmbObjetId & "' AND Dom_Id = " & Me.cmbDomaine & " AND Demande_Date Between #" & DateMin & "# AND #" & DateMax & "#);"
    par contre, cela va-t-il améliorer les performances?

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

Discussions similaires

  1. Ne faire un dump que sur les X derniers enregistrements
    Par FredAWT dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/10/2015, 13h24
  2. [10g] Une requête sur les 4 derniers enregistrements
    Par ivoratparis dans le forum SQL
    Réponses: 2
    Dernier message: 07/08/2014, 00h14
  3. Réponses: 2
    Dernier message: 15/09/2011, 11h17
  4. Requête de tri sur les 20 derniers enregistrements
    Par kryogen dans le forum Langage SQL
    Réponses: 16
    Dernier message: 16/04/2007, 10h40
  5. [MySQL] Requête de tri sur les 20 derniers enregistrements
    Par kryogen dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/04/2007, 10h26

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