Ado.net sans douleur

Soyez le premier à donner votre avis sur cette source.

Vue 9 120 fois - Téléchargée 1 414 fois


Description

L'idée est de manipuler les BDD presque sans s'en rendre compte.

Pour chaque table de la BDD on créé une Class du même nom.
Dans chaque Class on créé des propriétés aux mêmes noms que les champs.

Pour réduire le volume du code j'ai créé une Class qu'il suffit d'hériter.

Procédure (s?inspirer de la class TAB_CONTACT) :
  • Récupérer le module OLEDB
  • Créer une class du même nom que la table à gérer et hériter la Class AccessTable
  • Créer autant de propriétés qu?il existe de champs
  • Personnaliser les procédures : InitVar, InitFields, DelSubLevels, ReadFields, UpdateFields
  • Recréer les procédures New (copier/coller depuis TAB_CONTACT)
  • Optionnel : créer de nouvelles procédures personnalisées EnumRecords


Contraintes :
  • Chaque table doit comporter une clé primaire et cette clé doit s?appeler Index
  • Ne gère pas (encore ??) les jointures

Source / Exemple :


'#Gestion de la BDD
OLEDB.DataBase.Path = "c:\...\exemple.mdb"
OLEDB.DataBase.Open()
OLEDB.DataBase.Close()

'#Lister les enregistrements
Dim MyContacts As New OLEDB.Table.TAB_CONTACT
Dim iContact As List(Of Integer) = MyContacts.EnumRecords

'#Lire un enregistrement
Dim MyContacts As New OLEDB.Table.TAB_CONTACT(index_de_l_enregistrement_a_lire)
MyContacts.Read()
Msgbox MyContacts.FirstName
Msgbox MyContacts.LastName
Msgbox MyContacts.Height

'#Supprimer un enregistrement
Dim MyContacts As New OLEDB.Table.TAB_CONTACT(index_de_l_enregistrement_a_supprimer)
MyContacts.Delete()

'#Ajouter un enregistrement
Dim MyContacts As New OLEDB.Table.TAB_CONTACT()
MyContacts.Add()
MyContacts.FirstName = "TOTO"
MyContacts.LastName = "LULU"
MyContacts.Height = "1,75"
MyContacts.Update()

'#Modifier un enregistrement
Dim MyContacts As New OLEDB.Table.TAB_CONTACT(index_de_l_enregistrement_a_modifier)
MyContacts.Edit()
MyContacts.FirstName = "TOTO"
MyContacts.LastName = "LULU"
MyContacts.Height = "1,75"
MyContacts.Update()

Conclusion :


Merci de me faire remonter vos remarques et idées d'amliorations.

J'envisage de créer une appli qui se chargera de créé automatiquement tout le code nécessaire en lisant dans une BDD.
Mais faute de temps je remet et je remet...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
28
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
9 août 2015

@PCPC et @ ARCEF
Si vous connaissez un tuto pour approfondir / changer / améliorer ce type de code, merci de me donner le lien car j'ai cherché 2 heures sur google mais sans grand succès.. c'est soit hors de ma portée (trop technique) soit cela ne répond pas vraiment à ma recherche (VB.net POO, gestion BDD avec relations entre tables)

@ cs_Patrice99. Je pense commander ce bouquin, a moins que, depuis, tu n'ai eu connaissance de quelque chose de plus intéressant (en 5 ans, il s'en passe des choses..

Merci a tous.
Messages postés
14389
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2020
413 >
Messages postés
28
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
9 août 2015

Bonjour je me suis permis d'éditer ton 2eme message pour préciser le langage dans la coloration syntaxique.
Concernant Link, ça ne marche pas avec Acces.
Messages postés
28
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
9 août 2015
>
Messages postés
14389
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2020

Salut Whismeril, Merci pour la correction de coloration, c'est beaucoup mieux comme ça, je ferai attention la prochaine fois.
Concernant LINK, effectivement j'ai lu ça quelque part, par contre, je code également en My-Sql pour un autre projet et là, cela doit pouvoir fonctionner, je n'ai pour l'instant, pas encore essayé. connais tu un tuto bien fait sur Link//My-sql ? (platform WampServer)

Amicalement,
Messages postés
28
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
9 août 2015

Salut Bouv.
bon, dès fois, faut juste essayer... et ca marche.
Je n'ai pas eu à refaire une classe de liaison car les liaisons fonctionnent avec 2 lignes de code :-)
j'ai procédé comme suit:
    Private Sub FillLV()

        With LV
            'On efface tous les éléments de la LV'
            .Items.Clear()

            'On créé l objet TAB_Products'
            Dim MyProducts As New OLEDB.Table.TAB_PRODUCTS

            'Michel : j ajoute ici l objet TAB_UNIT.'
            Dim myUnit As New OLEDB.Table.TAB_UNIT

            'On liste tout les enregistrements de la table'
            Dim iproducts As List(Of Integer) = MyProducts.EnumRecords

            'On remplit la LV'
            For Each i As Integer In iproducts

                'On récupère les infos complètes de l enregistrement'
                MyProducts.Index = i
                MyProducts.Read()

                'On ajoute l enregistrement'
                With .Items.Add(MyProducts.Index)
                    myUnit.Index = MyProducts.ProdIdUnit
                    myUnit.Read()

                   'Ce programme est en deux langues (Thai et Anglais, c est pour un' 
                    'pote cuisto qui a du mal avec l anglais mais qui essaye :-)'
                    If Main.Lang = 0 Then ' EN THAI'
                        .SubItems.Add(MyProducts.THProductName)
                        .SubItems.Add(MyProducts.ProdIdUnit)
                        .SubItems.Add(myUnit.THNameUnit)
                        .SubItems.Add(MyProducts.ProdPrice)
                        .SubItems.Add(MyProducts.ProdDate)
                        .SubItems.Add(MyProducts.ENProductName)
                    Else 'EN ANGLAIS'
                        .SubItems.Add(MyProducts.ENProductName)
                        .SubItems.Add(MyProducts.ProdIdUnit)
                        .SubItems.Add(myUnit.ENNameUnit)
                        .SubItems.Add(MyProducts.ProdDate)
                        .SubItems.Add(MyProducts.ProdPrice)
                        .SubItems.Add(MyProducts.THProductName)
                    End If
         'les colones 2, 5 et 6 du LV sont cachées, elles ne servent que '
        'pour la modification du produit afin de ne pas avoir a refaire une requette'
                End With
            Next i
        End With
    End Sub

Marche nickel... je ne le dirai jamais assez : MERCIIIIIII
Bien entendu, si il y a une meilleure méthode, je suis preneur...
Messages postés
28
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
9 août 2015

Salut Bouv,
Je sais que ce post date d'il y a 5 ans, mais qu'importe, pour moi il est d'actualité.
Avant tout, un grand merci, programmeur débutant, ce code m'a permis de comprendre bien des choses... Ce n'est peut être pas écrit a la perfectionn il n'y a peut être pas de LINK mais c'est clair, facile à comprendre et donc exactement ce qu'il me fallait pour comprendre.
toutefois, une petite question. J'ai créé une BDD avec 5 tables. il y a bien entendu des relations entre ces tables. Elles ont été définie dans Access.
Y as t-il un moyen simple (poo) pour gérer ces relations???
J'avoue ne pas avoir encore beaucoup cherché sur ce sujet mais le pas de géant qu'il m'a été permis de faire grâce a ton code me dis que, peut être, si tu as dans un tiroir une version plus évoluée de ce code, je pourrai peut être faire un autre pas de géant dans ce monde d'objets..
Merci encore. Amicalement.
Afficher les 11 commentaires

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.