Gestion des bases de données sous VB

Fermé
lamharchi58 Messages postés 4 Date d'inscription vendredi 24 février 2017 Statut Membre Dernière intervention 7 mai 2017 - 27 avril 2017 à 09:42
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 - 8 mai 2017 à 17:24
Bonjour,
je n'arrive pas à créer un formulaire qui permet la saisie et la modification dans une base de données sous VB Express
A voir également:

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
27 avril 2017 à 10:16
Bonjour,

Donc ta question concerne le VB.NET et non les bases de données à proprement parler non ?
=> Je déplace donc dans le forum VB

Et puis....
Qu'as tu commencé à coder ?
Quelle SGBD utilises-tu ?
0
lamharchi58 Messages postés 4 Date d'inscription vendredi 24 février 2017 Statut Membre Dernière intervention 7 mai 2017
Modifié le 4 mai 2017 à 21:03
Bonjour
J'ai créer un formulaire sous VB Express 2012, je lui ai associé une base de données ACCESS.
J'ai utilisé l'objet BindingSource pour naviguer, pour insérer un nouvel enregistrement et pour en supprimer. Mon problème c'est que rien ne s'effectue réellemlent sur la base de données.
Ci joint le code que j'ai réalisé :
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        VBBASE3DataSet.Clear()
        ProduitsTableAdapter.Fill(VBBASE3DataSet.Produits)
    End Sub

    Private Sub Pred_Click(sender As Object, e As EventArgs) Handles Pred.Click
        ProduitsBindingSource.MovePrevious()
    End Sub

    Private Sub Suiv_Click(sender As Object, e As EventArgs) Handles Suiv.Click
        ProduitsBindingSource.MoveNext()
    End Sub

    Private Sub Prem_Click(sender As Object, e As EventArgs) Handles Prem.Click
        ProduitsBindingSource.MoveFirst()
    End Sub

    Private Sub Dern_Click(sender As Object, e As EventArgs) Handles Dern.Click
        ProduitsBindingSource.MoveLast()
    End Sub

    Private Sub Suppr_Click(sender As Object, e As EventArgs) Handles Suppr.Click
        ProduitsBindingSource.RemoveCurrent()
    End Sub

    Private Sub Inserer_Click(sender As Object, e As EventArgs) Handles Inserer.Click
        ProduitsBindingSource.AddNew()
    End Sub

    Private Sub Enregistrer_Click(sender As Object, e As EventArgs) Handles Enregistrer.Click
        ProduitsBindingSource.EndEdit()
    End Sub

End Class


EDIT : Ajout des balises de code
0
lamharchi58 Messages postés 4 Date d'inscription vendredi 24 février 2017 Statut Membre Dernière intervention 7 mai 2017 > lamharchi58 Messages postés 4 Date d'inscription vendredi 24 février 2017 Statut Membre Dernière intervention 7 mai 2017
7 mai 2017 à 14:35
Bonjour
Veuillez m'excuser, je n'ai pas compris ce que vous m'avez écrit "EDIT : Ajout des balises de code"
Merci de votre collaboration
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 931 > lamharchi58 Messages postés 4 Date d'inscription vendredi 24 février 2017 Statut Membre Dernière intervention 7 mai 2017
7 mai 2017 à 20:02
Bonjour, ça veut dire que Jordane a modifié ton message pour rendre ton code lisible avec les balises de coloration syntaxique, voir la procédure ici.


Pour ton problème, l'objet bindingsource travaille en mémoire haute, il faut donc (à chaque modification ou au bout d'un temps défini) écrire son contenu dans la base de données.

Comme les bdd ce n'est pas mon fort, je ne te propose pas de code, mais il y a des exemples
0
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
Modifié le 8 mai 2017 à 17:26
Bonjour,

Je te conseille d'ajouter une classe dans ton projet pour l'accès à la BD.


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
VBBASE3DataSet.Clear()
ProduitsTableAdapter.Fill(VBBASE3DataSet.Produits)
End Sub


Accéder directement à la BD dans la même classe que la couche de présentation est une pratique plus ou moins bien structuré.

En te référence à Google, tu trouveras facilement les modèles
organique standard du trois couches.

Une couche de présentation (Form)
Une couche d'accès au donnée (UAD ou CDA)
Une couche BD.

En somme :
Une couche Présentation (classe) (ton form)
Une couche d'accès au données (classe UAD)
Une couche données (ta BD).

Tu crée une classe d'objet fortement typé.

Exemple :

Public Class ENTITE_AUTO

#Region "--- Attributs ---"

Private zAnnee As Long = 0
Private zMarque As String = String.Empty
Private zModele As String = String.Empty

#End Region

#Region "--- Propriétés ---"

Public Property Annee As Long
Get
Return Me.zAnnee
End Get
Set(value As Long)
Me.zAnnee = value
End Set
End Property

Public Property Marque As String
Get
Return Me.zMarque
End Get
Set(value As String)
Me.zMarque = value
End Set
End Property

Public Property Modele As String
Get
Return Me.zModele
End Get
Set(value As String)
Me.zModele = value
End Set
End Property

#End Region

#Region "--- Constructeur ---"

Public Sub New()

End Sub

#End Region

End Class


Dans cet objet, tu peux ajouter des membres booléen du style,
EstModifier
EstNouveau
EstSupprimer
cela te facilitera la gestion de mise à jour ...

Une classe qui te remplie une liste fortement typé (UAD)


Public Class UAD ' Unité d'accès aux données

Public Function ObtenirListe() As IList(Of ENTITE_AUTO)

Dim reqSQL As String = "SELECT * FROM MaTable"
Dim MaCollection As Ilist(Of ENTITE_AUTO)
MaCollection = New list(Of ENTITE_AUTO)
Dim MonEntite As ENTITE_AUTO

MonAdapteur = New OleDbDataAdapter(reqSQL, Connexion)
MonAdapteur.Fill(MonDataSet, "MaTable")
MonDataTable = MonDataSet.Tables("MaTable")

For Each DataRowLocal In MonDataTable.Rows
MonEntite = New ENTITEAUTO
MonEntite = CreerInstance(DataRowLocal)
MaCollection.Add(MonEntite)
Next

Return MaCollection

End Function

Private Function CreerInstance(ByVal Ligne As DataRow) As ENTITE_AUTO

Dim MonObJet As New ENTITE_AUTO

If (Ligne.Item("Annee") IsNot Nothing) Then
MonObjet.Annee = Convert.ToInt64((Ligne.Item("Annee").ToString))
End If

' ... les autres champs

End Function

End Class


À ce stade, dans la classe de ton form, tu récupère la liste fortement
typé.


Dim Liste As IList(Of ENTITE_AUTO) = UAD.ObtenirListe()

ProduitsBindingSource.DataSource = Liste


Ensuite, tu construit une méthode pour enregistrer ta liste.


Liste = UAD.Sauvegarger(Liste)


Bon, ça peut te paraitre compliqué, je ne connais pas ton niveau.
Mais je peux te dire qu'une fois la mécanique en place, c'est à toute
épreuve.

Si tu veux un exemple plus précis, j'ai un petit projet de ce style.
https://mon-partage.fr/f/3qJu82Zf/

K
0