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

Windows Forms Discussion :

[VB.NET 2003] Problème de Dataset


Sujet :

Windows Forms

  1. #1
    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 [VB.NET 2003] Problème de Dataset
    Bonjour,

    Avant d'expliquer mon problème, un peu de code ^^

    Dans mes déclarations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Dim ds As New DataSet
        Dim dsClient As New DataSet
    Plus loin dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        dsClient = MaProcedureDeRemplissageDeDataset
    Encore un peu plus loin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ds = MaProcedureDeRemplissageDeDataset
    Maintenant mon soucis :

    Au moment du remplissage du dataset "ds", le dataset dsClient est modifié également. Pourquoi ?

    Je ne sais pas si c'est en rapport mais MaProcedureDeRemplissageDeDataset se trouve dans un module à part.

    Quelqu'un peut-il m'aider ?

    Merci d'avance.

    Griftou.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    à priori ta fonction MaProcedureDeRemplissageDeDataset doit etre de type dataset, sinon elle ne pourrait pas rentrer dans un dataset

    ensuite tu ne fais qu'un new ... donc c'est étrange, ta fonction fait elle un new dataset ?

    un variables n'est qu'un pointeur et 2 variables peuvent pointer sur le meme objet, auquel cas travailler sur une affecte l'autre

  3. #3
    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
    Voici la fonction en question :
    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
    Public Function DoSelect(ByVal table As ArrayList, ByVal fields As ArrayList, ByVal criterias As ArrayList, ByVal distinct As Boolean, ByVal order As ArrayList) As DataSet
            'each item of fields must be structured like "tableName.fieldName"
            'criterias must be structured like this : <key,value> where key is the fieldname and the operator
            'example : < "client.NIDCLIENT" = ; 0 > or < "contact.CNOM" = ; "arnaud" >
            Dim sql As String
     
            Try
                If Not da Is Nothing Then
                    da.Dispose()
                    da = New Advantage.Data.Provider.AdsDataAdapter
                Else
                    da = New Advantage.Data.Provider.AdsDataAdapter
                End If
                If distinct Then
                    sql = "select distinct "
                Else
                    sql = "select "
                End If
     
                If Not (fields Is Nothing) Then
                    For Each elem As String In fields
                        sql = sql + elem + ", "
                    Next
                Else
                    sql = sql + "* "
                End If
     
     
                sql = sql.TrimEnd(", ".ToCharArray) + " from "
     
                For Each elem As String In table
                    sql = sql + elem + ", "
                Next
     
                sql = sql.TrimEnd(", ".ToCharArray) + " where "
     
                If Not (criterias Is Nothing) Then
                    For Each elem As String In criterias
                        sql = sql + elem + " AND "
                    Next
                    If sql.EndsWith(" AND ") Then
                        sql = sql.Substring(0, sql.Length - 5)
                    End If
                End If
     
                If sql.EndsWith(" where ") Then
                    sql = sql.Substring(0, sql.Length - 7)
                End If
     
                If Not (order Is Nothing) Then
                    sql = sql + " order by "
                    For Each elem As String In order
                        sql = sql + elem + ","
                    Next
                    sql = sql.TrimEnd(",")
                    If sql.EndsWith(" order by ") Then
                        sql = sql.Substring(0, sql.Length - 10)
                    End If
                End If
     
                'MsgBox(sql)
                cmd.CommandText = sql
                da.SelectCommand = cmd
                ds.Reset()
                da.Fill(ds)
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
     
            Return ds
        End Function
    Et ici les déclarations globale du module où elle se trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim conn As New Advantage.Data.Provider.AdsConnection
        Dim cmd As New Advantage.Data.Provider.AdsCommand
        Dim da As Advantage.Data.Provider.AdsDataAdapter
        Dim ds As New DataSet
        Dim cb As Advantage.Data.Provider.AdsCommandBuilder
    Vu que le dataset du module s'appelle aussi "ds" j'aurais compris que celui de ma windowsform qui s'appelle "ds" soit modifié aussi mais pourquoi celui qui s'appelle "dsClient" ?

    Griftou.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    Vu que le dataset du module s'appelle aussi "ds" j'aurais compris que celui de ma windowsform qui s'appelle "ds" soit modifié aussi
    personnellement, un langage qui fait ca je l'abandonne tout de suite lol
    ca serait totalement idiot
    2 variables peuvent avoir le meme nom, si elles sont dans 2 objets (classes, sub, ...) différents il ne pas y avoir amalgame de fait


    par contre c'est ce que j'ai dit plutot ta fonction dans tous les cas retourne le meme pointeur
    varA = obj1
    varB = obj1

    varA.nom = "toto"
    implique que varB.nom = "toto"
    et obj1.bom = "toto"

    si tu veux que les variables soit indépendantes il faut les cloner (voir si ca implémente .clone pour faire varA = obj1.clone)

    ou alors il faut que ta fonction ai la déclaration du dataset, donc à chaque appel de la fonction tu ferais new dataset (donc un nouveau pointeur) et tu fais return et il y aura bien des dataset différents

  5. #5
    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
    Ok je vais tester ça tout de suite !

    EDIT :

    Bin voilà ça fonctionne. Merci beaucoup !

    Griftou.

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

Discussions similaires

  1. [VB.NET 2003] problème de MAJ d'une DB
    Par Kropernic dans le forum Windows Forms
    Réponses: 1
    Dernier message: 28/08/2007, 10h44
  2. [Visual Studio .Net 2003]Problème d'édition de liens
    Par Mindiell dans le forum Visual C++
    Réponses: 10
    Dernier message: 25/05/2007, 23h43
  3. Réponses: 6
    Dernier message: 10/04/2007, 23h50
  4. [VC++.net 2003] Problème de cast
    Par Rafoo dans le forum Visual C++
    Réponses: 6
    Dernier message: 20/09/2006, 09h14
  5. Réponses: 2
    Dernier message: 05/05/2006, 15h10

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