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

VB 6 et antérieur Discussion :

Programme pointage des ouvriers


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 23
    Points
    23
    Par défaut Programme pointage des ouvriers
    J'ai un grand souci concernant la requête sql dans vb 6.0 avec la référence DAO
    La base de données là voici
    http://site.voila.fr/vb6/relations.JPG
    le code
    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
     
    Private Sub Form_Load()
    Dim r As Recordset
    Dim ch As String
     
       'Remplir la grille
       ch = "select EFFECTUE.date_deb,EFFECTUE.date_fin,EFFECTUE.nombre_heure,EFFECTUE.nombre_heures_supp,EFFECTUE.num_tache,EFFECTUE.num_empl,EFFECTUE.jour_travail,EMPLOYE.num_empl,EMPLOYE.nom_empl,Ordre_de_Travaux.num_ot,Ordre_de_Travaux.date_ot,Ordre_de_Travaux.num_tache,SECTION.section,SECTION.num_tache,TACHE.num_tache,TACHE.nature_tache1,TACHE.nature_tache2,TACHE.nature_tache3,TACHE.nature_tache4 From EFFECTUE,EMPLOYE,Ordre_de_Travaux,SECTION,TACHE Where SECTION.num_tache=TACHE.num_tache And Ordre_de_Travaux.num_tache=TACHE.num_tache And EFFECTUE.num_tache=TACHE.num_tache And EFFECTUE.num_empl=EMPLOYE.num_empl"
       Set r = db.OpenRecordset(ch)
       r.MoveFirst
       Do While Not r.EOF
       g.AddItem r(0) & vbTab & r(1) & vbTab & r(2) & vbTab & r(3) & vbTab & r(4) & vbTab & r(5) & vbTab & r(6) & vbTab & r(7) & vbTab & r(8) & vbTab & r(9) & vbTab & r(10) & vbTab & r(11) & vbTab & r(12) & vbTab & r(13) & vbTab & r(14) & vbTab & r(15)
       r.MoveNext
       Loop
     
    End Sub
    mon problème est le voici
    un message
    aucun enregistrement en cours

    par contre j'ai rempli dans chaque table 5 enregistrements
    aidez moi SVP

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 261
    Points : 216
    Points
    216
    Par défaut
    Comment tu fais la référence à ta base de données ?

    Je vois qu'en form load, tu appelles un record set, mais je ne vois pas une déclaration pour la base de données...

    As tu fais quelque part avant de faire db.recordset quelque chose du genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim db as database 
    set db= OpenDatabase("C:\MaBaseDeDonnées.mdb")

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Bonjour.

    Si ton recordset est ouvert en mode dynaset, il faut peupler l'index en envoyant son pointeur en fin de recordset puis en le ramenant au début.

    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
     
    Private Sub Form_Load()
    Dim r As Recordset
    Dim ch As String
     
       'Remplir la grille
       ch = "select EFFECTUE.date_deb,EFFECTUE.date_fin,EFFECTUE.nombre_heure,EFFECTUE.nombre_heures_supp,EFFECTUE.num_tache,EFFECTUE.num_empl,EFFECTUE.jour_travail,EMPLOYE.num_empl,EMPLOYE.nom_empl,Ordre_de_Travaux.num_ot,Ordre_de_Travaux.date_ot,Ordre_de_Travaux.num_tache,SECTION.section,SECTION.num_tache,TACHE.num_tache,TACHE.nature_tache1,TACHE.nature_tache2,TACHE.nature_tache3,TACHE.nature_tache4 From EFFECTUE,EMPLOYE,Ordre_de_Travaux,SECTION,TACHE Where SECTION.num_tache=TACHE.num_tache And Ordre_de_Travaux.num_tache=TACHE.num_tache And EFFECTUE.num_tache=TACHE.num_tache And EFFECTUE.num_empl=EMPLOYE.num_empl"
       Set r = db.OpenRecordset(ch)
     
       on local error resume next
       r.movelast
       r.MoveFirst
    	if err.number=0 then
    	   Do While Not r.EOF
    		   g.AddItem r(0) & vbTab & r(1) & vbTab & r(2) & vbTab & r(3) & vbTab & r(4) & vbTab & r(5) & vbTab & r(6) & vbTab & r(7) & vbTab & r(8) & vbTab & r(9) & vbTab & r(10) & vbTab & r(11) & vbTab & r(12) & vbTab & r(13) & vbTab & r(14) & vbTab & r(15)
    		   r.MoveNext
    	   Loop
    	end if
    	on local error goto 0
     
    End Sub

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par justgreat Voir le message
    Comment tu fais la référence à ta base de données ?

    Je vois qu'en form load, tu appelles un record set, mais je ne vois pas une déclaration pour la base de données...

    As tu fais quelque part avant de faire db.recordset quelque chose du genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim db as database 
    set db= OpenDatabase("C:\MaBaseDeDonnées.mdb")
    voila le code d'ouverture de la base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub MDIForm_Load()
     
    Set db = OpenDatabase(App.Path & "\pointage.mdb")
    Set se = db.OpenRecordset("SECTION")
    Set ta = db.OpenRecordset("TACHE")
    Set ord = db.OpenRecordset("Ordre_de_Travaux")
    Set em = db.OpenRecordset("EMPLOYE")
    Set ef = db.OpenRecordset("EFFECTUE")
     
    End Sub

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par CBFURAX Voir le message
    Bonjour.

    Si ton recordset est ouvert en mode dynaset, il faut peupler l'index en envoyant son pointeur en fin de recordset puis en le ramenant au début.

    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
     
    Private Sub Form_Load()
    Dim r As Recordset
    Dim ch As String
     
       'Remplir la grille
       ch = "select EFFECTUE.date_deb,EFFECTUE.date_fin,EFFECTUE.nombre_heure,EFFECTUE.nombre_heures_supp,EFFECTUE.num_tache,EFFECTUE.num_empl,EFFECTUE.jour_travail,EMPLOYE.num_empl,EMPLOYE.nom_empl,Ordre_de_Travaux.num_ot,Ordre_de_Travaux.date_ot,Ordre_de_Travaux.num_tache,SECTION.section,SECTION.num_tache,TACHE.num_tache,TACHE.nature_tache1,TACHE.nature_tache2,TACHE.nature_tache3,TACHE.nature_tache4 From EFFECTUE,EMPLOYE,Ordre_de_Travaux,SECTION,TACHE Where SECTION.num_tache=TACHE.num_tache And Ordre_de_Travaux.num_tache=TACHE.num_tache And EFFECTUE.num_tache=TACHE.num_tache And EFFECTUE.num_empl=EMPLOYE.num_empl"
       Set r = db.OpenRecordset(ch)
     
       on local error resume next
       r.movelast
       r.MoveFirst
    	if err.number=0 then
    	   Do While Not r.EOF
    		   g.AddItem r(0) & vbTab & r(1) & vbTab & r(2) & vbTab & r(3) & vbTab & r(4) & vbTab & r(5) & vbTab & r(6) & vbTab & r(7) & vbTab & r(8) & vbTab & r(9) & vbTab & r(10) & vbTab & r(11) & vbTab & r(12) & vbTab & r(13) & vbTab & r(14) & vbTab & r(15)
    		   r.MoveNext
    	   Loop
    	end if
    	on local error goto 0
     
    End Sub
    j'ai fais exactement que tu ma proposé , l'erreur est bien résolu mais la grille est totalement vide je ne sais pas quoi faire d'autre

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    est ce que la relation entre les tables ou quoi ?
    intégrités référentiel + jointures+clés tout en ordre
    je ne sais pas trop
    une autre proposition Monsieur...?

  7. #7
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 180
    Points
    17 180
    Par défaut
    Je ne pratique pas DAO mais ADO, j'ai regardé tout de même ta requete SQL, en la reformulant sur plusieurs lignes, pour y voire un peu plus claire.
    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
    ch = "select " _
            & "EFFECTUE.date_deb," _
            & "EFFECTUE.date_fin," _
            & "EFFECTUE.nombre_heure," _
            & "EFFECTUE.nombrenombre_heures_supp," _
            & "EFFECTUE.num_tache," _
            & "EFFECTUE.num_empl," _
            & "EFFECTUE.jour_travail," _
            & "EMPLOYE.num_empl," _
            & "EMPLOYE.nom_empl," _
            & "Ordre_de_Travaux.num_ot," _
            & "Ordre_de_Travaux.date_ot," _
            & "Ordre_de_Travaux.num_tache," _
            & "SECTION.section," _
            & "SECTION.num_tache," _
            & "TACHE.num_tache," _
            & "TACHE.nature_tache1," _
            & "TACHE.nature_tache2," _
            & "TACHE.nature_tache3," _
            & "TACHE.nature_tache4 " _
                & "From EFFECTUE,EMPLOYE,Ordre_de_Travaux,SECTION,TACHE " _
                    & "Where SECTION.num_tache=TACHE.num_tache And " _
                        & "Ordre_de_Travaux.num_tache=TACHE.num_tache And " _
                        & "EFFECTUE.num_tache=TACHE.num_tache And " _
                        & "EFFECTUE.num_empl=EMPLOYE.num_empl"
    La condition Where me semble aberrante, qu'attends tu comme renvoi de cette condition multiple?
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "La condition Where me semble aberrante, qu'attends tu comme renvoi de cette condition multiple? "
    alors j'ai utilisé les relations suivantes
    tâche avec emplyé jai utilisé la relation effectué
    tâche avec section
    tâche avec ordre de travail
    - chaque employé effectue une ou plusieurs tâches
    - chaque tâche est effectuée par un ou plusieurs employés

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par agan2012 Voir le message
    j'ai fais exactement que tu ma proposé , l'erreur est bien résolu mais la grille est totalement vide je ne sais pas quoi faire d'autre
    Si le recordset renvoyé par la requête SQL est vide, une erreur se produit lors du movelast et du movefirst.
    L'erreur est trappée par le "on error resume next", et err.number est non nul (il n'y a pas d'enregistrement courant).
    La boucle Do...loop n'est donc pas exécutée.

    La question est donc : pourquoi ta requête ne renvoie-elle rien ?
    Je suis pas un killer en SQL, mais la façon dont la tienne est montée me paraît étrange. (Pas le LEFT JOIN ou INNER JOIN, pour tes jointures ? )

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par CBFURAX Voir le message
    La question est donc : pourquoi ta requête ne renvoie-elle rien ?
    Je suis pas un killer en SQL, mais la façon dont la tienne est montée me paraît étrange. (Pas le LEFT JOIN ou INNER JOIN, pour tes jointures ? )
    Vous proposez quoi comme solution!!!

  11. #11
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    Si vous voulez jeter un Œil sur mon prog
    voila le lien
    http://site.voila.fr/vb6/Programme.zip

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Il n'y a pas de num_tache = '006' dans la table 'Section'.
    Ton produit cartésien ne peut donc pas fonctionner.

    Ajoute une enregistrement '006' 'Soudure' dans ta table 'Section' et ça devrait fonctionner.

    Si ça fonctionne toujours pas, essaie ça :

    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
     
    SELECT 
    EFFECTUE.date_deb, 
    EFFECTUE.date_fin, 
    EFFECTUE.nombre_heure, 
    EFFECTUE.nombre_heures_supp, 
    EFFECTUE.num_tache, 
    EFFECTUE.num_empl, 
    EFFECTUE.jour_travail, 
    EMPLOYE.nom_empl, 
    SECTION.section, 
    TACHE.nature_tache1, 
    TACHE.nature_tache2, 
    TACHE.nature_tache3, 
    TACHE.nature_tache4
     
    FROM 
     
    (TACHE 
     
    INNER JOIN 
        (EMPLOYE 
    INNER JOIN 
        EFFECTUE 
            ON EMPLOYE.num_empl = EFFECTUE.num_empl) 
            ON TACHE.num_tache = EFFECTUE.num_tache) 
    INNER JOIN
       [SECTION] 
           ON TACHE.num_tache = SECTION.num_tache;
    EDIT : Si tu veux pouvoir extraire des données alors qu'une liaison n'existe pas (i.e. num_tache = '006' dans la table 'Section', utilise la clause LEFT JOIN au lieu de INNER JOIN sur la table 'Section'). Ton recordset en sortie sera bien constitué, mais le champ 'section' sera vide

    EDIT 2 : Bonne soirée

  13. #13
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par CBFURAX Voir le message
    EDIT : Si tu veux pouvoir extraire des données alors qu'une liaison n'existe pas (i.e. num_tache = '006' dans la table 'Section', utilise la clause LEFT JOIN au lieu de INNER JOIN sur la table 'Section'). Ton recordset en sortie sera bien constitué, mais le champ 'section' sera vide

    EDIT 2 : Bonne soirée
    merci à vous
    je tente ce que vous me proposer et je reviens

  14. #14
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    le problème reste le même malgré tout

  15. #15
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Etonnant...

    Si tu ouvres la base avec Access, ajoutes le '006' 'Soudure' dans 'SECTION', crées une requête SQL à l'aide de l'assistant (ça génère la requête que je t'ai postée, gros flemmard que je suis ), puis que tu exécutes cette requête dans access, tu obtiens bien un enregistrement en sortie...
    J'ai essayé, ça marche, y compris le coup du LEFT JOIN.

    Normalement, en recopiant la requête dans ton programme VB en lieu et place de la tienne, tu devrais obtenir le même résultat qu'avec Access.

  16. #16
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par CBFURAX Voir le message
    Etonnant...

    Si tu ouvres la base avec Access, ajoutes le '006' 'Soudure' dans 'SECTION', crées une requête SQL à l'aide de l'assistant (ça génère la requête que je t'ai postée, gros flemmard que je suis ), puis que tu exécutes cette requête dans access, tu obtiens bien un enregistrement en sortie...
    J'ai essayé, ça marche, y compris le coup du LEFT JOIN.

    Normalement, en recopiant la requête dans ton programme VB en lieu et place de la tienne, tu devrais obtenir le même résultat qu'avec Access.
    vous pouvez m'envoyez l'intégral du code pour le coller sur mon prog
    je serais reconnaissant
    merci bien
    bonne journée à vous

  17. #17
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Ton code n'y est pour rien...

    Ce sont tes données qui sont fausses.
    J'ai regardé dans les deux sous-répertoires "programme" et "programme essaie" :

    Dans "Programme", il manque '006' 'Soudure' dans la table section.

    Dans "Programme essaie", c'est un peu le boxon au niveau des données :

    Dans la table 'EFFECTUE' (table principale), tu as une num_tache ='12', mais pas de num_tache = '12' dans 'Ordres de travaux' ni dans 'Section'.
    Ta requête SQL ne renvoie donc rien (la mienne non plus d'ailleurs).

    Au fait : quel répertoire faut-il utiliser ?!
    Je viens de voir que les structures de table sont différentes entre les deux répertoires...

  18. #18
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    le répertoire principale c'est "Programme"
    mais l'autre aucune importance

  19. #19
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    oui effectivement mais les enregistrement viens effectuées aux derniers lignes de flixegrid
    merci à vous

  20. #20
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    le problème est résolu
    grâce à dieu et à vous
    merci infiniment

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Programme : Table des symboles
    Par Premium dans le forum C
    Réponses: 13
    Dernier message: 02/11/2017, 19h15
  2. Réponses: 12
    Dernier message: 11/04/2006, 17h36
  3. Lancer un programme avec des arguments via IE...
    Par petozak dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 24/03/2006, 11h51
  4. [Classpath][execution] executer un programme avec des jar.
    Par LoLoSS dans le forum Général Java
    Réponses: 11
    Dernier message: 26/08/2004, 11h45
  5. Methode de programmation sur des gros projets
    Par dynobremo dans le forum EDI
    Réponses: 10
    Dernier message: 08/06/2004, 02h59

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