Soyez le premier à donner votre avis sur cette source.
Vue 22 403 fois - Téléchargée 4 142 fois
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
17 févr. 2006 à 12:34
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)
17 févr. 2006 à 13:21
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?
17 févr. 2006 à 17:06
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.
17 févr. 2006 à 17:34
17 févr. 2006 à 18:33
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.