Enregistrer une nouvelle saisie dans un combobox.

Description

Le sub contenu dans le module1 permet d'enregistrer dans une table (ici Access) une valeur entrée dans un combobox, tout en vérifiant que celle-ci n'existe pas déjà. Vous pouvez appeler ce sub sur tous les combobox ou vous souhaitez offrir à l'utilisateur la possibilité d'enregistrer une nouvelle valeur.

L'appel
CtrlEnregSaisieCbo(ByVal ChampCtrl As ComboBox, ByVal SqlFiltre As String)

ChampCtrl = Me.NomDuCombobox
SqlFiltre = "SELECT NomDeLaTable.NomDuChampRechercheEtDAjout, NomDeLaTable.AutresChamps FROM NomDeLaTable ORDER BY NomDeLaTable.NomDuChampATrier;"

Source / Exemple :


Imports System
Imports System.Data
Imports System.Data.OleDb

Module module1

    Sub CtrlEnregSaisieCbo(ByVal ChampCtrl As ComboBox, ByVal SqlFiltre As String)

        Dim Connection As New OleDb.OleDbConnection

        Try
            If ChampCtrl.Text <> "" Then

                '' -> PARAMETRE DE CONNECTION

                ' Connection
                Connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                              "Data Source =" & Application.StartupPath & "\Source\Voiture.mdb;"

                '' -> EXTRACTION DU NOM DE LA TABLE ET DU NOM DU CHAMP DE RECHERCHE
                ' Format de SqlFiltre : SELECT NomDeLaTable.NomDuChampRecherche, NomDeLaTable.AutresChamps FROM NomDeLaTable;"

                Dim NomTable As String
                Dim NomChamp As String

                'Recherche de la position du 1er espace
                Dim PositionEspace As Integer
                PositionEspace = SqlFiltre.IndexOf(" ")
                'Recherche de la position du point
                Dim PositionPt As Integer
                PositionPt = SqlFiltre.IndexOf(".")
                'Recherche de la position de FROM
                Dim PositionVirg As Integer
                PositionVirg = SqlFiltre.IndexOf(",")

                'Extraction du nom de la table
                NomTable = SqlFiltre.Substring(PositionEspace + 1, PositionPt - PositionEspace - 1)
                'Extraction du nom du champ de la table
                NomChamp = SqlFiltre.Substring((PositionPt + 1), PositionVirg - PositionPt - 1)

                '' -> AJOUTER
                ' DataAdapter, DataSet, DataTable, DataView

                'Connection
                Connection.Open()

                ' Création du DataAdapter, DataSet, DataTable, Création du DataView avec son filtre
                Dim DtAdapter = New OleDb.OleDbDataAdapter(SqlFiltre, Connection)

                Dim DtSet As New DataSet
                DtAdapter.Fill(DtSet, NomTable)

                Dim DtTable As DataTable
                DtTable = DtSet.Tables(NomTable)

                Dim dtView As New DataView(DtTable)
                dtView.RowFilter = NomChamp & " = '" & ChampCtrl.Text.Replace("'", "''") & "'"

                ' Vérifier dans la table l'existance de la saisie de l'utilisateur 
                If dtView.Count = 0 Then

                    'Création de la messagebox
                    Dim Message As String
                    Dim Titre As String
                    Dim Bouton As MessageBoxButtons
                    Dim Icone As MessageBoxIcon
                    Dim Resultat As String

                    Message = ChampCtrl.Text & " n'est pas enregistré." & _
                              vbCr & "Voulez-vous l'enregistrer ?"
                    Titre = "Sélection incorrecte"
                    Bouton = MessageBoxButtons.YesNo
                    Icone = MessageBoxIcon.Exclamation

                    Resultat = MessageBox.Show(Message, Titre, Bouton, Icone)

                    If Resultat = vbYes Then

                        '' -> ENREGISTREMENT DE LA VALEUR SAISIE

                        Dim NewLigne As DataRow
                        ' Création de la nouvelle ligne 
                        NewLigne = DtSet.Tables(NomTable).NewRow
                        ' Remplir les champs
                        NewLigne(NomChamp) = ChampCtrl.Text
                        ' Ajout de la ligne à la table
                        DtSet.Tables(NomTable).Rows.Add(NewLigne)

                        Dim CmdBuild As OleDbCommandBuilder
                        CmdBuild = New OleDb.OleDbCommandBuilder(DtAdapter)
                        DtAdapter.InsertCommand = CmdBuild.GetInsertCommand()
                        DtAdapter.Update(DtSet, NomTable)

                        '' -> ACTUALISER LES DONNEES DE LA LISTE

                        ' Enregistrer la valeur saisie
                        Dim saisie As String
                        saisie = ChampCtrl.Text

                        ' Création du DataAdapter, DataSet
                        Dim DtAdapterActu = New OleDb.OleDbDataAdapter(SqlFiltre, Connection)

                        Dim DtSetActu As New DataSet
                        DtAdapterActu.Fill(DtSetActu, NomTable)

                        ' Remplissage de la liste
                        ChampCtrl.DisplayMember = NomChamp
                        ChampCtrl.ValueMember = "ID_" & NomChamp
                        ChampCtrl.DataSource = DtSetActu.Tables(NomTable)
                        ChampCtrl.Refresh()
                        ChampCtrl.Text = saisie

                        'CODE POUVANT ETRE SUPPRIME
                        '''''''''''''''''''''
                        Form1.txtInfos.Text = "Nom de la Table: " & NomTable & vbCrLf & _
                                              "Nom du champ: " & NomChamp & vbCrLf & _
                                              "Nom de la liste: " & ChampCtrl.Name & vbCrLf & _
                                              "Valeur de la liste: " & ChampCtrl.Text & vbCrLf & _
                                              "Index de la sélection: " & ChampCtrl.SelectedIndex & vbCrLf & _
                                              "Valeur de la sélection: " & ChampCtrl.SelectedValue

                        ''''''''''''''''''''

                    Else
                        ChampCtrl.Text = ""

                        'CODE POUVANT ETRE SUPPRIME
                        '''''''''''''''''''''
                        Form1.txtInfos.Text = ""
                        ''''''''''''''''''''

                    End If

                End If

            End If

        Catch ex As Exception
            'Message d'erreur
            MessageBox.Show(ex.ToString, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)

        Finally
            'Fermer la connection
            Connection.Close()

        End Try

    End Sub

End Module

Conclusion :


Je débute en VB, soyez indulgent :-P.... Je prend quand même les critiques, les modifis, les erreurs, et les solutions, ... bref tout ce qui fait avancer.

Merci à VbFrance, ou j'ai pu trouver des sources afin de comprendre certains fonctionnements de VB.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.