Class vb pour table access

Soyez le premier à donner votre avis sur cette source.

Vue 22 403 fois - Téléchargée 4 142 fois

Description

Cette class VB, vous permettra de manipuler une base de données Access (ou autre si vous changez quelques trucs) assez facilement, toutes les actions courantes y sont. Je généraliserais bientôt cette Class afin de pouvoir l'adapter à toutes les tables sans avoir à créer une Class spécifique pour cette table.

Source / Exemple :


Public Sub Ajouter(rs As ADODB.Recordset, cn As ADODB.Connection, Frm As Form, Tbl As String, ParamArray NomChamp() As Variant)
    Dim i, compt As Integer
    rs.Open Tbl, cn, 1, 2
        rs.AddNew
        i = rs.Fields.Count 'Compte le nombre de lignes
        For compt = 0 To i - 1
            'Les noms des champs du formulaire doivent avoir le mm nom que les colonnes de la table
            rs.Fields(NomChamp(compt)) = Frm(NomChamp(compt)).Text
        Next compt
        rs.Update
    rs.Close
End Sub
'Remplissage de ComboBox uniquement ceux créés avec Microsoft Form 2.0
 Public Sub Lister(Frm As Form, Ctl As String, rs As ADODB.Recordset, Conn As ADODB.Connection, sql As String, ParamArray parametre() As Variant)
    Dim compt, compt2 As Integer
    'Ouvre la requête
    rs.Open sql, Conn, adOpenStatic, adLockOptimistic
    Frm(Ctl).Clear 'Efface la liste
    compt = 0
    While rs.EOF = False
        Frm(Ctl).AddItem rs.Fields(parametre(0))
        For compt2 = 1 To UBound(parametre)
            If Not IsNull(parametre(compt2)) Then Frm(Ctl).Column(1, compt) = rs.Fields(parametre(compt2))
        Next compt2
        rs.MoveNext
        compt = compt + 1
    Wend
    rs.Close
End Sub

Public Sub MODIFIER(rs As ADODB.Recordset, cn As ADODB.Connection, sql As String, Frm As Form, ParamArray NomChamp() As Variant)
    Dim i, compt As Integer
    rs.Open sql, cn, 1, 2
        i = rs.Fields.Count
        For compt = 0 To i - 1
            rs.Fields(NomChamp(compt)) = Frm(NomChamp(compt)).Text
        Next compt
        rs.Update
    rs.Close
End Sub

Public Sub Supprimer(rs As ADODB.Recordset, cn As ADODB.Connection, sql As String)
    rs.Open sql, cn, 1, 2
        rs.Delete
        rs.Update
    rs.Close
End Sub

Conclusion :


J'espère que ça aidera certains, et que vous me laisserez des commentaires et/ou une note.
Merci ^^

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cs_asimengo Messages postés 280 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 18 mars 2009
17 févr. 2006 à 12:34
Je trouve que la capture d'écran n'exprime pas l'importance de ce code.

En gros l'idée est bonne, tu voudrais alléger le travail d'implémentation de table basé sur un form, une classe qui se charge du travail suivant les paramètres.

Néanmoins je le trouve toujours figé puisque tu peux l'améliorer pour une plus grande utilisation. A cet effet il s'agira toujours d'une classe mais avec des propriétés et des méthodes supplémentaires. Certains des éléments que tu envoie en paramètre sont plutot des propriétés de la classe qu'il faut initialiser avant d'utiliser tes méthodes (ajouter, modifier et supprimer).
De ce fait le recordset ouvert doit d'abord être initialiser par un "set class.lerecordset =..." ceci permet de passer les tables de n'importe quel provider, la reconnaissance des champs est automatique. Bien évidemment tu devrais ajouter des méthodes pour se déplacer dans le recordset. pour la modification tu envoi les nouvelles valeurs en paramètre comme une variable de type array, ceci te permettra de créer une méthode qui lit les nouvelles valeurs dans un form et renvoi le résultat en variant (array).
En gros tu créeras autant de méthodes que tu voudras pour des cas spécifiques mais une seule méthode tout terrain pour (ajouter, modifier et supprimer)
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
17 févr. 2006 à 13:21
Certes, j'ai déposé cette source pour donner une idée sur la manipulation d'une table par une classe. Evidemment, on peur rajouter ce que l'on veut. De plus, je suis en train d'améliorer la fonction lister, pour qu'elle accepte les valeurs null...
je voulais initialiser le recordset comme tu dis, mais sans le faire ça marche très bien aussi. Alors je vois pas l'intérêt.
Je ne vois pas ce que tu veux dire par:
"pour la modification tu envoi les nouvelles valeurs en paramètre comme une variable de type array, ceci te permettra de créer une méthode qui lit les nouvelles valeurs dans un form et renvoi le résultat en variant (array)."
Actuellement, je ne vois pas ce qui m'empêche de parcourir le recordset, as-tu regardé mon code en entier?
De plus, je ne vois pas quoi mettre dans l'image pour que ça soit bien représentatif, t'as une idée?
cs_asimengo Messages postés 280 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 18 mars 2009
17 févr. 2006 à 17:06
Ton code je suis marche bien et je continue de dire que l'idée est très bonne.
Pour le code je me suis limité à l'exemple du source et j'ai du oublier de le download, mille choses à la fois.

Je prends ta fonction MODIFIER : Public Sub MODIFIER(rs As ADODB.Recordset, cn As ADODB.Connection, sql As String, Frm As Form, ParamArray NomChamp() As Variant)

Pour moi, si rs, cn et sql ne sont envoyés en paramètre cela permet déjà que ta classe puisse être utilisée pour tous les providers, ces variables doivent être des propriétés de la classe. De deux au lieu d'envoyer la form en paramètre, ce qui limite les possibilités de ta fonction MODIFIER, tu lui envoi la liste des valeurs pour la modification en une variable array. sachant que la valeur 1 corespond au champ 1 et etc ...
Tu pourras de ce fait créer une méthode qui lit les valeurs des champs recordset sur un formulaire et renvoie le résultat sous forme d'Array.

C'est juste des suggestions mais ton code il marche impec,bien que je trouve un peu des redondances.
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
17 févr. 2006 à 17:34
Ha ok, je vois ce que tu veux dire maintenant, mais comme' je l'ai mis dans le titre c pour une table Access. bref, je posterais bientot une source capable de générer un form Vb à partir d'une table Access, un peu comme ta source mais à la différence que moi, je veux génèrer un form, ce n'est pas un form dynamique...
cs_asimengo Messages postés 280 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 18 mars 2009
17 févr. 2006 à 18:33
Je suis interessé par ton projet, générer un form.
J'aimerais bien savoir comment générer un form (avec des contrôles) que ce soit en mode création du projet ou déjà compilé. C'est à dire générer un form utilisable par l'application. Quelle est l'intérêt mes applis se ressemble beaucoup côté ergonomie des interfaces alors pourquoi pas faire un générateur suivant des principes qui me sont propres. A ce moment je pourrais sérieusement travailler le design qui pour moi est encore un problème.

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.