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.
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.