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

Visual FoxPro : Présentation Générale   



L'auteur

FoxInCloud (Th. Nivelet)
France France
Membre Simple
# 0000000014
enregistré le 13/10/2004

http://www.foxincloud.com/
Nivelet Thierry
75016 Paris
de la société Abaque
Fiche personnelle


Note des membres
pas de note

Contributions > 60 - AtoutFox > 90 - Articles AtoutFox

Visual FoxPro : Présentation Générale
# 0000000016
ajouté le 19/10/2004 11:24:35 et modifié le 13/09/2006
consulté 34539 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0

Description

 

Pour les développeurs venant d'autres langages et souhaitant découvrir Visual FoxPro, cet article tente d'en tracer les grandes lignes :

[Il ne s'agit pas de code mais d'un texte en Français courant (j'espère) ;-)]



Tout ce qui suit s'applique à VFP 7+ L'aide VFP citée ci-après est accessible en ligne dans la 'MSDN library'

http://msdn.microsoft.com/library/en-us/dv_foxhelp/html/vfp7startpage.asp

(merci de signaler les liens obsolètes dans vos commentaires)


SYNTAXE DU LANGAGE


Dans l'aide VFP7, le chapitre "Visual FoxPro and Other Programming Languages" compare VFP à VB, C/C++, Pascal sur les thèmes  suivants :
http://msdn.microsoft.com/library/en-us/dv_foxhelp/html/refVisual_FoxPro_and_Other_Programming_Languages.asp

  •   Whether the language is case-sensitive
  •   How variables are declared
  •   How to insert comments in programs
  •   How to store values to variables
  •   The structure of IF statements
  •   The structure of CASE statements
  •   The structure of FOR loops
  •   The structure of WHILE loops
  •   How parameters are passed by value
  •   How parameters are passed by reference

Petit complément utile sur la déclaration des variables :

VFP résoud les noms des variables à l'exécution et maintient une liste des variables "visibles" :



  •   Déclarée par LOCAL / LPARAMETER, elle n'est visible que dans le module de déclaration
  •   Non déclarée ou créée par PARAMETER, la variable est visible dans les modules appelés
  •   Déclarée par PUBLIC, elle est visible dans les modules appelés et appelant


ENVIRONNEMENT DE DÉVELOPPEMENT (IDE)


L'IDE VFP est très comparable à celui de VB :



  •   coloration de syntaxe,
  •   intellisense y compris sur objets COM
  •   fenêtres 'ancrables'
  •   gestionnaire de projet arborescent
  •   débogueur avec trace, call, watch, locals, points d'arrêts par clic
  •   liste de tâches
  •   intégration avec Visual Source Safe (icônes dans le gestionnaire de projet indiquant l'état de chaque document)
  •   mémorisation de la taille, position, présentation des fenêtres

Quelques particularités de VFP :



  •   l'intellisense est adaptable ; on peut par exemple y introduire ses propres fonctions et procédures (intellisense manager)
  •   la fenêtre Document View présente un sommaire complet des modules existant dans un fichier programme, une classe ou un écran (plus rapide que les combo box de la fenêtre code)
  •   la FAMEUSE Fenêtre de commande VFP :

    •   toute commande ou groupe de commandes peut y être exécutée pour test avant intégration dans un programme en sélectionnant et en pressant la touche Enter
    •   intellisense complet
    •   la plupart des commandes interactives y sont en écho



DONNÉES - 1. TABLE


VFP comporte un système de gestion de données propre, natif, et permet d'accéder en client / serveur aux bases de données compatibles ODBC (SQL Server, Oracle, etc.).
VFP permet de prototyper/démarrer une application sur une base de données VFP et, si nécessaire, la transférer sur une base SQL sans changer le code de l'interface utilisateur.


Signalons que la licence de développement VFP autorise une redistribution illimitée du code et du moteur de base de données VFP.

Création - Modification d'une table VFP



Une table VFP (MaTable.dbf) peut comporter jusqu'à 255 champs et 1 milliard d'enregistrements. Chaque champ peut revêtir un des 12 types correspondants aux standards SQL.


On peut associer à une table un fichier d'indexes (MaTable.cdx) comportant des clés (tags) d'indexes en nombre illimité.

Une clé d'index peut être créée sur n'importe quelle expression pourvu que tous ses membres (champs, variables, fonctions) soient accessibles à l'ouverture de la table (sinon, avertissement).


Une table peut être créée | modifiée :



  •   interactivement : File - New | Open - Table
  •   par programmation : CREATE TABLE ..., ALTER TABLE ..., INDEX ON ...

Ouverture d'une table VFP



Les tables sont ouvertes (USE ...) dans une zone de travail (1,2, ...A, ...) d'une session de données, avec un ALIAS (par défaut la racine du nom du fichier).

La même table peut être ouverte plusieurs fois sous des alias différents (USE AGAIN ... ALIAS ...) dans une même session de données.

On peut ouvrir autant de sessions de données que nécessaire, chaque écran peut avoir sa session de données propre.

Une session de données peut être enregistrée dans un fichier et rétablie à partir de celui-ci (CREATE VIEW ...)

La fenêtre "session de données" (bouton sur barre d'outils) présente les aliases ouverts dans chaque sesssion, et les relations entre eux

On peut 'régler' un alias en lui assignant (bouton 'properties' de la fenêtre de session de données) :



  •   une clé d'index parmi celles contenues dans le CDX associé, qui ordonne les enregistrements
  •   un filtre de champs
  •   un filtre d'enregistrements
  •   une ou plusieurs relations

Les différents alias d'une même table ouverts dans une même session sont indépendants : position, index et filtre(s) actifs, relation(s)

On peut voir le contenu de l'Alias dans une grille en cliquant sur le bouton Browse de la fenêtre de session de données.

Le format de la fenêtre Browse est entièrement paramétrable.

Accès aux données des tables



VFP offre deux méthodes d'accès aux tables : commandes VFP et SQL

Accès aux données par commandes natives VFP



(Tout ce qui suit travaille sur l'ALIAS tel que défini ci-dessus)


PRINCIPES GÉNÉRAUX


La plupart des commandes peuvent travailler :



  •   sur l'alias couramment sélectionné
  •   sur un alias non sélectionné au moyen de la clause [IN Alias]

Les commandes acceptent 2 clauses de sélection des enregistrement :



  •   Clause d'étendue : tous, suivants, etc.
  •   Clause de Filtre : FOR  ou WHILE

APERÇU DES COMMANDES



  •   Filtrer un alias : SET FILTER TO ... [IN Alias]
  •   Synchroniser deux aliases : SET RELATION TO ... INTO AliasFils ... [IN AliasPère] - l'alias père peut être en relation avec plusieurs fils.
  •   Sélectionner un alias : SELECT Alias
  •   Atteindre un enregistrement :

    •   Accès séquentiel : SCAN ... ENDSCAN (parcourt l'alias sélectionné)
    •   Accès direct :

      •       par le n° d'enr. GO ... [IN Alias]
      •       par recherche sur l'index actif : SEEK ... [IN Alias], SEEK(Valeur, Alias)
      •       par recherche  sur le contenu d'un ou plusieurs champs : LOCATE ...
       

  •  Mettre à jour le contenu d'un ou plusieurs enr. : REPLACE ... [IN Alias]
  •   Ajouter un/des enr. : APPEND ... [IN Alias]
  •   Extraire un/des enregistrements : COPY TO...
  •   Importer un/des enregistrements : APPEND FROM, IMPORT
  •   Supprimer un/des enr. : DELETE...[IN Alias]  /!\ Cette commande marque l'enr. pour suppression au moyen d'un sémaphore. Elle ne le supprime pas physiquement. Un réglage de VFP permet de "voir" ou "ignorer" les enregistrements "deletés" (SET DELETED ON/OFF)
  •   Rappeler un/des enr. supprimés : RECALL ...[IN Alias]
  •   Supprimer physiquement les enregistrements supprimés : PACK /!\ nécessite un accès exclusif à la table (un seul alias ouvert en exclusif)

Accès aux données par commandes SQL



Commandes SQL 92 classiques ... (cf. SQL Commands Overview dans l'aide VFP):



  •   Extraction : SELECT ...
  •   Mise à jour  du contenu de l'enr. : UPDATE ...
  •   Suppression de l'enr. : DELETE FROM (commentaire idem VFP)
  •   Ajout d'enr. : INSERT ...
  •   Importation : SELECT depuis les deux tables vers une troisième

Optimisation Rushmore



Pour trouver plus rapidement le(s) enregistrement(s) répondant à une clause FOR (VFP) ou WHERE (SQL), VFP exploite les clés (tags) d'index.

Si l'expression suivant la clause FOR ou WHERE correspond à une ou plusieurs clés d'indexes, VFP exploite la technologie Rushmore.


L'optimisation Rushmore s'applique aussi bien aux commandes natives VFP qu'aux commandes SQL.


VFP optimise les requêtes SQL automatiquement (création d'indexes temporaires si approprié)


DONNÉES - 2. BASE DE DONNÉES



/!\ en construction


DONNÉES - 3. VUES



/!\ en construction


CLASSES


VFP permet de créer / modifier des classes à partir des classes de base par :



  •   DESIGNER VISUEL (d'où le "Visual" de "Visual FoxPro") pour toutes les classes visuelles (parmi lesquelles les contrôles d'écrans) : File > New > Class ou Open > Class library ...
  •   PROGRAMME pour toutes les classes, visuelles ou non : DEFINE CLASS ... AS ...

Le Designer est préférable pour les classes entrant dans l'aspect des écrans car il ne peut mettre en page les classes programmées. Il supporte pleinement l'intellisense.


La Définition par programme est plus souple, notamment pour renommer les Propriétés et Méthodes.

Chaque mode de création de classes (par programme / designer) a ses avantages et ses inconvénients récapitulés ici  (Wiki FoxPro en anglais) :
http://fox.wikis.com/wc.dll?Wiki~PRGvsVCX


  •   CheckBox
  •   ComboBox
  •   CommandGroup - conteneur (groupe de boutons)
  •   CommandButton
  •   Container - conteneur (peut contenir tout autre classe)
  •   EditBox
  •   FormSet - conteneur
  •   Form - conteneur
  •   Grid - conteneur
  •   - Grid Column - conteneur (visuelle à partir de VFP8)
  •   -- Grid Column Header (visuelle à partir de VFP8)
  •   Hyperlink
  •   Image
  •   Label
  •   Line
  •   ListBox
  •   OLEControl
  •   OLEBoundControl
  •   OptionGroup - conteneur
  •   - OptionButton (visuellement à partir de VFP8)
  •   PageFrame - conteneur
  •   - Page - conteneur (visuelle à partir de VFP8)
  •   Spinner
  •   TextBox
  •   ToolBar

  •  Classes "non visibles" à l'écran

    •   Collection - conteneur
    •   Control - conteneur
    •   Custom - conteneur
    •   CursorAdapter
    •   DataEnvironment - conteneur
    •   -Cursor
    •   -Relation
    •   Empty
    •   ProjectHook
    •   ReportListener
    •   Timer
    •   XMLAdapter
    •   XMLField Class
    •   XMLTable Class
    •   ActiveDoc (obsolète)


      Classes devant être sous-classées par programmation :



      •  Session
      •  Separator

      Les classes signalées par [- conteneur] peuvent contenir d'autres classes :



      •   La classe parent contient des propriétés controls et controlCount permettant d'accéder aux contrôles contenus
      •   Les classes enfant référencent leur parent au moyen de la propriété Parent
      •   Tout objet doit avoir un parent, l'ancêtre ultime étant _VFP lui-même


      ECRAN (form)


      Un écran VFP est en fait une pseudo sous-classe de form :



      •  Sous-classe car on peut lui ajouter des propriétés et méthodes comme dans une classe ordinaire
      •  Pseudo car on ne peut le sous-classer

      Un fichier d'écran porte l'extension SCX alors qu'une bibliothèque de classes visuelles porte l'extension VCX.

      Il va de soi qu'on ne peut définir un écran par programmation, seulement par le Designer Visuel.

      (Mais on peut définir une classe d'écran par programmation)

      Un écran se dessine au moyen d'un form designer semblable au class designer.

      Chaque objet peut être positionné par souris ou clavier, aligné ou centré sur une autre ou sur l'écran, dimensionné par souris ou clavier.

      Les objets peuvent être alignés sur une grille magnétique à pas réglable.

      Tout écran comporte nativement un objet environnement de données où il suffit de glisser-déplacer les tables ou les vues depuis la base de données.

      Les relations figurant dans la base de données sont crées automatiquement.

      L'environnement de données permet de régler le mode d'ouverture et de fermeture des curseurs, les relations et ordres de tri comme dans toute session de données (voir plus haut).


      Pour ajouter à l'écran un contrôle lié (bound control) à un champ d'un curseur (table ou vue), il suffit de glisser-déplacer celui-ci depuis l'environnement de données jusqu'à l'endroit approprié de l'écran.

      Bien entendu, tout ce que l'environnement de données fait automatiquement peut être modifié ou remplacé par une programmation de l'événement load() de l'écran.


      Le modèle d'événement est assez riche pour répondre à la plupart des besoins :



      •  Vie de l'écran : Load(), Init(), Destroy(), QueryUnload(), Unload()

        /!\ Load() et Init() sont inversés par rapport à VB
      •  Actions utilisateur : activate() / deactivate(), KeyPress(), MouseClick() / Up() / Down() / MiddleClick() / RightClick() / Wheel() / Move(), etc.
      •  Drag and Drop : VFP (de-vers objets VFP) et OLE (de-vers objets ActiveX)


      ETAT (report)



      /!\ en construction


      ENVIRONNEMENT D'EXÉCUTION



      /!\ en construction


      PROJET ET DÉPLOIEMENT



      /!\ en construction




  • Commentaires
    le 22/10/2004, FredA a écrit :
    tout à fait Thierry !

    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