Gestion des bases de données sous VB

lamharchi58 Messages postés 4 Statut Membre -  
Kalissi Messages postés 221 Statut Membre -
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

2 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    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
    1. lamharchi58 Messages postés 4 Statut Membre
       
      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
      1. lamharchi58 Messages postés 4 Statut Membre > lamharchi58 Messages postés 4 Statut Membre
         
        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
      2. Utilisateur anonyme > lamharchi58 Messages postés 4 Statut Membre
         
        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
  2. Kalissi Messages postés 221 Statut Membre 20
     
    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