|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
ENREGISTRER UNE NOUVELLE SAISIE DANS UN COMBOBOX.
Information sur la source
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
- 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
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.
Historique
- 27 août 2006 20:05:32 :
- Aucune j'ai fermé mon navigateur trop vite... Le balo ! ;-)
- 27 août 2006 21:44:08 :
- La première version ne comportait qu'une seule table avec qu'une liste. J'ai ajouté deux autres tables avec les listes qui vont avec.
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
items des comboBox sous VBA [ par pearl ]
j'ai initialisé mon form en ajoutant une liste d'item à mon combo.N'ayant pas la liste complete de tous les items, je voudrais que quand l'utilisateur
Combo Box [ par riton ]
Tout le monde connaît le contrôle COMBOBOX !!!Pour faire défiler la liste on utilise la souris ou la touche F4. Mais si on veut faire défiler la liste
Important:Liste deroulante dans un Combobox [ par banton_two ]
Messieurs, je vous prie d'accepter mes excuses pour ce petit derangement mais je voudrais savoir si vous vous y connaissez bien an VBA et si vous seri
aidez-moi! trier des données dans une liste [ par sony22 ]
A partir d'un ou plusieurs chiffres tapées dans un textbox(départements)trier dans une colonne les données correspondantes et afficher dans un combobo
Rien dans la liste de la Combobox [ par Nico ]
N'y arrivant pas avec une Datacombo, j'essaie maintenant avec une Combobox mais j'obtiens ce message: Variable objet non définie... Kess'ki manque ? L
data et combobox,forcer le positionnemnt d'un data [ par skaferadics ]
comment faire pour forcer le placment d'un data?c'est a dire le faire aller sur l'enregistrement 5 par exemple!en fait j'ai une combobox avec une list
ComboBox modifiable [ par Patrik ]
Salut,Je suis à la recherche du code source me permettant De gérer le contrôle ComboBox ayant une liste (propiété List ; ou résultat d'une requête SQL
Liste de choix [ par filou ]
Salut le forum,Je veux faire une petite liste de selection non modifiable par l'utilisateur (saisie d'informations) J'ai essayé avec une combobox ! Av
mettre un combobox avec une liste de fichiers [ par chico79 ]
Bonjour,comment on fais si on veut créer un combobox avec la liste des fichiers qu'on a dans un répertoire qu'on précise auparavntexemple :un combobox
Fichier->Tableau->ComboBox [ par iubito ]
Bonjour @ tous !Voilà g 1 truc à faire que je sais bien faire en Access (base de données+formulaire+VBA) mais pas en VB pur.J'ai dans un fichier .txt
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version

HTC Touch HD
Entre 25€ et 605€
|