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.NET Discussion :

Vb.net Problème de gestion de doublons [Débutant]


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Albanie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Vb.net Problème de gestion de doublons
    Bonjour tout le monde !!!
    Tout d'abord je vous remercie pour votre aide.
    Je débute en visual studio vb.net, et là je patauge un peu, mais mon problème, si quelqu'un voudrait bien m'aider,
    est un problème de raisonnement.
    Donc voilà, j'ai une base de données (SQL SERVER) dont une table contient des matricules de clients se composant de 15 positions :
    (8) jjmmaaaa pour la date de naissance
    (5) pour les premières du nom patronymique
    (2) suffixes pour gérer les doublons

    En fait, je dois gérer les doublons en jouant sur les suffixes.


    exemple : pour Mr FLAMARE PIERRE Né le 12 Janvier 1988, son matricule sera : 12011988FLAMA00
    Si il y a un autre Mr FLAMARD MICHEL Né le 12 Janiver 1988, son matricule devra être 12011988FLAMA00
    Ce sont deux personnes différentes mais avec le même matricule. Donc je dois attribuer à FLAMARD MICHEL le matricule
    avec un autre suffixe 12011988FLAMA01.

    Mon interface, contient un datagridview avec une colonne checkbox, dans cette datagrid j'affiche tout les doublons avec leur données,
    l'utilisateur doit cocher le même client, et lui donner le matricule avec suffixe (00), puis il gère le deuxième doublon
    et il le coche et lui attribue en automatique le suffixe (01).

    exemple de mon datagridview : (affichage de tout les doublons )
    NOM Date Matricule
    Mr FLAMARE PIERRE 12 Janvier 1988 12011988FLAMA00
    Mr FLAMARE PIERRE 12 Janvier 1988 12011988FLAMA00
    Mr FLAMARD MICHEL 12 Janiver 1988 12011988FLAMA00
    Mr FLAMARD MICHEL 12 Janiver 1988 12011988FLAMA00
    Mr CLEMENT JACKIE 15 Janiver 1989 15011989CLEME00
    Mme CLEMENT MARIE 15 Janiver 1989 15011989CLEME00

    Donc à l'oeil, l'utilisateur doit voir que les deux premiers sont la même personne, alors il coche les deux premières lignes,
    et Mr FLAMARE PIERRE aura dorénavant le matricule 12011988FLAMA00,

    puis la 3eme et 4eme ligne sont aussi la même personne , il les coche, et le matricule de Mr FLAMARD MICHEL devient 12011988FLAMA01.

    Par contre les deux dernières lignes sont des doublons certes mais pas les même que ceux d'en haut,
    donc, Mr CLEMENT JACKIE sera 15011989CLEME00 et Mme CLEMENT MARIE sera 15011989CLEME01
    Mon problème est que je dois appliquer ce raisonnement, mais je ne sais pas comment !!
    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Avant d'aller plus loin, j'ai deux questions.


    1. N'y aurait-il pas un problème de requête ? Pourquoi afficher plusieurs fois la même personne (lignes 1 et 2 et, lignes 3 et 4).
    2. Que faites-vous si le nom de la personne fait moins de 5 caractères de long ??

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Albanie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    merci déjà de répondre, alors pour la première question, dans ma table la même personne avec le matricule a plusieurs lignes différentes avec une clé primaire différente, faut savoir que le matricule n'est pas la clé primaire, la clé primaire c'est l'agence où il se trouve avec un numéro client. donc le client peut se trouver dans deux agence différente.
    Pour la deuxième question: On remplit avec des blanc

  4. #4
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Citation Envoyé par randavas Voir le message
    merci déjà de répondre, alors pour la première question, dans ma table la même personne avec le matricule a plusieurs lignes différentes avec une clé primaire différente, faut savoir que le matricule n'est pas la clé primaire, la clé primaire c'est l'agence où il se trouve avec un numéro client. donc le client peut se trouver dans deux agence différente.
    D'acord mais si j'ai bien compris, la grille qui affiche la liste (du moins la liste qui nous occupe) ne sert qu'à l'utilisateur pour attribuer les numéros en cas de doublon non ? (possible que j'ai compris de travers ^^)

    Citation Envoyé par randavas Voir le message
    Pour la deuxième question: On remplit avec des blanc
    Mon dieu que c'est moche. Mais c'est un avis perso...


    Après relecture...
    J'ai probablement du mal comprendre pour le première partie et les numéros en suffixe doivent être gérés automatiquement. A vue de pif, je créerais une table satellite qui contiendrait les différents patronymes (enfin leur 5 premières lettres) utilisé ainsi que le numéro utilisé jusqu'ici pour pouvoir savoir à quel numéro on est sans avoir besoin de chercher dans toute la table s'il y a pas d'autres "CLEME" sur le même jour. Mais attention aux accès concurrents ! (je pense que cela se règle en utilisant le niveau d'isolation transactionnel approprié)

    Il doit probablement y avoir une solution plus propre... P-e sur le forum SQL Server>Développement ??

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Albanie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Oui c'est ça la grille donne la main à l'utilisateur de pouvoir gérer les doublons.


    ET oui je suis d'accord c'est moche, mais c'est ce qu'on m'a demandé de faire, ce n'est pas mon choix.

    Donc la table contiendrait les patronymes du genre une colonne pour CLEME et une colonne pour le suffixe qui va changer à chaque fois qu'il augmente, donc ça commence à 00 et on met à jour à chaque fois qu'il ya un nouveau clem.
    seulement il se peut que ce soit CLEME mais c'est pas la même personne.

  6. #6
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Ah oui juste...

    Bah j'avais dit à vue de pif hein ^^. Faut analyser le problème plus en profondeur pour y trouver une solution appropriée. Honnêtement, je n'ai pas le temps de le faire. J'ai aussi mon job qui doit être fait ^^.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Albanie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    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

    quand j'affiche tous les doublons, je coche les checkbox des même client et le reste je leur met le suffixe 01, puis je coche les deux autres clients identiques, et le reste je lui attribue le suffixe 02. seulement voila, comme je liste tout dans le datagridview, y a des doublons mais ya différentes famille de doublons. Voici un bout de code :

    là j'affiche mes doublons :
    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
    cmd.CommandText = "select cdag AGENCE,cli NUM_CLIENT,cleba CLE_BA,nom NOM,Prenom PRENOM,dna DATE_DE_NAISSANCE,sex SEXE,PrePer PRENOM_PERE,Nomer NOM_MERE,Premer PRENOM_MERE,NIN NIN from f_descrPar where cleba13 in(SELECT cleba13 FROM f_descrPar GROUP BY cleba13 HAVING COUNT(cleba13) > 1)  and cli not in (select cli from cledef)"
    da.SelectCommand = cmd
    cmd.Connection = con
    da.Fill(ds, "CLEBA")
    dv.Table = ds.Tables("CLEBA")
    ds.Tables("CLEBA").PrimaryKey = New DataColumn( {ds.Tables("CLEBA").Columns("cli,cdag")}
    Grid_doublon.DataSource = ds.Tables("CLEBA")
    'parcourire tous les checkbox si il sont true alor : .....
            con.Open()
            Dim n As Integer
            For n = 0 To Grid_doublon.Rows.Count - 1
     
                If CBool(Grid_doublon.Rows(n).Cells("Checkbox").Value) = True Then 
     'CHECKBOX coché, je récupère la cléBA de la ligne en cours
     
     Dim strX As String = Grid_doublon.Rows(n).Cells(2).Value
     Dim strX13 As String = Mid(strX, 1, 13)
     
     Grid_doublon.Rows(n).Cells(2).Value = strX
     
    cmd.CommandText = "update dbo.f_descrPar set cleba = '" & Trim(Grid_doublon.Rows(n).Cells(2).Value) & "' , cleba13 = '" & Trim(strX13) & "' where cli= '" & Trim(Grid_doublon.Item(1, n).Value) & "' and cdag = '" & Trim(Grid_doublon.Item(0, n).Value) & "'"
    cmd.Connection = con
    cmd.ExecuteNonQuery()
     
                Else
                    Dim st As String = Grid_doublon.Rows(n).Cells(2).Value 
                    Dim x As String
                    Dim s As Integer
                    Dim cle As String
                    x = Mid(st, 14, 2) 
                    If Mid(x, 1, 1) = "0" Then 
     
         s = CType(Mid(x, 2, 1), Integer) + 1 
                        x = Mid(x, 1, 1) & s 
                    Else 
                        x = Mid(st, 14, 2) ' x= "10"
                        s = CType(x, Integer) + 1 
                        x = CType(s, String) 
                    End If
     
     
                 cle = Mid(Grid_doublon.Rows(n).Cells(2).Value, 1, 13)
     
                  Grid_doublon.Rows(n).Cells(2).Value = cle & x
     
     
                End If
            Next

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    j'ai déjà utiliser une fonction pour générer un nouveau numéro d'identification il y a longtemps sa ressemble à ...

    function DoublonNum(byval matricule as string) as string

    Dim Matricule2() as string

    do
    matricule2 = = ici tu sépares la partis nombre de la fin du début

    1er passe du do
    Donc matricule2(0)=12011988FLAMA
    matricule2(1)=00

    2 em passe du do
    Donc matricule2(0)=12011988FLAMA
    matricule2(1)=01

    dim int1 as integer = select count "matricule"

    si int1>0
    matricule = matricule2(0) & Cint(matricule2(1)) +1
    else
    exit do
    loop
    rep matricule
    end fonction


    ça ressemble à ça

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Albanie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    ok merci beaucoup de répondre. je vais voir ça !!!!

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

Discussions similaires

  1. Problème de gestion de doublons
    Par EJ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2006, 19h35
  2. [CR][ASP.NET] Problème d'affichage du rapport
    Par David.V dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 20/04/2004, 12h39
  3. Problème de gestion fichiers
    Par glutock dans le forum ASP
    Réponses: 2
    Dernier message: 08/04/2004, 11h55
  4. [VB.NET]La bonne gestion des forms
    Par Wintermute dans le forum Windows Forms
    Réponses: 11
    Dernier message: 13/01/2004, 16h35
  5. [TFrame] Problème de gestion du OnMouseDown avec une Frame
    Par xherault dans le forum Composants VCL
    Réponses: 5
    Dernier message: 23/05/2003, 15h35

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