Obtenez tout le code source dans le fichier mdb (msaccess) en utilisant C # / VBScript

Je souhaite obtenir tout le code source d’une firebase database Access (formulaires, modules) sans utiliser Office Interops.

J’ai aimé la fonction AllCodeToDesktop() trouvée ici . Cependant, cela fonctionne depuis l’intérieur du fichier mdb .

Que serait un fichier VBScript qui charge le fichier mdb et exécute cette fonction dessus?

Pour gagner beaucoup de temps, y a-t-il une raison pour laquelle vous n’utilisez pas le documenteur intégré?

Outils-> parsingr-> documenter

Ce qui précède a la capacité de produire un rapport qui contient tout le code dans des formulaires, des rapports, des modules et des modules de classe. Ce rapport peut être envoyé au format Word ou même enregistré sous forme de fichier texte.

Je mentionne cela uniquement pour vous faire économiser temps et efforts. Il n’y a pas besoin d’écrire de code ici.

plus de notes: Je ne pense pas que vous puissiez faire cela en externe. Vous pouvez utiliser ms-access en tant qu’object com et utiliser du code pour extraire le code en tant que texte, mais vous devez disposer d’un access installé sur cet ordinateur.

Il existe deux approches, la première consiste à utiliser la commande saveastext. Cela exportera tous les formulaires, rapports, codes, etc. sous forme de fichiers texte (c’est ce que les compléments de code source utilisent tous).

La deuxième approche consiste à écrire du code d’automatisation. Voici le code en access natif (VBA), mais vous écrivez également ce code dans n’importe quel langage prenant en charge les objects com. Le code ressemblera à ceci:

  Dim db As Database Dim Doc As Document Dim mdl As Module Dim lngCount As Long Dim strForm As Ssortingng Dim strOneLine As Ssortingng Dim sPtr As Integer Set db = CurrentDb() ' count module LOC For Each Doc In db.Containers("Modules").Documents DoCmd.OpenModule Doc.Name Set mdl = Modules(Doc.Name) lngCount = lngCount + mdl.CountOfLines For i = 1 To lngCount strOneLine = mdl.Lines(i, 1) Debug.Print strOneLine Next i Set mdl = Nothing DoCmd.Close acModule, Doc.Name Next Doc 

Le code ci-dessus peut être facilement modifié pour rechercher ou exporter le texte. Je pense que l’utilisation de saveastext, c’est moins de code, mais vous obtenez alors la définition des formulaires, etc., et probablement pas ce que vous voulez.

Je souhaite obtenir tout le code source d’une firebase database d’access (formulaires, modules) – sans utiliser d’interops bureautique

Microsoft Office est requirejs. Vous pouvez aussi bien coller votre fonction dans la MDB et l’exécuter à partir de là.

S’il s’agit d’un référentiel, vous pouvez consulter Visual SourceSafe et obtenir le complément Access VSS (le lien concerne Access 2003, je n’ai pas essayé d’autres versions) http://www.microsoft.com/downloads/details.aspx ? familyid = 2ea45ff4-a916-48c5-8f84-44b91fa774bc & displaylang = en

Je suppose que le complément d’access exposera une interface COM que vous pourriez extraire assez proprement de la source dans votre application C # si vous voulez emprunter cette voie. Dans les deux cas, comme l’a noté Robert, Office est toujours requirejs.

Je suis un modeste programmeur Access et je ne peux pas dire que je comprends votre question.

Autant que je sache, pour obtenir ce que vous voulez, vous devrez automatiser Access via COM – il n’y a pas d’autre moyen. Les routines permettant de le faire sont indépendantes de la version et fonctionnent dans toutes les versions d’Access à partir de 97 minimum, à condition que la version d’Access que vous automatisez soit compatible avec les fichiers que vous examinez (c’est-à-dire, A2000 ne pas être en mesure d’examiner une firebase database ACCDB et peut (ou non) donner des résultats peu fiables pour les BMD A2002, A2003 et A2007).

La clé consiste à utiliser Application.SaveAsText pour enregistrer tous vos objects contenant du code. Cela voudrait dire que vous voudriez parcourir tous les modules, formulaires et rapports et pour ceux contenant des modules de code, sortis avec SaveAsText. Pour les formulaires et les rapports, vous pouvez vérifier la propriété HasModule (bien que celle-ci ne soit disponible qu’en mode Création ou en formulaire, le formulaire doit être ouvert) si vous souhaitez ignorer tous les objects dépourvus de modules.

Si vous ne vous souciez pas de la compatibilité A97, c’est beaucoup plus facile. Vous pouvez utiliser CurrentProject.AllForms, CurrentProject.AllReports et CurrentProject.AllModules. Si vous ne souhaitez pas différencier les formulaires / rapports avec les modules de code et ceux qui ne le sont pas à ce stade, vous n’avez pas besoin de les ouvrir pour vérifier la propriété HasModule. Au lieu de cela, vous pouvez consulter le fichier texte exporté résultant. S’il n’y a pas de module, la balise CodeBehindForm sera manquante dans le fichier de sortie.

Cependant, il est très courant que les formulaires aient un module mais pas de code. Ces modules seront listés dans la sortie SaveAsText comme ceci:

  CodeBehindForm Atsortingbute VB_GlobalNameSpace = False Atsortingbute VB_Creatable = True Atsortingbute VB_PredeclaredId = True Atsortingbute VB_Exposed = False Option Compare Database Option Explicit 

Option Explicit peut être ou ne pas être là, et la firebase database Option Compare n’est techniquement pas requirejse, mais 99% des modules créés dans Access en ont un ou les deux (seules les bases de données créées dans Access 2000 avec les parameters par défaut manqueront d’Option Explicit). Le code commencera après les 4 atsortingbuts. S’il ne s’agit que des deux instructions OPTION, il n’y a pas de code réel derrière le formulaire.

Vous devriez être capable de faire l’automatisation COM d’Access à partir de vbScript sur n’importe quel PC sur lequel une version d’Access installée est compatible avec toutes les MDB / ACCDB que vous voulez examiner.