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 :

requete Sql et son exécution


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 42
    Points : 25
    Points
    25
    Par défaut requete Sql et son exécution
    Bonjour à tous,
    j'essaie de creer une requqte et ensuite de me positionner selon le numéro de la tournée et ensuite de tester si ma date entrée est entre deux dates, ça ne marche pas
    voilà ce que j'ai fait...

    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
     
    Dim RecordTournee As DAO.Recordset
    Dim sSQL As String
     
    Set db = CurrentDb
     
    sSQL = "SELECT Tournee.Tournee, TblTourDetail.DateDebutModif, TblTourDetail.DateFinModif, Tournee.Groupe, Tournee.Km, TblTourDetail.HeureDebTravail, TblTourDetail.HeureFinTravail, TblTourDetail.EnVigueur, TblTourDetail.TChargement, TblTourDetail.TDechargement FROM Tournee LEFT JOIN TblTourDetail ON Tournee.Tournee = TblTourDetail.TourNumber ORDER BY Tournee.Tournee;"
     
     Set RecordTournee = db.OpenRecordset(sSQL, dbOpenDynaset)
     
    If No_Tournee <> 0 Then
    Do Until RecordTournee.EOF
    RecordTournee.FindFirst "Tournee.Tournee ='" & No_Tournee & "'"  
    If Date1 >= RecordTournee![DateDebutModif] And Date1 <= RecordTournee![DateFinModif] Then
     
     
    HDeb = RecordTournee![HeureDebTravail]
    HArr = RecordTournee![HeureFinTravail]
    TCH = RecordTournee![TChargement]
    TDCh = RecordTournee![TDechargement]
     
    Else
     
     
        RecordTournee.MoveNext
     
        End If
     
    Loop
    End If
    el code s'exécute jusqu'à

    Do Until RecordTournee.EOF

    et après cela sort de la procédure, pourtant je vois la variable du champ No_Tournee, le chiffre 5..

    et mon but est qu'il se positionne au niveau de la tournée 5, ensuite test des bornes dates, et si ce n'est pas rempli,
    prochain enregistrement avec la tournée 5, et retest des bornes dates et ainsi de suite
    jusqu'à ce qu'il trouve le bon enregistrement...

    merci pour votre aide

    Pascal

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 421
    Points : 16 265
    Points
    16 265
    Par défaut
    Bonjour

    Pourquoi ne pas filtrer la requête directement sur le numéro de tournée ?
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    merci pour la réponse,

    mais dans mon optique c'est d'avoir dans une table la tournée avec un id unique ( et quelque autres champ, sans grande importance) et une autre table avec plusieurs tranches de dates...

    comme ceci

    avec la requête que j'obtiens en utilisant deux tables cela donne

    Tour......Datedebutmodif.....DateFin Modif...heureDebut
    3...........01.01.2001...........31.12.2001.......6.50
    5...........01.01.2001............31.12.2001......6.75
    5...........01.01.2002............31.10.2002......7.00
    5...........01.11.2002...........31.12.2016........6.75

    en fait il faudrait que je filtre en premier sur la tournée et ensuite filtrer en fonction de la tranche de date, où je pourrai extraire l'heure de début...etc...


    merci

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 421
    Points : 16 265
    Points
    16 265
    Par défaut
    Re

    D'un point de vue purement opérationnel tu veux faire quoi ? Car là je ne situe pas le contexte et l'objectif.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    'est que en fonction du contexte les demandes du client peuvent changer et il nous demande de changer l'heure du début de la tournée, exemple, le client
    veut que depuis le 13.08.2016, on commence la tournée à 07:00 au lieu d'avant à 07:30, alors si je dois mettre à jour des enregistrements, je ne veux pas que les heures du passé soient modifiées.

    pas très clair je sais mais c'est ce que j'aimerais faire et aussi cela me donne un suivi, genre a tel date on commençait à 07:00, cela me fera aussi un historique.

    car exemple par le passé heure départ du chauffeur 08:00, arrivée 10:00, début du travail à 07:00 donc delta de 3h
    maintentant début du travail 08:00, si je lance une mise à jour complète de la base de donnée, il me modifierait un enregistrement du passé en mettant plus qu'un delta de 2h,
    ce que je ne veux pas....le temps du passé ne doit pas être modifié..

    j'ai réussi à faire qqch mais en faisant déjà une requête et en l'exécutant en opendynaset, mais j'aimerais essayer de la faire en
    exécutant du sql

    ce que j'ai fait pour le moment:

    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
    Set RecordTournee = db.OpenRecordset("RqtTourDataHoraire", dbOpenDynaset)
    w_it1 = 0
     
     
     
    Dim strCritere As String
     
     
    If No_Tournee <> 0 Then
    RecordTournee.MoveFirst
     
    strCritere = "Tournee like " & Chr(34) & No_Tournee & Chr(34)
     
    RecordTournee.FindFirst strCritere
     
    Do Until w_it1 = 1
     
        If Not RecordTournee.NoMatch And Not RecordTournee.EOF Then
     
                    If Date1 >= RecordTournee![datedebutmodif] And Date1 <= RecordTournee![DateFinModif] Then
     
                        HDeb = RecordTournee![HeureDebTravail]
                        HArr = RecordTournee![HeureFinTravail]
                        TCH = RecordTournee![TChargement]
                        TDCh = RecordTournee![TDechargement]
                        Forms!FrmChauffeur!SfrmFiche![TCharge].Value = RecordTournee![TChargement]
                        Forms!FrmChauffeur!SfrmFiche![FldHeureDeb].Value = RecordTournee![HeureDebTravail]
                        Forms!FrmChauffeur!SfrmFiche![FldHeureArr].Value = RecordTournee![HeureFinTravail]
                        Forms!FrmChauffeur!SfrmFiche![TdeCharge].Value = RecordTournee![TDechargement]
                        'Forms!FrmChauffeur!Calendrier.Value = Forms!FrmChauffeur!SfrmFiche![Date].Value
     
                        w_it1 = 1
                    Else
     
                        RecordTournee.MoveNext
     
                    End If
     
            Else
            w_it1 = 1
            End If
    Loop
    End If
    alors voilà en gros

    merci à toi

  6. #6
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 421
    Points : 16 265
    Points
    16 265
    Par défaut
    Bonjour

    Si j'a bien compris :
    Concrètement il faut chercher le dernier enregistrement pour la tournée 5 : soit il n'a pas de date de fin de modif parce c'est le cas en cours, soit il a une date de début de modif future car prévision déjà enregistrée.

    Dans le 1er cas, iIl faut donc une requête qui repère la tournée 5 dont la date de fin de modif est vide (NULL) afin de remplir ce champ (requête de mise à jour) suivi d'une requête de création du nouvel horaire.

    Dans le second cas il faut repérer l'enregistrement déjà prévu pour le futur et le mettre à jour...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Non c'est moi qui m'exprime mal...

    désolé,
    les dates c'est moi qui les rentrent via un fomulaire double affichage constitué de la table Tournée et TblTourDetail,
    et ensuite utiliser ces données, pour un autre traitement qui est fait avec mon code.
    je ne fais pas de code qui rempli mes tables dates.

    dans mon idée, même les tranches de dates ne doivent pas se suivre, mon code doit simplement se rendre par exemple à la tournée 5, passer en boucle les trois ou vingt enregistrements constitué avec des tranches dates, et éventuellement
    si il ne trouve pas de tranches dates ressortir et continuer le code suivant..

    mais une deuxième questions, toujours la même chose, je crée mon code SQL, via le code que je recopie dans une requête, pourquoi mon code sql ne fonctionne pas.
    quelque part une requete est du SQl derrière, ou bien c'est quand même différent?

    j'espère que c'est plus clair

    merci

    Pascal

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    rebonjour,

    peut-t'on me dire comment utiliser une requete sql crée depuis le générateur de requête, et ensuite le mettre dans un code vba

    merci

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Bonjour que dois-je faire..
    le code quand je l'exécute sort du code à la ligne
    comme si il ne trouvait pas le jeu d'enregsitrement, qu'il ne pouvait pas pointer le premier enregistrement.....


    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
    Dim db As Database
    Dim RecordTournee As DAO.Recordset
    Dim rst As DAO.Recordset ' Tournee As DAO.Field
    Dim sSQL As String
    Dim w_it1 As Integer
     
     
     
    Set db = CurrentDb
     
    sSQL = "SELECT Tournee.Tournee, TblTourDetail.DateDebutModif, TblTourDetail.DateFinModif, Tournee.Groupe, Tournee.Km, TblTourDetail.HeureDebTravail, TblTourDetail.HeureFinTravail, TblTourDetail.EnVigueur, TblTourDetail.TChargement, TblTourDetail.TDechargement FROM Tournee LEFT JOIN TblTourDetail ON Tournee.Tournee = TblTourDetail.TourNumber ORDER BY Tournee.Tournee;"
     
    Set rst = db.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly)
     
    w_it1 = 0
     
     
    Dim strCritere As String
     
    If No_Tournee <> 0 Then
    rst.MoveFirst
     
    strCritere = "Tournee like " & Chr(34) & No_Tournee & Chr(34)
     
     
    rst.FindFirst strCritere
    Do Until w_it1 = 1
     
        If Not rst.NoMatch And Not rst.EOF Then
     
                    If Date1 >= rst![datedebutmodif] And Date1 <= rst![DateFinModif] Then
                        HDeb = rst![HeureDebTravail]
                        HArr = rst![HeureFinTravail]
                        TCH = rst![TChargement]
                        TDCh = rst![TDechargement]
                        Forms!FrmChauffeur!SfrmFiche![TCharge].Value = rst![TChargement]
                        Forms!FrmChauffeur!SfrmFiche![FldHeureDeb].Value = rst![HeureDebTravail]
                        Forms!FrmChauffeur!SfrmFiche![FldHeureArr].Value = rst![HeureFinTravail]
                        Forms!FrmChauffeur!SfrmFiche![TdeCharge].Value = rst![TDechargement]
     
     
                        w_it1 = 1
                    Else
     
                        rst.MoveNext
     
                    End If
     
            Else
            w_it1 = 1
     
     
        End If
    Loop
    End If
     
     
    rst.Close

Discussions similaires

  1. Exécution requete sql
    Par bc_hass dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/06/2007, 17h36
  2. [Vba-Excel] Exécuter une requete SQL sur une feuille de donnée
    Par Spacy_green dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/11/2006, 09h27
  3. [MySQL] requete sql qui ne s'exécute pas
    Par anto48_4 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 16/03/2006, 09h12
  4. Liste de requete SQL à exécuter
    Par dgouyette dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 20/09/2005, 15h29
  5. probleme de d'excution de requete sql
    Par timsah dans le forum C++Builder
    Réponses: 3
    Dernier message: 08/09/2005, 19h06

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