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 :

Comparer valeur de 2 datables


Sujet :

VB.NET

  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 33
    Par défaut Comparer valeur de 2 datables
    Bonjour les programmeurs,

    Voilà mon pb

    j'ai 2 datatable issues chacune de 2 requete SQL
    ces 2 datables possèdent une colonne commune
    (ctcincde)

    ce que je voudrais faire faire c'est pouvoir comparer les 2 datables
    et si il match le bonne ID(ctcincde) dans les 2 datatable il me retourne vrai
    j'ai essayé de faire une function ifIDexist mais sans succès

    j'vous donne le code pour la creation des datables

    creation datatable contacts


    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
    Sub rapport_excel(ByVal requete As String, ByVal requete2 As String)
            'Création du DataSet contact
            Dim data As New Data.DataSet()
            Try
                ChargeTable(requete, "RECHERCHE", data)
            Catch ex As Exception
                MsgBox(ex.ToString)
                Exit Sub
            End Try
            'Ici on compte le nombre de lignes et de colonnes du datatable
            Dim NbRow As Integer = 0
            Try
                NbRow = data.Tables("RECHERCHE").Rows.Count
            Catch ex As Exception
            End Try
            Dim nbcol As Integer = data.Tables("RECHERCHE").Columns.Count


    puis celui du 2eme datable

    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
     
            'Création du DataSet role
            Dim data2 As New Data.DataSet()
            Try
                ChargeTable1(requete2, "RECHERCHE", data2)
            Catch ex As Exception
                MsgBox(ex.ToString)
                Exit Sub
            End Try
            'Ici on compte le nombre de lignes et de colonnes du datatable
            Dim NbRow2 As Integer = 0
            Try
                NbRow2 = data2.Tables("RECHERCHE").Rows.Count
            Catch ex As Exception
            End Try
            Dim nbcol2 As Integer = data2.Tables("RECHERCHE").Columns.Count

    j'vois pas commencer comparer les 2 datatables :/

    si vous avez une idée...

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Par défaut
    Salut,

    je te conseille d'utiliser du select sur tes datatables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataRow [] rows = table.Select( "ctcincde= " & moninteger)
    Ainsi en comptant le nombre de lignes de ton datarow[] tu saras si ton enregistrement existe ou pas.

    Tu fais ca sur tes 2 datatables et s'il est présent dans les 2 ta fonction retourne vrai, sinon elle retourne faux. Qu'en pense tu?

  3. #3
    Membre averti
    Inscrit en
    Février 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 33
    Par défaut
    hum j'ai de la chance mes datatable sont trié sur mes ctcincde

    mes tables ressemble a ca

    ctcincde nom prenom
    100 toto tata
    102 tutu titi



    et l'autre resemble a

    ctcincde role
    100 aaaa
    100 bbbbb
    101 cccc
    102 aaaaa


    ton select ne me semble pas approprié, j'ai pensé a une function Rolexist
    malheuresement trouver 2 motif similaire ds un mm datable ca j'sais faire mais le faire ds une boucle de suite ca j'bug totalement sur comment j'peux faire


    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
    Function Rolexist(ByVal DataTable As DataTable, Datatable2 as datatable) As Boolean
            Try
                Dim x As Integer
                Dim y as integer
     
                Dim RowPosition As Integer = 0
                While RowPosition <> DataTable.Rows.Count
                    If DataTable.Rows(RowPosition) 
     
    BLABLABLA  JE BUG ICI 
     
     
     
                        Return True
     
                    End If
                    RowPosition += 1
     
                End While
                Return False
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Function

    j'ai testé ca sans succes



    j'vous poste le module complet pour que vous puissez comprendre ma demarche

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    Imports System.Data.SqlClient
     
    Module Module1
     
        Dim con_strg As String = "Data Source=Neptune;Initial catalog=absyss;Integrated Security=SSPI"
        Sub ChargeTable(ByVal requete As String, ByVal nomtable As String, ByVal data As System.Data.DataSet)
            Dim con As New SqlConnection()
            Dim sqlda As SqlDataAdapter
            con = New SqlConnection(con_strg)
            con.Open()
            sqlda = New SqlDataAdapter(requete, con)
            Try
                ' Récupération des données dans une table nomtable
                sqlda.Fill(data, nomtable)
            Catch ex As Exception
                MsgBox(ex.ToString)
            Finally
                con.Close()
            End Try
        End Sub
     
        Sub ChargeTable1(ByVal requete2 As String, ByVal nomtable As String, ByVal data2 As System.Data.DataSet)
            Dim con As New SqlConnection()
            Dim sqlda As SqlDataAdapter
            con = New SqlConnection(con_strg)
            con.Open()
            sqlda = New SqlDataAdapter(requete2, con)
            Try
                ' Récupération des données dans une table nomtable
                sqlda.Fill(data2, nomtable)
            Catch ex As Exception
                MsgBox(ex.ToString)
            Finally
                con.Close()
            End Try
        End Sub
     
        Sub rapport_excel(ByVal requete As String, ByVal requete2 As String)
            'Création du DataSet contact
            Dim data As New Data.DataSet()
            Try
                ChargeTable(requete, "RECHERCHE", data)
            Catch ex As Exception
                MsgBox(ex.ToString)
                Exit Sub
            End Try
            'Ici on compte le nombre de lignes et de colonnes du datatable
            Dim NbRow As Integer = 0
            Try
                NbRow = data.Tables("RECHERCHE").Rows.Count
            Catch ex As Exception
            End Try
            Dim nbcol As Integer = data.Tables("RECHERCHE").Columns.Count
     
     
     
     
            'Création du DataSet role
            Dim data2 As New Data.DataSet()
            Try
                ChargeTable1(requete2, "RECHERCHE", data2)
            Catch ex As Exception
                MsgBox(ex.ToString)
                Exit Sub
            End Try
            'Ici on compte le nombre de lignes et de colonnes du datatable
            Dim NbRow2 As Integer = 0
            Try
                NbRow2 = data2.Tables("RECHERCHE").Rows.Count
            Catch ex As Exception
            End Try
            Dim nbcol2 As Integer = data2.Tables("RECHERCHE").Columns.Count
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
        'proc_xsl_avant recupére tous les processus Excel avant la création de notre processus excel
        Dim proc_xsl_avant() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcessesByName("Excel")
        Dim proc As System.Diagnostics.Process
        'compte le nombre de processus
        Dim nbproc_av As Integer = 0
            nbproc_av = proc_xsl_avant.Length
        'tableau contenant les id des processus
        Dim proc_xsl_id(nbproc_av) As String
        Dim i As Integer
            For i = 0 To nbproc_av - 1
                proc = proc_xsl_avant(i)
                proc_xsl_id(i) = proc.Id.ToString
            Next
        'Variables utiles pour le fichier excel
        Dim xlApp As New Excel.Application
        'On recupére tous les processus excel
        Dim proc_xsl() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcessesByName("Excel")
        Dim nbproc As Integer
            nbproc = proc_xsl.Length
        Dim id(nbproc) As String
            For i = 0 To nbproc - 1
                proc = proc_xsl(i)
                id(i) = proc.Id.ToString
            Next
        'On recupére le id correspondant au processus que l'on vient de créer
        Dim mon_id As String = ""
        Dim trouver As Boolean
        Dim j As Integer
            i = 0
            While i < nbproc
                j = 0
                trouver = False
                While trouver = False And i < nbproc And j < nbproc_av
                    If id(i) = proc_xsl_id(j) Then
                        trouver = True
                    End If
                    j = j + 1
                End While
                If trouver = False Then
                    mon_id = id(i)
                End If
                i = i + 1
            End While
        Dim x As Integer
        Dim y As Integer
        Dim xlSheet As New Excel.Worksheet
            xlSheet = xlApp.Workbooks.Add.ActiveSheet
            xlSheet.Name = "toto"
     
     
     
     
        End Sub
     
     
            For y = 0 To nbcol - 1
                For x = 0 To NbRow - 1
        'En tête
                    xlSheet.Cells(1, y + 1) = Data.Tables("RECHERCHE").Columns(y).ColumnName
        'On rempli la case
     
     
                        xlSheet.Cells(x + 2, y + 1) = Data.Tables("RECHERCHE").Rows(x).Item(y).ToString
                    End If
                Next
            Next
            xlSheet.SaveAs("C:\toto.xls")
            xlSheet = Nothing
        'On quitte l'application et on détruit les objets
            xlApp.Quit()
     
            xlApp = Nothing
        'Kill notre processus Excel
            For i = 0 To nbproc - 1
                proc = proc_xsl(i)
                If proc.Id = mon_id Then
                    proc.Kill()
                End If
            Next
            GC.Collect()
        End Function
    End Module

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Par défaut
    ton select ne me semble pas approprié
    Qu'est ce qui te fait dire ca? Un select est plus efficace qu'un boucle while qui va parcourir tous tes enregistrements de datatable. C'est presque une hérésie de parcourir les enregistrmeents d'une datatable 1 par 1 pour trouver un élément

  5. #5
    Membre averti
    Inscrit en
    Février 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 33
    Par défaut
    Sujet partiellement résolu avec une fonction

    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
    Function Rolexist(ByVal Code As Integer, ByVal role As DataSet) As String
     
            Dim x As Integer
            Rolexist = ""
            Try
     
                For x = 0 To role.Tables("RECHERCHE").Rows.Count - 1
                    If Code = role.Tables("RECHERCHE").Rows(x).Item(1).ToString() Then
                        Rolexist += role.Tables("RECHERCHE").Rows(x).Item(2).ToString()
                    End If
                Next
     
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            Return Rolexist
        End Function

    maintenant c'est l'ecriture de mon fichier excel que j'dois bosser

Discussions similaires

  1. [XSLT] xsl:foreach comparer valeurs..
    Par jeb001 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/03/2008, 15h07
  2. comparer valeurs de plusieurs variables
    Par DiamonDonald dans le forum VB.NET
    Réponses: 15
    Dernier message: 21/02/2008, 17h42
  3. Comparer valeur null champ
    Par Tyler Durden dans le forum SQL
    Réponses: 2
    Dernier message: 30/08/2007, 11h58
  4. comparer valeurs ResultSet
    Par mmb04 dans le forum JDBC
    Réponses: 14
    Dernier message: 13/04/2007, 14h37
  5. [VB.net] Comparer valeurs d'une table à une variable
    Par collaud_vb dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/09/2006, 15h24

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