Sauvegarde Base de donnée Access et DataGridView

Tourmalin - 19 juin 2013 à 09:40
 Tourmalin - 24 juin 2013 à 14:50
Bonjour à tous,

Après avoir passé quelques jours à tenter de résoudre mon problème, la lecture de quelques tutoriel et de nombreux messages d'erreurs sur des forums, je n'ai pas réussi à trouver de solution, et je suis au point mort.

Voici en quelques mots ce que j'essaye de faire. Je réalise une application qui doit me permettre de programmer une microcontrôleur via un port série, et compléter une base de donnée Access afin de récupérer les différentes configuration rapidement.
Pour cela, j'ai donc mis en place une DataGridView pour visualiser les 4 première colonnes de ma base, et je cherche à ajouter d'autres colonnes, via un DataSet.
Mon DataSet se complète bien (je ne peux pas ajouter deux colonnes avec le même nom), mais impossible de compléter ma base de donnée.
De plus, lors de l'ajout de ma colonne, je perds la mise en place de mes DataGridViewComboBoxCell dans ma colonne qui me sert de configuration pour l'écriture des données.

Voici mon code, ou du moins une partie, avec la déclaration des du DataGridView générée par Visual Basic 2012, et le code pour la sauvegarde dans la base de données, le tout en VB.NET :

        'DataGridView1
        '
        Me.DataGridView1.AllowUserToAddRows = False
        Me.DataGridView1.AllowUserToDeleteRows = False
        Me.DataGridView1.AllowUserToResizeColumns = False
        Me.DataGridView1.AllowUserToResizeRows = False
        DataGridViewCellStyle1.BackColor = System.Drawing.Color.Yellow
        DataGridViewCellStyle1.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        DataGridViewCellStyle1.ForeColor = System.Drawing.Color.Black
        DataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.YellowGreen
        DataGridViewCellStyle1.SelectionForeColor = System.Drawing.Color.Red
        Me.DataGridView1.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle1
        Me.DataGridView1.AutoGenerateColumns = False
        Me.DataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.[Single]
        DataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
        DataGridViewCellStyle2.BackColor = System.Drawing.Color.PowderBlue
        DataGridViewCellStyle2.Font = New System.Drawing.Font("Arial", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        DataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText
        DataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight
        DataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText
        DataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.[True]
        Me.DataGridView1.ColumnHeadersDefaultCellStyle = DataGridViewCellStyle2
        Me.DataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
        Me.DataGridView1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.Column1, Me.Column2, Me.Column3, Me.Column4})
        Me.DataGridView1.DataSource = Me.TableSocialeBindingSource
        DataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
        DataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Window
        DataGridViewCellStyle7.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        DataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.ControlText
        DataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight
        DataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText
        DataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.[False]
        Me.DataGridView1.DefaultCellStyle = DataGridViewCellStyle7
        Me.DataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter
        Me.DataGridView1.GridColor = System.Drawing.Color.Red
        Me.DataGridView1.ImeMode = System.Windows.Forms.ImeMode.NoControl
        Me.DataGridView1.Location = New System.Drawing.Point(29, 53)
        Me.DataGridView1.Name = "DataGridView1"
        Me.DataGridView1.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.[Single]
        Me.DataGridView1.RowHeadersVisible = False
        Me.DataGridView1.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing
        Me.DataGridView1.RowTemplate.Height = 20
        Me.DataGridView1.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.[False]
        Me.DataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect
        Me.DataGridView1.Size = New System.Drawing.Size(1253, 625)
        Me.DataGridView1.TabIndex = 19
        '
        'SocialeDataSet
        '
        Me.SocialeDataSet.DataSetName = "SocialeDataSet"
        Me.SocialeDataSet.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema
        '
        'TableSocialeBindingSource
        '
        Me.TableSocialeBindingSource.DataMember = "TableSociale"
        Me.TableSocialeBindingSource.DataSource = Me.SocialeDataSet
        '
        'TableSocialeTableAdapter
        '
        Me.TableSocialeTableAdapter.ClearBeforeFill = True
        '
        'Column1
        '
        Me.Column1.DataPropertyName = "N°"
        DataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
        DataGridViewCellStyle3.Format = "N0"
        DataGridViewCellStyle3.NullValue = Nothing
        Me.Column1.DefaultCellStyle = DataGridViewCellStyle3
        Me.Column1.Frozen = True
        Me.Column1.HeaderText = "N°"
        Me.Column1.MaxInputLength = 2
        Me.Column1.Name = "Column1"
        Me.Column1.ReadOnly = True
        Me.Column1.Resizable = System.Windows.Forms.DataGridViewTriState.[False]
        Me.Column1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable
        Me.Column1.Width = 50
        '
        'Column2
        '
        Me.Column2.DataPropertyName = "Paramètres"
        DataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
        Me.Column2.DefaultCellStyle = DataGridViewCellStyle4
        Me.Column2.HeaderText = "Paramètres"
        Me.Column2.MaxInputLength = 100
        Me.Column2.Name = "Column2"
        Me.Column2.ReadOnly = True
        Me.Column2.Resizable = System.Windows.Forms.DataGridViewTriState.[False]
        Me.Column2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable
        Me.Column2.Width = 500
        '
        'Column3
        '
        Me.Column3.DataPropertyName = "Lecture"
        DataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
        Me.Column3.DefaultCellStyle = DataGridViewCellStyle5
        Me.Column3.HeaderText = "Lecture"
        Me.Column3.MaxInputLength = 100
        Me.Column3.Name = "Column3"
        Me.Column3.ReadOnly = True
        Me.Column3.Resizable = System.Windows.Forms.DataGridViewTriState.[False]
        Me.Column3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable
        Me.Column3.Width = 350
        '
        'Column4
        '
        Me.Column4.DataPropertyName = "Ecriture"
        DataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
        Me.Column4.DefaultCellStyle = DataGridViewCellStyle6
        Me.Column4.HeaderText = "Ecriture"
        Me.Column4.MaxInputLength = 100
        Me.Column4.Name = "Column4"
        Me.Column4.Resizable = System.Windows.Forms.DataGridViewTriState.[False]
        Me.Column4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable
        Me.Column4.Width = 350
        '

    Dim Index1 As New DataGridViewComboBoxCell()
    Dim Index2 As New DataGridViewComboBoxCell()
    Dim Index3 As New DataGridViewComboBoxCell()
    Dim Index5 As New DataGridViewComboBoxCell()
    Dim Index9 As New DataGridViewComboBoxCell()
    Dim Index10 As New DataGridViewComboBoxCell()
    Dim Index11 As New DataGridViewComboBoxCell()
    Dim Index13 As New DataGridViewComboBoxCell()
    Dim Index25 As New DataGridViewComboBoxCell()

    Dim connectionString As String "Provider Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|\Sociale.mdb; Persist Security Info = False;"
    Dim sql As String = "SELECT * FROM TableSociale" '* pour sélectionner toute la table
    Dim connection As New OleDbConnection(connectionString)
    Dim dataadapter As New OleDbDataAdapter(sql, connection)
    Dim i As Byte
    Dim dsNewChamp As DataColumn
    Dim myRow As DataRow
    Dim Client As String
    Dim ComBuilder As OleDbCommandBuilder

    'Dim ds As New DataSet("TableSociale")
    'Dim TableSociale As DataTable = New DataTable("TableSociale")

Private Sub Sociale_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TableAdapter.Fill(SocialeDataSet.TableSociale)

        'connection.Open()
        'dataadapter.Fill(SocialeDataSet, "TableSociale")
        'connection.Close()

        'DataGridView1.DataSource = SocialeDataSet
        'DataGridView1.DataMember = "TableSociale"

        Index1.Items.AddRange("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
        DataGridView1.Item(3, 0) = Index1

        Index2.Items.Add("RTC")
        Index2.Items.Add("GSM")
        Index2.Items.Add("RTC principal / GSM secours")
        DataGridView1.Item(3, 1) = Index2

        Index3.Items.AddRange("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
        DataGridView1.Item(3, 2) = Index3

        Index5.Items.Add("Télésurveilleur")
        Index5.Items.Add("Vocal")
        DataGridView1.Item(3, 4) = Index5

        Index9.Items.Add("STRATEL")
        Index9.Items.Add("Contact ID")
        DataGridView1.Item(3, 8) = Index9

        Index10.Items.Add("Validée")
        Index10.Items.Add("Inhibée")
        DataGridView1.Item(3, 9) = Index10

        Index11.Items.AddRange("10", "45", "60", "90", "120", "Inhibé")
        DataGridView1.Item(3, 10) = Index11

        Index13.Items.AddRange("5h", "12h", "24h", "48h", "1 semaine")
        DataGridView1.Item(3, 12) = Index13

        Index25.Items.AddRange("1", "2", "3", "4", "5", "6", "7", "8", "9")
        DataGridView1.Item(3, 24) = Index25

    End Sub

Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing

Private Sub txtEdition_KeyPress(ByVal sender As Object, ByVal e As 

Private Sub Parametrage_Click(sender As Object, e As EventArgs) Handles Parametrage.Click

Private Sub Upload_Click(sender As Object, e As EventArgs) Handles Upload.Click

Private Sub Download_Click(sender As Object, e As EventArgs) Handles Download.Click

Function CalculCrcSum(CRC As Byte, Val As Byte) As Integer

Private Sub Transfert_Click(sender As Object, e As EventArgs) Handles Transfert.Click

Private Sub Save_Click(sender As Object, e As EventArgs) Handles Save.Click

Private Sub Base_Click(sender As Object, e As EventArgs) Handles Base.Click

        Client = InputBox("Nom du nouveau client :" & vbCrLf, "Ajout d'une nouvelle sauvegarde")
        ' Créer un nouveau DataColumn, lui donner un DataType, un nom, divers valeurs pour ses propriétés  
        'et l'ajouter à la DataTable.
        dsNewChamp = New DataColumn()
        dsNewChamp.DefaultValue = False
        dsNewChamp.DataType = System.Type.GetType("System.String")  'Type de la colonne
        'dsNewChamp = SocialeDataSet.TableSociale.Columns("Ecriture")
        dsNewChamp.ColumnName = Client                              'Nom de la colonne
        dsNewChamp.ReadOnly = False                                 'Colonne ReadOnly
        dsNewChamp.Unique = False                                   'Evite les doublons 
        dsNewChamp.AutoIncrement = False
        dsNewChamp.AllowDBNull = True

        Try
            SocialeDataSet.TableSociale.Columns.Add(dsNewChamp)
            'MsgBox("Client ajouté avec succès", MsgBoxStyle.Information, "Ajout")
        Catch ex As DuplicateNameException
            MessageBox.Show("Nom déjà utilisé.")
            Exit Sub
        End Try

        For i = 0 To 24
            myRow = SocialeDataSet.TableSociale.Rows(i)
            myRow(Client) = SocialeDataSet.TableSociale.Item(i).Ecriture
        Next

        SocialeDataSet.TableSociale.AcceptChanges()
        TableAdapter.Update(SocialeDataSet.TableSociale)

        'ComBuilder = New OleDbCommandBuilder(dataadapter)
        'dataadapter.UpdateCommand = ComBuilder.GetUpdateCommand()
        'dataadapter.Update(SocialeDataSet.TableSociale)

        'Try
        '    TableSocialeTableAdapter.Fill(SocialeDataSet.TableSociale)
        'Catch ez As Data.ConstraintException
        '    Dim strWriter As StreamWriter = ...\ExtractErr.log")
        '    Dim v_errorRows As DataRow() = SocialeDataSet.TableSociale.GetErrors
        '    For Each v_row As DataRow In v_errorRows
        '        strWriter.WriteLine(v_row.RowError)
        '    Next
        '    strWriter.Flush()
        '    strWriter.Close()
        'End Try

        'Dim cmd As New OleDbCommand
        'Dim ssql As String = "INSERT INTO Client FROM TableSociale VALUES (Ecriture FROM TableSociale)"
        'cmd.CommandType = CommandType.Text
        'cmd.CommandText = ssql
        'cmd.Connection = connection
        'cmd.ExecuteNonQuery()

    End Sub

End Class


Une idée sur la disparition de mes DataGridViewComboBoxCell ?
Comment mettre à jour ma base de données après l'ajout de ma colonne ?

En vous remerciant de l'aide que vous pourriez m'apporter.

PS : en espérant ne pas m'être trompé de forum ce coup ci...

1 réponse

Petit up pour mon soucis.

Si quelqu'un a une idée, ou une piste à me donner, je suis toujours en recherche sur mon problème.

De même, si mon message n'est pas assez clair ou pas assez complet, n'hésitez pas à me le dire afin que je complète.

Merci !
0
Rejoignez-nous