ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

GENDBCXM : générer la reconstruction d'une BDD et les classes d'accès aux tables   



L'auteur

Jean à Grenoble
France France
Membre Actif (personne physique)
# 0000000032
enregistré le 16/10/2004

http://www.j-maurice.fr
69 ans
MAURICE JEAN
38000 GRENOBLE
Fiche personnelle


Note des membres
pas de note

Contributions > 21 - Outils

GENDBCXM : générer la reconstruction d'une BDD et les classes d'accès aux tables
# 0000000671
ajouté le 19/02/2009 14:54:20 et modifié le 19/02/2009
consulté 8964 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0


Télécharger le ZIP (954.29 Ko)
Description

ATTENTION version BETA  19/02/2009

GENDBC est un utilitaire livré avec VFP qui, à parir d'une base de donnée, génère le programme capable de la regénérer.

Sur www.leafe.com, Steve Arnott a créé (en 1997 !) GENDBCX qui améliore grandement le programme initial. Gendbcx génère une classe avec une méthode pour recréer la bdd, une méthode pour recréer les tables, une méthode pour recréer les vues, etc etc ... On peut lancer toutes les méthodes pour recréer tous les éléments de la bdd mais on peut ne lancer que la récréation des vues, ou ....

Gendbcxm.prg ajoute à gendbcx la génération des classes d'accès à chaque table. Pour chaque table de la bdd on obtient :

  - un grand commentaire donnant toutes les caractéristiques de la table (structure, index, ...) ainsi que la liste des vues travaillant sur cette table

  - un classe d'accès à cette table qui contient les méthodes :
      > ouverture() : on ouvre la table et, si elle existe, la vue en lecture/écriture qui sert à sa mise à jour
      > fermeture()
      > ajout() pour ajouter une ligne à la table
      > modifier() pour modifier une ligne de la table
      > supprimer() pour 'supprimer' une ligne de la table
      > chercher() pour chercher une ligne
      > nouvelle_clef() pour rechercher la clef d'un nouvel enregistrement
    et un certain nombre de propriétés qui vont servir d'interface avec l'application. En particulier la propriété 'image' contient l'image 'scatter name memo' de la ligne en cours de traitement. C'est sur elle que doit travailler l'application. La classe d'accès est générée à partir des seules informations présentes dans la base; elle doit donc être 'personnalisée' pour être adaptée à chaque table.

L'utilisation d'une classe d'accès à une table a des avantages :
    - on peut coder ou décoder certains champs et ce traitement n'est fait qu'à un seul endroit
    - on peut faire évoluer la table sans entrainer trop de modifications dans l'application
    - on peut faire évoluer la méthode d'accès à la table sans toucher au reste de l'application : on peut commencer par des APPEND, SEEK, ... puis utiliser des vues puis passer la table sur une bdd externe, ...
    - on peut définir, et cela ne se fait qu'à un seul endroit pour toute l'application, la méthode de bufferisation (optimiste, pessimiste, ligne, table)

 
Le présent gendbcxm contient des particularités 'mauricienne' :
  - le nom de la vue updatable (en lecture/écriture) à utiliser pour mettre à jour la table doit se terminer par '_rw'  (Read Write)
  - les paramètres des vues doivent être signalés manuellement : menu Query, option View parameters ...
  - vfpmou est une table qui contient le mouchard de l'application : c'est un fichier d'événements horodaté. Il est remplacé petit à petit par un fichier texte.
  - VFP permet de créer, visuellement, une vue dans une base de données X sur une table de la base de données Y. C'est très interessant. Gendbcxm permet de récupérer le code de création de cette vue (dans lequel le X n'apparait pas) pour l'inclure dans le programme de régénération des vues de la table dans Y.

CECI EST UNE VERSION BETA. Toutes les critiques, suggestions, ... sont les bienvenues.

Pour l'exemple je vous livre une petite bdd en cours de construction avec 2 tables : une contient l'ensemble des codes postaux français, l'autre la liste des pays du monde. L'une a des vues l'autre pas, du coup sa classe d'accès est beaucoup moins complète.

Gendbc, Gendbcx et Gendbcxm sont des (très bons !) exemples de génération de programme par un autre programme. Les deux premiers utilisent les fonctions de bas niveau (FOPEN, FPUTS, ...) j'utilise TEXTMERGE. Chaque technique a ses avantage et ses inconvénients.  Avec TEXTMERGE, il faut faire plus attention, quand on parcours le programme de gendbcxm, pour savoir si on est dans le programme générateur ou si on est dans le programme généré (entre TEXT et ENDTEXT. J'utilise aussi beaucoup les opérateurs \ et \\.

NOTE : traitement_erreur_tableupdate est une procédure commune de traitement des erreurs de tableupdate. Cette procédure est en cours de développement. Elle est placée dans une librairie 'commune'
      
NOSTALGIE : ma première 'action publique' en tant que développeur FOX a été un article sur la ... génération de programme dans la revue POINT DBF. C'était en 1992. A l'époque, FPD2.0 était livré avec FOXGEN qui était un langage de génération de programme (c'était le début des L4G) ...

Code source :
OPEN DATABASE codes_postaux_villes_pays
DO gendbcxm WITH "temporaire.prg""maintenance_codes_postaux"

Commentaires
Aucun commentaire enregistré ...

Publicité

Les pubs en cours :

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3