Bonjour, svp svp je veux savoir un code qui permet d'ajouter ,supprimer,modifer et afficher les données d'un combobox (je travaille avec une base de données access),merci pour votre collaboration
mon probleme c'est que le resultat affiché dans le combo est en double , voici le code ainsi le formulaire:
Imports System.Data.OleDb
Public Class Form1 'global declaration
Dim conString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\houssem\Desktop\notice\soccerDB.mdb;" Dim con As OleDb.OleDbConnection = New OleDb.OleDbConnection(conString) Dim adapter As OleDb.OleDbDataAdapter Dim cmd As OleDb.OleDbCommand Dim dt As DataTable = New DataTable() Private Sub populate(ByVal name As String) 'sql stmt Dim sql As String = "INSERT INTO soccerTB(P_NAME) VALUES (@NAMES)" cmd = New OleDb.OleDbCommand(sql, con) 'add parameters cmd.Parameters.AddWithValue("@NAMES", name) 'open connection and insert Try con.Open() 'execute statement If cmd.ExecuteNonQuery() > 0 Then MsgBox("successfully entred data") End If 'clear text nameTxt.Text = "" con.Close() 'Retreive() Catch ex As Exception MsgBox(ex.Message) con.Close() End Try End Sub Private Sub addBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles addBtn.Click 'populate() populate(nameTxt.Text) End Sub 'retreive from db.
Private Sub Update(ByVal value As String, ByVal name As String) Dim sql As String = "UPDATE soccerTB SET P_NAME='" + value + "'WHERE P_NAME='" + name + "'" cmd = New OleDb.OleDbCommand 'execute Try con.Open() adapter.UpdateCommand = con.CreateCommand() adapter.UpdateCommand.CommandText = sql If adapter.UpdateCommand.ExecuteNonQuery() > 0 Then MsgBox("successfuly updated") End If con.Close() Catch ex As Exception MsgBox(ex.Message) con.Close() ' Retreive() End Try End Sub
Private Sub updateBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles updateBtn.Click Update(nameTxt.Text, ComboBox1.SelectedItem) End Sub
Public Sub delete(ByVal name As String) Dim sql As String = "DELETE FROM soccerTB WHERE P_NAME='" + name + "'" cmd = New OleDb.OleDbCommand(sql, con) 'execute Try con.Open() adapter.DeleteCommand = con.CreateCommand() adapter.DeleteCommand.CommandText = sql If MessageBox.Show("etes vous sur ?", "DELETE", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) = DialogResult.OK Then If (adapter.DeleteCommand.ExecuteNonQuery > 0) Then nameTxt.Text = "" MsgBox("successfully Deleted") End If End If 'close connection con.Close() ' Retreive() Catch ex As Exception MsgBox(ex.Message) con.Close() End Try End Sub Private Sub deleteBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles deleteBtn.Click delete(ComboBox1.SelectedItem) End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load con.Open() Dim cm As New OleDbCommand("SELECT * FROM soccerTB", con) Dim dr As OleDbDataReader = cm.ExecuteReader While dr.Read ComboBox1.Items.Add(dr(1).ToString) End While dr.Close() con.Close() End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged nameTxt.Text = ComboBox1.SelectedItem End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sortirBtn.Click Me.Close() End Sub
Quand tu mets du code, pourrais tu utiliser les balises fait pour ? Ce serais plus simple à lire
N'ayant pas le contenu de la base de donnée, et je comprend cela peut être "confidentielle", je ne sais pas avancer plus loins, il me manque des informations dans le projet que j'ai créer et la base de donnée.
S'il y a un/des doublons dans la combobox, tu peux toujours utiliser cette p'tite fonction qui fait le taff :
Private Sub SupprDoublon(ByVal ctrl As ComboBox)
For i = ctrl.Items.Count - 1 To 0 Step -1
For a = ctrl.Items.Count - 1 To i + 1 Step -1
If ctrl.Items(i) = ctrl.Items(a) Then
ctrl.Items.RemoveAt(a)
Exit For
End If
Next a
Next i
End Sub
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Merci beaucoup Monsieur vanaur, le formulaire fonctionne bien, il reste maintenant une seule chose c'est de faire un controle qui ne laisse pas l'utilisateur d'ajouter un nouveau nom s'il existe dans le combobox en affichant un msgbox
a props de base de donnée je travaille avec access voici une capture ecran de la table sur laquel en travail:
c'est de faire un controle qui ne laisse pas l'utilisateur d'ajouter un nouveau nom s'il existe dans le combobox en affichant un msgbox
Et bien pur ce faire, une simple condition suffit, lors de l'ajout en appuyant sur le bouton add j'imagine, tu peux t'inspirer de la fonction que je t'ais donné au dessus pour détecter si plusieurs fois un même texte apparaît, et si c'est le cas : MsgBox et ExitSub
- Edité par vanaur 19 août 2017 à 13:32:26
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Ha... C'est ce que je craignais. En supprimant les doublons, l'applications à dût "couper" une liaison avec l'item de la BDD, ou c'est que ce que tu tentes de supprimer, à déjà été supprimer, et donc n'existe plus et l'application ne peut donc pas le...supprimer. Mais bon, comme je l'ai déjà dis, je ne peut pas affirmer ça, car je ne m'y connais pas assez en gestion de base de donné en VB.net .
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Vous devez implémenter les vérifications là où elles ont un sens.
Saut erreur de ma part, le fait de vérifier si "P_NAME" existe est la mauvaise formulation de la vraie contrainte : "Que chaque enregistrement de la table "soccerTB" doit avoir un "P_NAME" unique.
Il s'agit donc d'une problématique de cohérence des données, donc dans la couche données, et cela n'a rien à faire directement dans la couche d'IHM.
Il est trivial d'ajouter la contrainte d'unicité sur une colonne d'une table.
Une fois la cohérence des données assurées, en utilisant les outils de scaleffolding (génération automatique de code, comme Entity Framework par exemple) ces contraintes seront propagées pour facilité la mise au point des couches métiers et graphiques associées.
Si vous avez pas trop foiré l'utilisation des outils, les DataTable associés auront des contraintes correctement configurées.
Après, si vous galérez à utiliser les outils de scaleffoldin, vous pouvez toujours mettre en place les contraintes vous même.
Vous avez déjà le bon reflexe d'utiliser des DataAdapters, mais vous vous en servez très très mal.
Utilisez les systématiquement avec des DataSet/DataTable au lieu de vous en servir comme des DataReader complètement obsolètes.
La DataTable fera la vérification automatiquement dés la tentative d'insertion et vous n'aurez plus qu'à ajouter le feedback visuel correspondant lors que le DataTable vous enverra bouler.
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
le problème est résolu, il s'agit de contrainte d'unicité, un grand merci pour vanaur et bacelar qui m'ont aidé a résoudre les prolèmes lors de la realisation de mon application
il me reste que la dernière partie c'est d'ecrire un code vb.net qui me permet d'envoyer un e-mail vers plusieurs destinataires (les conatctes sont enregistrés dans ma base access), merci de m'aider a finir cette partie
/*Pour ce faire, une simple boucle suffit, a laquelle pour chaque itération, tu envois à un contacte.*/Regarde la documentation, tout y est.
- Edité par vanaur 22 août 2017 à 2:13:22
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
combobox vb.net
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...