C'est très embetant de devoir créer autant de formulaires pour les tables de références de votre application. Ceci est une solution à ce problème, hors mis les bugs que vous y decouvrirez.
Son principe est simple, il s'agit de spécifier lui passer le recordset en paramètre (quel que soit le provider), le module fait la reconnaissance automatique des champs du recordset, et construit dynamiquement les contrôles pour l'ajout/modification des données. Il n'ya pas de limitation sur le nombre de champs. Un paramètre permet de redimensionner dynamiquement tous les contrôles du formulaire. Le clic sur le bouton visualiser renvoie l'IDCommande, La chaine de tri et la chaine de filtre qui peut être dans une procédure pour affichage de l'état.
Un paramètre permet également de définir le mode d'affichage (implémentaion ou lecture seule)
L'exemple publié permet de voir 3 possibilités:
ACCESS comme driver, Excel comme driver(j'ai pas su passé la commande) et Microsoft Text comme driver.
Il est possible de faire des tris sur un champ ou de faire des filtres sur un champ. Pour ce dernier cas vous constaterez qu'il y'a des ameliorations.
Source / Exemple :
'Voici trois exemples qui permettront d'exploiter cet implementateur de table
'Partant des constantes suivantes qui peuvent se multiplier pour autant de Driver
Public Const Const_InitAccessConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0"
Public Const Const_InitExcelConnectionString = "driver={Microsoft Excel Driver (*.xls)};DriverId=790;ReadOnly=0;FirstRowHasNames=1"
Public Const Const_InitAsciiConnectionString = "driver={Microsoft Text Driver (*.txt; *.csv)};DriverId=27"
Dim Cnx1 As ADODB.Connection, Cnx2 As ADODB.Connection, Cnx3 As ADODB.Connection
Sub main()
Dim StrCnx1 As String, StrCnx2 As String, StrCnx3 As String
Dim EditeurRecordset1 As Cl_EditeurRecordset
Dim EditeurRecordset2 As Cl_EditeurRecordset
Dim EditeurRecordset3 As Cl_EditeurRecordset
'Exemple d'appel du module pour une table ACCESS
StrCnx1 = Const_InitAccessConnectionString & ";Data Source=" & App.Path & "\DATA\ACCESS\" & Const_DataBaseName & ";Jet OLEDB:Database Password=" & Const_Pwd
Set EditeurRecordset1 = New Cl_EditeurRecordset
Set Cnx1 = AdodbConnection(StrCnx1)
With EditeurRecordset1
Set .AdodbConnection("T_Ports") = Cnx1
.Init , "Implementation d'une table ACCESS", , 80 / 100
.Run
End With
'Exemple d 'appel du module pour une feuille EXCEL
StrCnx2 = Const_InitExcelConnectionString & ";DBQ=" & App.Path & "\DATA\EXCEL\CAISSE.xls"
Set EditeurRecordset2 = New Cl_EditeurRecordset
Set Cnx2 = AdodbConnection(StrCnx2)
With EditeurRecordset2
Set .AdodbConnection("DATA$") = Cnx2
.Init , "Implementation d'une feuille EXCEL"
.Run
End With
'Exemple d'appel du module pour un fichier ASCII
StrCnx3 = Const_InitAsciiConnectionString & ";DBQ=" & App.Path & "\DATA\ASCII"
Set EditeurRecordset3 = New Cl_EditeurRecordset
Set Cnx3 = AdodbConnection(StrCnx3)
With EditeurRecordset3
Set .AdodbConnection("ExportGeolog.txt") = Cnx3
.Init , "Implementation d'un fichier ASCII", False, 75 / 100
.Run
End With
End Sub
Conclusion :
Je suis habitué à developper sous ACCESS, après avoir lu la plupart de vos sources depuis un bon bout déjà j'ai decide de me jetter et c'est ma première source serieuse en VB.
Alors étant habitué aux requêtes avec DAO, il est clair que je ne maitrise pas bien les requêtes avec ADO.
Les evenements avant mise à jour et après mis à jour n'ont pas été rigoureusement pour les chmaps de filtre.
Toutes les remarques et suggestions sont les biens venus.
A+
Asimengo