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 :

Modifier ligne + ligne suivante - VB.net + sql2005


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 73
    Par défaut Modifier ligne + ligne suivante - VB.net + sql2005
    Bonjour,

    Voilà ce que je désire faire :

    Soit une base qui contient une table nommée hlppairs. Dans cette table, 2 colonnes : utilise et numero

    la colonne utilise contient que des N et un seul O (comme Oscar)
    la colonne numero : des numeros uniques.

    Lors de l'action sur un bouton, je veux mettre un N à la place du O, puis mettre un O sur la ligne suivante à la place du N
    De plus lorsque le O se trouve sur la dernière ligne, je veux remonter ce O à la première.

    En bref : déplacer ce O d'une ligne et le remonter à la première s'il se trouve à la dernière.

    Le code suivant (merci Philippe Laserre) modifie la première ligne : comment faire pour la suite ?

    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
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
     
            'Ouverture
     
            'Initialisation de la chaîne de paramètres pour la connexion
     
            strConn = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\eric\Mes documents\Visual Studio 2005\Projects\numsdm\numsdm\Database1.mdf;Integrated Security=True;User Instance=True"
     
            'Initialisation de la chaîne contenant l'instruction SQL
     
            strSql = "SELECT * FROM hlppairs where utilise ='O' "
     
            'Instanciation d'un Objet Connexion
     
            ObjetConnection = New SqlConnection()
     
            'Donner à la propriété ConnectionString les paramètres de connexion
     
            ObjetConnection.ConnectionString = strConn
     
            'Ouvrir la connexion
     
            ObjetConnection.Open()
     
            'Instancier un objet Commande
     
            ObjetCommand = New SqlCommand(strSql)
     
            'Instancier un objet Adapter
     
            ObjetDataAdapter = New SqlDataAdapter(ObjetCommand)
     
            'initialiser l'objet Command
     
            ObjetCommand.Connection() = ObjetConnection
     
            'Avec l'aide de la propriété Fill du DataAdapter charger le DataSet
     
            ObjetDataAdapter.Fill(ObjetDataSet, "hlppairs")
     
            'Mettre dans un Objet DataTable une table du DataSet
     
            ObjetDataTable = ObjetDataSet.Tables("hlppairs")
     
     
            If RowNumber < 0 Then Exit Sub
     
            'Lors de l'ouverture de la BD, s'il n'y a aucun enregistrement
     
            'If RowNumber > ObjetDataTable.Rows.Count - 1 Then Exit Sub
     
            ' ObjetTable.Rows(Numéro de lignes).Item( Nom de colonne) donne le contenu d'un champ dans une ligne donnée
            Dim i As Integer
            For i = 0 To ObjetDataTable.Rows.Count - 1
                MessageBox.Show(ObjetDataTable.Rows(RowNumber).Item("numero").ToString)
                ' Extraire l'enregistrement courant
     
                ObjetDataRow = ObjetDataSet.Tables("hlppairs").Rows(RowNumber)
                'Modifier les valeurs des champs en  récupérant le contenu des TextBox
                ObjetDataRow("utilise") = "N"
            Next
     
            'Pour modifier les valeurs changées dans le DataAdapter
            ObjetCommandBuilder = New SqlCommandBuilder(ObjetDataAdapter)
            'Mise à jour
     
            ObjetDataAdapter.Update(ObjetDataSet, "hlppairs")
     
     
            'On vide le DataSet et on le 'recharge' de nouveau.
     
            ObjetDataSet.Clear()
     
            ObjetDataAdapter.Fill(ObjetDataSet, "hlppairs")
     
            ObjetDataTable = ObjetDataSet.Tables("hlppairs")
     
     
            'Fermer
     
            'Objet connectée
     
            ObjetConnection = Nothing
     
            ObjetCommand = Nothing
     
            ObjetDataAdapter = Nothing
     
            'Objet déconnectée 
     
            ObjetDataSet = Nothing
     
            ObjetDataTable = Nothing
     
            ObjetDataRow = Nothing
     
        End Sub
    merci de votre aide

    eric

    Débutant qui n'en veut !

  2. #2
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 182
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 182
    Par défaut
    Bonjour.

    C'est plus un probléme conceptuel qu'un probléme de mise à jour ou de language.

    Comment veux-tu connaîte la ligne suivante ?
    - je ne vois pas de clé primaire
    - je vois pas d'ordre de tri

    Ton but me semble de faire "cycler" le "O" dans les lignes mais pourquoi faire ?

    Tel que tu essayes de le faire c'est clairement impossible.

    Il te faudrait par exemple un n°de ligne en clé primaire.
    Puis tu sélectionnes le n°de ligne ou tu as "O".
    Tu updates la ligne en mettant "N"
    Ensuite, tu sélectionnes la lignes suivante avec une requête du stype "where numligne > le n°de ligne sélectionnée initialement.
    Si la requête rend quelque chose, tu updates la premiére ligne avec "O"
    Sinon tu récupéres la premiére ligne avec un "select min(numligne)", et tu updates cette ligne avec "O".

    Cdt.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 73
    Par défaut
    Bonjour olsimare et merci de ta réponse.

    En travaillant un peu plus, j'ai réussi à faire ça !
    J'ai aussi changé le O par 1 et le N par 2

    il me reste à gérer la dernière ligne et là j'ai un prob avec 2 If imbriqués.

    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
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
     
            'Ouverture
     
            'Initialisation de la chaîne de paramètres pour la connexion
     
            strConn = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\eric\Mes documents\Visual Studio 2005\Projects\numsdm\numsdm\Database1.mdf;Integrated Security=True;User Instance=True"
     
            'Initialisation de la chaîne contenant l'instruction SQL
     
            strSql = "SELECT * FROM hlppairs "
     
            'Instanciation d'un Objet Connexion
     
            ObjetConnection = New SqlConnection()
     
            'Donner à la propriété ConnectionString les paramètres de connexion
     
            ObjetConnection.ConnectionString = strConn
     
            'Ouvrir la connexion
     
            ObjetConnection.Open()
     
            'Instancier un objet Commande
     
            ObjetCommand = New SqlCommand(strSql)
     
            'Instancier un objet Adapter
     
            ObjetDataAdapter = New SqlDataAdapter(ObjetCommand)
     
            'initialiser l'objet Command
     
            ObjetCommand.Connection() = ObjetConnection
     
            'Avec l'aide de la propriété Fill du DataAdapter charger le DataSet
     
            ObjetDataAdapter.Fill(ObjetDataSet, "hlppairs")
     
            'Mettre dans un Objet DataTable une table du DataSet
     
            ObjetDataTable = ObjetDataSet.Tables("hlppairs")
     
            Dim matable As New DataTable
            matable = ObjetDataSet.Tables("hlppairs")
            DataGridView1.DataSource = matable
     
     
            If RowNumber < 0 Then Exit Sub
     
            'Lors de l'ouverture de la BD, s'il n'y a aucun enregistrement
     
            'If RowNumber > ObjetDataTable.Rows.Count - 1 Then Exit Sub
     
            ' ObjetTable.Rows(Numéro de lignes).Item( Nom de colonne) donne le contenu d'un champ dans une ligne donnée
     
            Do While RowNumber = 0 < ObjetDataTable.Rows.Count - 1
                If ObjetDataTable.Rows(RowNumber).Item("utilise").ToString = 1 Then
     
                    MessageBox.Show(ObjetDataTable.Rows(RowNumber).Item("utilise").ToString)
                    ObjetDataRow = ObjetDataSet.Tables("hlppairs").Rows(RowNumber)
                    ObjetDataRow("utilise") = 2
     
                    RowNumber += 1
                    ObjetDataRow = ObjetDataSet.Tables("hlppairs").Rows(RowNumber)
                    ObjetDataRow("utilise") = 1
                    Exit Do
                End If
     
            Loop
     
            'Pour modifier les valeurs changées dans le DataAdapter
            ObjetCommandBuilder = New SqlCommandBuilder(ObjetDataAdapter)
            'Mise à jour
     
            ObjetDataAdapter.Update(ObjetDataSet, "hlppairs")
     
     
            'On vide le DataSet et on le 'recharge' de nouveau.
     
            ObjetDataSet.Clear()
     
            ObjetDataAdapter.Fill(ObjetDataSet, "hlppairs")
     
            ObjetDataTable = ObjetDataSet.Tables("hlppairs")
     
     
            'Fermer
     
            'Objet connectée
     
            ObjetConnection = Nothing
     
            ObjetCommand = Nothing
     
            ObjetDataAdapter = Nothing
     
            'Objet déconnectée 
     
            ObjetDataSet = Nothing
     
            ObjetDataTable = Nothing
     
            ObjetDataRow = Nothing
     
        End Sub

    qu'en penses tu et as tu une idée pour gérer la dernière ligne ?

    eric

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 73
    Par défaut
    Je corrige une erreur au niveau de la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    For RowNumber = 0 To ObjetDataTable.Rows.Count - 1
                If ObjetDataTable.Rows(RowNumber).Item("utilise").ToString = 1 Then
     
                    MessageBox.Show(ObjetDataTable.Rows(RowNumber).Item("utilise").ToString)
                    ObjetDataRow = ObjetDataSet.Tables("hlppairs").Rows(RowNumber)
                    ObjetDataRow("utilise") = 2
     
                    RowNumber += 1
                    ObjetDataRow = ObjetDataSet.Tables("hlppairs").Rows(RowNumber)
                    ObjetDataRow("utilise") = 1
                    Exit For
                End If
     
                       Next

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 73
    Par défaut
    Bon ce code semble fonctionner, sauf une erreur:

    Si je clic 2 fois de suite sur le bouton :

    L'exceptionArgumentNullException n'a pas été gérée à la ligne :

    ObjetDataAdapter.Fill(ObjetDataSet, "hlppairs")

    ça veut dire quoi ?

    voici 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
    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
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
     
            'Ouverture
     
            'Initialisation de la chaîne de paramètres pour la connexion
     
            strConn = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\eric\Mes documents\Visual Studio 2005\Projects\numsdm\numsdm\Database1.mdf;Integrated Security=True;User Instance=True"
     
            'Initialisation de la chaîne contenant l'instruction SQL
     
            strSql = "SELECT * FROM hlppairs "
     
            'Instanciation d'un Objet Connexion
     
            ObjetConnection = New SqlConnection()
     
            'Donner à la propriété ConnectionString les paramètres de connexion
     
            ObjetConnection.ConnectionString = strConn
     
            'Ouvrir la connexion
     
            ObjetConnection.Open()
     
            'Instancier un objet Commande
     
            ObjetCommand = New SqlCommand(strSql)
     
            'Instancier un objet Adapter
     
            ObjetDataAdapter = New SqlDataAdapter(ObjetCommand)
     
            'initialiser l'objet Command
     
            ObjetCommand.Connection() = ObjetConnection
     
            'Avec l'aide de la propriété Fill du DataAdapter charger le DataSet
     
            ObjetDataAdapter.Fill(ObjetDataSet, "hlppairs")
     
            'Mettre dans un Objet DataTable une table du DataSet
     
            ObjetDataTable = ObjetDataSet.Tables("hlppairs")
     
            Dim matable As New DataTable
            matable = ObjetDataSet.Tables("hlppairs")
            DataGridView1.DataSource = matable
     
     
            If RowNumber < 0 Then Exit Sub
     
            'Lors de l'ouverture de la BD, s'il n'y a aucun enregistrement
     
            'If RowNumber > ObjetDataTable.Rows.Count - 1 Then Exit Sub
     
            ' ObjetTable.Rows(Numéro de lignes).Item( Nom de colonne) donne le contenu d'un champ dans une ligne donnée
     
            For RowNumber = 0 To ObjetDataTable.Rows.Count - 1
                If ObjetDataTable.Rows(RowNumber).Item("utilise").ToString = 1 And RowNumber = ObjetDataTable.Rows.Count - 1 Then
                    ObjetDataRow = ObjetDataSet.Tables("hlppairs").Rows(RowNumber)
                    ObjetDataRow("utilise") = 2
                    RowNumber = 0
                    ObjetDataRow = ObjetDataSet.Tables("hlppairs").Rows(RowNumber)
                    ObjetDataRow("utilise") = 1
                    Exit For
                End If
     
                If ObjetDataTable.Rows(RowNumber).Item("utilise").ToString = 1 Then
                    MessageBox.Show(ObjetDataTable.Rows(RowNumber).Item("utilise").ToString)
                    ObjetDataRow = ObjetDataSet.Tables("hlppairs").Rows(RowNumber)
                    ObjetDataRow("utilise") = 2
     
                    RowNumber += 1
                    ObjetDataRow = ObjetDataSet.Tables("hlppairs").Rows(RowNumber)
                    ObjetDataRow("utilise") = 1
                    Exit For
                End If
     
     
     
     
                'End If
                ' Extraire l'enregistrement courant
                'ObjetDataRow = ObjetDataSet.Tables("hlppairs").Rows(RowNumber)
                'Modifier les valeurs des champs en  récupérant le contenu des TextBox
                'ObjetDataRow("utilise") = "N"
            Next
     
            'Pour modifier les valeurs changées dans le DataAdapter
            ObjetCommandBuilder = New SqlCommandBuilder(ObjetDataAdapter)
            'Mise à jour
     
            ObjetDataAdapter.Update(ObjetDataSet, "hlppairs")
     
     
            'On vide le DataSet et on le 'recharge' de nouveau.
     
            ObjetDataSet.Clear()
     
            ObjetDataAdapter.Fill(ObjetDataSet, "hlppairs")
     
            ObjetDataTable = ObjetDataSet.Tables("hlppairs")
     
     
            'Fermer
     
            'Objet connectée
     
            ObjetConnection = Nothing
     
            ObjetCommand = Nothing
     
            ObjetDataAdapter = Nothing
     
            'Objet déconnectée 
     
            ObjetDataSet = Nothing
     
            ObjetDataTable = Nothing
     
            ObjetDataRow = Nothing
     
        End Sub

    merci de votre aide

  6. #6
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 182
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 182
    Par défaut
    Bonjour.

    A la volée, ça doit être le ObjetDataSet = Nothing qui cause cela.

    A noter, que les autres ...=nothing vont surement te créer des surprises.

    Essayes déjà sans, le ObjetDataSet = Nothing et avant le fill, met un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjetDataSet = new Dataset
    Cdt.

Discussions similaires

  1. [vb.net]Modifier une ligne d'un fichier texte
    Par Ykaar dans le forum VB.NET
    Réponses: 5
    Dernier message: 27/11/2008, 17h00
  2. [D7] comment ne pas modifier des lignes d'1 TStringGrid
    Par raoulmania dans le forum Composants VCL
    Réponses: 5
    Dernier message: 15/12/2005, 07h28
  3. Réponses: 2
    Dernier message: 10/05/2005, 18h15
  4. Modifier une ligne d'un fichier
    Par jula dans le forum Linux
    Réponses: 4
    Dernier message: 08/04/2005, 17h24
  5. Comment faire pour modifier une ligne dans une DBGrid?
    Par Nico62 dans le forum C++Builder
    Réponses: 6
    Dernier message: 29/03/2005, 12h24

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