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 :

Amélioration d'une requête [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 428
    Points : 183
    Points
    183
    Par défaut Amélioration d'une requête
    Bonjour,
    J'ai créer une requête qui fonctionne, mais j'ai l'impression de ne pas l'avoir bien formulée :
    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
    Sub ReplaceMot()
       Dim oRst As DAO.Recordset
       Dim oDb As DAO.Database
       Dim Compte As Long
       Set oDb = CurrentDb
       Set oRst = oDb.OpenRecordset("t_PEL", dbOpenTable)
       Compte = oRst.RecordCount
       Set oRst = oDb.OpenRecordset("SELECT PayementFK FROM t_PEL")
       If oRst.EOF = True Then oRst.MoveFirst
       For Boucle = 1 To Compte
           oRst.Edit
           Debug.Print oRst.Fields(0).Value
           If oRst.Fields(0).Value = 18 Then
                oRst.Fields(0).Value = 10
           End If
           oRst.Update
           oRst.MoveNext
       Next
       oRst.Close
       oDb.Close
       Set oRst = Nothing
       Set oDb = Nothing
    End Sub
    La ligne 8 me semble un complément de la ligne 6. Peut-on améliorer cela ?
    D'autre part, pourriez-vous me présenter la même macro sous forme de Sql ?
    Merci de votre aide.
    Le mieux est l'ennemi du bien

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    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 621
    Points : 14 577
    Points
    14 577
    Par défaut
    bonjour,
    La ligne 8 me semble un complément de la ligne 6. Peut-on améliorer cela ?
    pire, elle "écrase" l'affectation du RecordSet faite par la ligne 6

    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
    Sub ReplaceMot()
       Dim oRst As DAO.Recordset
       Dim oDb As DAO.Database
       Set oDb = CurrentDb
       Set oRst = oDb.OpenRecordset("SELECT PayementFK FROM t_PEL where PayementFK = 18") ' autant sélectionner ici l'enregistrement à mettre à jour
     
       if not orst.Eof then
            oRst.Edit
            Debug.Print oRst.Fields(0).Value
            oRst.Fields(0).Value = 10
            oRst.Update
       End If
     
       oRst.Close
       oDb.Close
       Set oRst = Nothing
       Set oDb = Nothing
     
    End Sub
    D'autre part, pourriez-vous me présenter la même macro sous forme de Sql ?
    d'après ce que j'en ai compris ton code veut remplacer la clé 18 par 10 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Update t_PEL set PayementFK = 10 where PayementFK = 18;
    dans l'hypothèse évidente que ce n'est pas un numéro auto
    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 ?

  3. #3
    Membre habitué Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 428
    Points : 183
    Points
    183
    Par défaut
    Merci beaucoup tee_grandbois, toujours aussi réactif.
    2 petits codes que je me garde sous le coude, s'il y a encore des améliorations n'hésite pas j'aime bien apprendre.

    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
    Sub ReplaceMot1()
       Dim strBase As String
       Dim strChamps As String
       Dim AncienMot As String
       Dim NouveauMot As String
       Dim Compte As Long
       Dim oRst As DAO.Recordset
       Dim oDb As DAO.Database
       Set oDb = CurrentDb
       strBase = "t_PEL"
       strChamps = "PayementFK"
       AncienMot = 44
       NouveauMot = 10
       Compte = DCount("*", strBase)
       ' Autant sélectionner ici l'enregistrement à mettre à jour
       Set oRst = oDb.OpenRecordset("SELECT " & strChamps & " FROM " & strBase & " where " & strChamps & " = " & AncienMot)
       If Not oRst.EOF Then
            For Boucle = 1 To Compte
                oRst.Edit
                Debug.Print oRst.Fields(0).Value
                oRst.Fields(0).Value = NouveauMot
                oRst.Update
                oRst.MoveNext
            Next
       End If
       oRst.Close
       oDb.Close
       Set oRst = Nothing
       Set oDb = Nothing
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub ReplaceMot2()
       Dim sSql As String
       Dim strChamps As String
       Dim AncienMot As String
       Dim NouveauMot As String
       strBase = "t_PEL"
       strChamps = "PayementFK"
       AncienMot = 44
       NouveauMot = 10
       sSql = "Update " & strBase & " set " & strChamps & " = " & NouveauMot & " where " & strChamps & " = " & AncienMot & ";"
       DoCmd.SetWarnings False: DoCmd.RunSQL sSql: DoCmd.SetWarnings True
    End Sub
    Le mieux est l'ennemi du bien

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    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 621
    Points : 14 577
    Points
    14 577
    Par défaut
    bonjour,
    la boucle For ... To Compte peut être remplacée par une boucle Do Until ... Loop jusqu'à fin de fichier (EOF) plus "moderne"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       Do Until oRst.EOF 
     
            oRst.Edit
            Debug.Print oRst.Fields(0).Value
            oRst.Fields(0).Value = NouveauMot
            oRst.Update
            oRst.MoveNext
     
       Loop
    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 ?

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

Discussions similaires

  1. Amélioration d'une requête
    Par j-hadd dans le forum Requêtes
    Réponses: 0
    Dernier message: 22/11/2016, 10h44
  2. [2012] Aide à l'amélioration d'une requête
    Par MRzaa dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/03/2014, 13h08
  3. Amélioration d'une requête
    Par Jefty dans le forum Langage SQL
    Réponses: 13
    Dernier message: 09/06/2012, 16h22
  4. Amélioration d'une requête
    Par Redg9 dans le forum Requêtes
    Réponses: 8
    Dernier message: 29/07/2009, 12h18
  5. Amélioration d'une requête
    Par phtpht dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/07/2006, 13h20

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