Recherche la valeur maximale d'un champ et les compter

-
Messages postés
5
Date d'inscription
jeudi 27 janvier 2022
Statut
Membre
Dernière intervention
28 janvier 2022
-
Bonjour,

voila je suis entrain de développer une application sous Vb6.0 en utilisant une base Access.
mon problème est comme suit:
j'ai une table nommer dispatch , si pour dispatcher des carnet chaque dispatche compte 10 série ce que bloque si que je veux vérifier si il y a des enregistrement dans cette table si table vide on commence par le numéro de dispatching "0001" sinon on recherche la valeur maximale ..

pour cette étape aucun problème , je coince seulement a la fonction count , c'est a dire j'aimerais compter la valeur maximale de champs numéro si il y moins de 10 je récupère le numéro maximal sinon on incrément +1 pour un nouveau dispatching de 10 série.
voici le code que j’utilise:
 
Connected2DB
    Set rs5_Dis = New ADODB.Recordset
    Set rs5 = New ADODB.Recordset
    rs5.Open "SELECT * FROM Dispatch ", CN, 1, 2
    rs5_Dis.Open "SELECT Distinct Max(Num_Dis) FROM Dispatch ", CN, 1, 2
    If rs5.EOF Then
        Num_Disp.Text = "0001"
        Dech_Txt(0).Enabled = False
    Else
    
        If rs5_Dis.RecordCount >10 Then
            Num_Disp.Text = (rs5_Dis(0) + 1)
        Else
            MsgBox "le Dernier Dispatching N'as Pas Eté Terminer !!!"
            Num_Disp.Text = (rs5_Dis(0))
            
        End If
    End If
    Num_Disp = Format(Num_Disp, "0000")
    rs5_Dis.Close
    Set rs5_Dis = Nothing
    rs5.Close
    Set rs5 = Nothing
    CloseDB


voila j’espère que j'ai bien explique mon problème.
merci

10 réponses

Messages postés
2531
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
28 janvier 2022
142
Bonjour
En mettant de la ponctuation dans tes phrases ton souci serait largement plus compréhensible .
De plus pour présenter du code prière de suivre ce tuto : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Merci
voila de nouveau , j'ai inséré le code entre la balise code basic.
et j'ai fais de mon mieux pour la ponctuation, en écrivant ce message.


Connected2DB
    Set rs5_Dis = New ADODB.Recordset
    Set rs5 = New ADODB.Recordset
    rs5.Open "SELECT * FROM Dispatch ", CN, 1, 2
    rs5_Dis.Open "SELECT Distinct Max(Num_Dis) FROM Dispatch ", CN, 1, 2
    If rs5.EOF Then
        Num_Disp.Text = "0001"
        Dech_Txt(0).Enabled = False
    Else
    
        If rs5_Dis.RecordCount >10 Then
            Num_Disp.Text = (rs5_Dis(0) + 1)
        Else
            MsgBox "le Dernier Dispatching N'as Pas Eté Terminer !!!"
            Num_Disp.Text = (rs5_Dis(0))
            
        End If
    End If
    Num_Disp = Format(Num_Disp, "0000")
    rs5_Dis.Close
    Set rs5_Dis = Nothing
    rs5.Close
    Set rs5 = Nothing
    CloseDB
Messages postés
2531
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
28 janvier 2022
142
Bonjour
Lorsque je parlais de ponctuation ce n'est pas dans le code mais dans le corps même de ton message .
Car ton souci pour moi n'est pas compréhensible .
rebonjour,

bon je vais essayer d’être plus simple dans mon explication,

j'ai une table Access pour distribuer des séries de carnet ,de N°01 Au N° 10.
(c.a.d chaque série contient 10 carnets).
caque distribution aura un seul Numéro (on vas L'appeler N° distribution ) exemple:
0001 carnet 01
0001 carnet 02
.
.
.
0001 Carnet 10
pour l'ajout j'en ai aucun souci ,je coince dans la vérification des distribution.,.c'est a dire ,avant de commencer une nouvelle distribution je dois m'assurer que la dernière distribution est complète ( 10 carnet); si la précédente distribution n'est pas complète un message m'avertiras et m'obligeras de continuer cette distribution. sinon on ajout une nouvelle distribution avec un N° distribution suivant.

merci.
Messages postés
2531
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
28 janvier 2022
142
Bonsoir
Je ne fais plus de VB 6 depuis 10 ans au moins ( moi c'est VB Net ou C# ) . Donc difficile de te mettre du code .
Qu'est-ce qui t'empêche de mettre un compteur de 1 à 10 pour chaque distribution pour savoir où tu en es dans la dernière distribution ?
Si une distribution est à 10 elle est complète .
Si une distribution n'est pas complète c'est que celle-ci est la dernière en date et son compteur t'indique le nombre de carnets qu'elle contient .
Une fois que celle-ci aura ses 10 carnets tu créeras une nouvelle distribution .
Bonjour vb95, et merci pour votre reponse.

j'ai essaye avec un compteur, comme vous avez préconiser, mais malheureusement ça pas marcher.
voici le code que j'ai tester,
Dim Cpt_Dis As Integer
    Cpt_Dis = 0
    Connected2DB
    Set rs5_Dis = New ADODB.Recordset
  
    rs5_Dis.Open "SELECT  distinct Num_Dis FROM Dispatch group by Num_Dis", CN, 1, 2

    If rs5_Dis.EOF Then
        Num_Disp.Text = "0001"
        Dech_Txt(0).Enabled = False
    Else

        Cpt_Dis = rs5_Dis.RecordCount
    
        Do While Not rs5_Dis.EOF
            If Cpt_Dis > 10 Then
                Num_Disp.Text = (rs5_Dis(0) + 1)
            Else
                MsgBox "le Dernier Dispatching N'as Pas Eté Terminer !!!"
                Num_Disp.Text = (rs5_Dis(0))
                Dispa_MS_Refresh
             
            End If
            rs5_Dis.MoveNext
        Loop
    End If

    Num_Disp = Format(Num_Disp, "0000")
    rs5_Dis.Close
    Set rs5_Dis = Nothing
   
    CloseDB


peut être que j'ai mal utiliser le compteur.
Messages postés
2531
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
28 janvier 2022
142
Bonjour
Chaque distribution a un certain nombre de carnets ( de 1 à 10 ) .
Lorsqu'une distribution est complète elle a 10 carnets numérotés de 1 à 10 .
Dans ta base Access dans la table Distribution il suffit d'ajouter un champ indiquant le nombre de carnets .
Ainsi en interrogeant la dernière Distribution et en regardant son nombre de carnets tu sais si celle-ci est complète ou non .
Si elle est complète tu crées une nouvelle Distribution avec un nombre de carnets à 0 .
Chaque fois que tu ajoutes un carnet à cette même Distribution tu augmentes de 1 le nombre de carnets .
C'est aussi simple que cela !
Messages postés
5
Date d'inscription
jeudi 27 janvier 2022
Statut
Membre
Dernière intervention
28 janvier 2022

Bonsoir,
le RecordCount donne la valeur de l'enregistrement en court sauf si le recordset se trouve en lecture seule !
Else
     rs5_Dis.MoveLast
     Nb=rs5_Dis.RecordCount
     rs5_Dis.MoveFirst
      If Nb >10 Then
          Num_Disp.Text = (rs5_Dis(0) + 1)
      Else
          MsgBox "le Dernier Dispatching N'a Pas Eté Terminé !!!"
          Num_Disp.Text = (rs5_Dis(0))
      End If
  End If
Messages postés
2531
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
28 janvier 2022
142
Bonsoir dysorthographie
Pour spécifier le code il faut utiliser l'icône en forme de triangle noir renversé et non celui qui le précède .
Ainsi le code sera indenté et mis en couleurs . De plus il apparaîtra des numéros de lignes .
De plus Msgbox c'est du VB6 et non du pur VB Net
Merci
Messages postés
5
Date d'inscription
jeudi 27 janvier 2022
Statut
Membre
Dernière intervention
28 janvier 2022

Bonjour
Oui c'est exact msgbox c'est effectivement du Vb6 ou VBA ;

mais comme nous nous trouvons dans la rubrique Vb6 et que notre ami à très certainement laissé la librairie Visual Basic d'activité, je n'avais pas à modifier son code qui est conforme à l'énoncé du problème !

En revanche si il désactive cette librairie son code explose ! Dommage que Microsoft active cette librairie par défaut, les utilisateurs ne savent pas toujours qu'il développe en VBA et pas en VB.net!

Pour l'heure notre ami le précise dans son message,donc il est parfaitement conscient !
Messages postés
2531
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
28 janvier 2022
142
Bonjour
J'ai tapé trop vite : le post stipule bien VB 6 .
Désolé !
Messages postés
5
Date d'inscription
jeudi 27 janvier 2022
Statut
Membre
Dernière intervention
28 janvier 2022

en revanche pour la spécificité du code merci