Lettre technique électronique Visual dBASE

Février 1996

Un service du Réseau mondial des développeurs (World Wide Developer Network)

Vol. 1 No. 1

Editeur: http://www.wji.com/vdb/homepage.html - ftp.wji.com

Version langue française: http://www.fghoche.com/


Table des matières

** Éditorial, Alan Katz
Premier numéro de la Lettre technique électronique du réseau des développeurs Visual dBASE
** Newsflash
Outils Web pour Visual dBASE!
** Newsflash
Enfin, une "Buglist"!
** Classe personnalisée - par Bowen Moursund
Un bouton Editbutton pour basculer en mode édition
** Le WINAPI de Jim - par Jim Sare (rubrique régulière)
Un Combobox à déroulement automatique
** Visual dBASE dévoilé - par Paul Mahar (rubrique régulière)
Dimensionner vos applis pour le client/serveur et les tables .db
** Visual dBASE C/S - par Ray Kiuchi (partie 1 sur 2)
Utiliser les procédures stockées
** Développeur en direct - par Charles Overbeck (rubrique régulière)
Classe personnalisée Pushbutton - Texte aligné à gauche! (plusieurs auteurs)
** Réseau pratique - par Alan Frazier (rubrique régulière)
Partie I - Impression directe
** La filière interne - par Charles Miedzinski (rubrique régulière)
Versions Inline, "Problem Lists" et rapports de bogues
** Ressources (rubrique régulière)
Un livre, une source additionnelle et une autre excellente lettre Visual dBASE
** Dans le prochain numéro....
** Le mot de l'éditeur
Les Squires
Bienvenue, abonnements, philosophie, anciens numéros, site WWWeb

Éditorial - Alan Katz

Bienvenue pour ce premier numéro de la lettre technique du Réseau des développeurs Visual dBASE (VdDN).

Le commencement....

Il n'y a pas si longtemps, j'ai reçu le message de voeux annuel de Les Squire à ses abonnés: "Que voulez-vous de neuf en 1996?".

Abonné depuis longtemps à ses lettres techniques Clipper et Fox, je connais et respecte Les depuis des années. Ses lettres sont devenues une source d'informations hors pair - une fenêtre sur les hommes, les événements et les techniques des langages de programmation à partir desquels je gagne ma vie.

J'ai donc répondu: "Une lettre technique Visual dBASE !".

Les n'est pas homme à tourner autour du pot ou à perdre du temps. En moins de 24 heures, il m'a demandé de prendre en charge la rédaction d'une nouvelle lettre technique Visual dBASE. J'ai accepté, et la lettre VdDN a été lancée.

Programmation de pointe...

Je ne pouvais pas refuser, notamment en raison de l'enthousiasme de Les pour cet environnement de développement remarquable et sa base d'utilisateurs en croissance rapide.

Une raison encore plus importante était la nécessité de partager avec d'autres développeurs Visual dBASE la profondeur, la puissance et l'élégance de cet environnement de développement rapide (RAD) surprenant.

Par ma participation au forum VdBASE (en tant que membre du TeamB), j'ai été amené à me rendre compte que la plupart d'entre nous n'ont fait que survoler les possibilités de Visual dBASE. La mise en commun de nos efforts et de nos connaissances était donc le meilleur moyen de nous transformer tous en programmeurs de pointe, en maîtrisant les techniques de pointe de la technologie des micro-ordinateurs, à l'aide du meilleur ensemble d'outils du marché.

La mission...

Ainsi, la mission de cette lettre est de servir de forum pour un échange d'idées, d'informations, de code et d'objets pour promouvoir la productivité et le développement avancé d'applications avec Visual dBASE. L'attention sera particulièrement portée sur:

Cette lettre vous appartient. Bien que nous ayons été comblés par les contributions de quelques uns des meilleurs auteurs et programmeurs Visual dBASE (même des créateurs du produit), nous vous encourageons à contribuer par vos articles, lettres, classes personnalisées et commentaires.

Les contributions peuvent être effectuées par courrier électronique:

Site Web...

Les limitations inhérentes à ce type de lettre prohibent les longs articles de fond accompagnés de graphiques et copies d'écrans. VdDN a établi un site sur le World Wide Web, qui va bientôt héberger un magazine Visual dBASE.

Certains des articles condensés publiés dans cette lettre comprendront un URL (Universal Resource Locator), une adresse Web où vous pourrez trouver l'article en version intégrale, souvent avec des listings de code, des graphiques et copies d'écran. Le site Web VdDN comprendra des archives pour les classes publiées, les anciens numéros, ainsi que des hyperliens avec le site du catalogue Zac. Il proposera également un outil d'indexation et de recherche sur les sujets/dates/auteurs. Rejoignez-nous sur le Web pour une bibliothèque en croissance constante de composants freeware Visual dBASE et articles complets.

Éditorial de la version françoise... - François Ghoche

Bien que ses capacités soient souvent méconnues, Visual dBASE est un produit en avance sur la plupart de ses concurrents sur nombre de points. Outils de développement rapide d'applications orienté objets en environnement base de données, il constitue tant la solution pur le développement d'applicatifs ad hoc pour le département de la grande entreprise, que l'outil privilégié du consultant et de la petite structure.

Il met l'orientation objets à la portée de tout un chacun sans pour autant tomber dans le piège de la théorie intégriste. Il s'intègre parfaitement dans la plate-forme d'accueil, Windows, tout en permettant l'utilisation des anciennes applications DOS jusqu'à leur conversions ou à leur obsolescence inéluctable. Il offre des outils visuels de conception avancée, tout en tolérant que l'on modifie le code source généré. Le fait de générer du code source au lieu de se contenter de surfacer des composants binaires plus ou moins transparents n'est d'ailleurs pas le moindre de ses avantages.

Mais trêve de louanges, vous savez sûrement tout cela, sinon vous ne seriez pas là...

Il était impensable que les développeurs Visual dBASE francophones restent à l'écart de la source d'informations précieuse que constituera cette lettre technique. J'ai donc décidé de seconder l'initiative de Les Squires et d'Alan Katz et prenant en charge la traduction et l'adaptation française de la lettre du VdDN.

Nous voudrions que cette lettre technique ne soit pas seulement la traduction française de la lettre américaine, mais qu'elle reflète plus étroitement nos particularités. Il ne tient qu'à vous qu'il en soit ainsi. Écrivez-nous, envoyez-nous tant vos contributions que vos questions et suggestions. Nous vous proposerons également des nouvelles spécifiques chaque fois que cela sera utile.

Cette lettre sera disponible tant sur le site du VdDN que sur le mien propre chaque mois. Un hyperlien permettra également d'y accéder à partir des sites Web de Borland.

Bonne lecture !

NEWSFLASH !

Outils Web pour Visual dBASE

Le 6 février, Borland a effectué une annonce qui a propulsé Visual dBASE au premier rang de la technologie avancée: les Outils Web pour Visual dBASE.

Prévus pour le printemps prochain, il s'agit d'une série de classes qui permettent tant l'automatisation de la création de pages Web, que la création de programmes interactifs pour Internet et intranets.

Selon Borland:

"Les Outils Internet pour Visual dBASE sont un excellent exemple de la manière dont nous sommes en train d'étendre les fonctionnalités de nos produits existants pour la prise en compte de l' Internet, du World Wide Web, et des intranets d'entreprises," a déclaré Paul Gross, senior vice president of research and development chez Borland. "Cela donnera aux développeurs Xbase et aux autres développeurs en bases de données l'accès à ce marché gigantesque et passionnant. Les outils Internet pour Visual dBASE permettront à quiconque est familier avec un langage de programmation largement connu tel que dBASE de faire du développement pour le Web."

"Avec les Outils Internet pour Visual dBASE, les développeurs pourront créer des applications interactives pour l'accès à des bases de données sur le World Wide Web et sur les intranets d'entreprises. Ces outils sont constitués d'un ensemble d'objets qui présentent l'information extraite de bases de données tant locales qu'en provenance de serveurs sous forme HTML, pour accès par des browsers et navigateurs Web sur plates-formes multiples.

NdlR: Lors de la même présentation, Borland a également annoncé un nouveau package Visual dBASE: la "RAD Suite" Visual dBASE Professionnelle, qui combine dans le même produit Visual dBASE, le Compilateur Visual dBASE, le Resource Workshop et tous les autres outils que nous avons appris à apprécier dans la même boîte.

Consultez le communiqué de presse complet sur le site VdDN:

http://www.wji.com/vdb/homepage.html

Borland publie une "Bug List"

Borland a publié une liste très attendue de "problèmes connus" sur le forum VdBase sur Compuserve, ainsi que sur son site Web. Elle comprend les anomalies connues, certaines d'entre elles avec des méthodes pour contourner le problème, d'autres sans. Il s'agit certainement d'un fichier qu'il faut décharger ! Il peut vous éviter des heures de lutte avec un problème répertorié. Il est inutile de réinventer la roue. Sur Internet:

http://www.borland.com/Techinfo/dBASE/Dbwin.html

Custom Control - par Bowen Moursund

NdlR: Bowen Moursund est consultant dans la région de San Antonio. Il s'agit d'un membre très calé du TeamB sur le forum VdBASE. Il est également l'auteur de la classe Crystal Wrapper class, qui se trouve en Lib 10 (Knowledgebase) du forum.

Editbutton - mettre l'édition en/hors fonction

Avez-vous besoin d'un bouton 'Éditer' pour basculer un formulaire (contenant des contrôles liés à des champs) entre modes modifiable/non-modifiable ? Le contrôle personnalisé suivant peut le faire:

CLASS EditButton(fForm,cName) of pushbutton(fForm,cName) custom
*------------------------------------------------------------------
*-- Programmer..: Bowen Moursund (CIS: 72662,436), Copyright 1996
*-- Date........: 01/12/96
*-- Notes.......: Un EditButton est conçu pour basculer la propriété Enabled
*-- des contrôles datalinkés d'un formulaire.
*-- Le code constructeur du CC recherchera le premier 
*-- contrôle datalinké, il vérifiera sa propriété Enabled,
*-- et mettra en fonction les propriétés du CC et la propriété custom 
*-- form.InEditMode de la manière appropriée. Un
*-- EditButton sdevrait se trouver après le contrôle datalinké 
*-- selon le Z-order, et la propriété Enabled de tous 
*-- les contrôles datalinkés devrait être réglées à la même valeur. 
*-- 
*-- Ecrit pour : Visual dBASE v5.5a
*------------------------------------------------------------------

this.OnClick = Class::ToggleDataControls
form.InEditMode = .f.
*-- Les instructions suivantes recherchent le premier contrôle datalinké,
*-- et les proprétés du bouton ainsi que form.InEditMode sont réglées
*-- en fonction de la propriété Enabled.
local oFirstControl
private oControl
store form.first to oControl, oFirstControl
do  
    if type("oControl.datalink") = "C"      
        form.InEditMode = oControl.Enabled      
        exit    
    endif   
    oControl = oControl.Before
until oControl.Name = oFirstControl.Name
Class::SetButtonProperties()

PROCEDURE ToggleDataControls
form.InEditMode = .not. form.InEditMode
local oFirstControl
private oControl
store Form.First to oControl, oFirstControl
do  
    if Type("oControl.DataLink") = "C"      
        oControl.Enabled = Form.InEditMode  
    endif   
    oControl = oControl.before
until oControl.hWnd = oFirstControl.hWnd
Class::SetButtonProperties()

PROCEDURE SetButtonProperties
if Form.InEditMode  
    this.Text = "View"    
    store "Select view mode" to This.StatusMessage,;  
    this.SpeedTip
else    
    this.Text = "Edit"    
    store "Select edit mode" to this.StatusMessage,;  
    this.SpeedTip
endif
Endclass && End of Editbutton Class

Jim's WINAPI - par Jim Sare

NdlR: Jim Sare est consultant/développeur à Milford, Michigan, avec 17 ans d'expérience dans l'industrie informatique (allant du micro au mainframe). Il est l'expert WINAPI sur le forum VdBASE, et il a écrit du code d'accès aux API qui a été récemment publié dans la revue dBASE Advisor.

Jim alimentera une rubrique régulière traitant de l'extension des possibilités de Visual dBASE à l'aide de l'API Windows API. Il peut être contacté sur CIS (CompuServe): 71562,413.

COMBODROP.CC: Combo déroulant automatique

L'API Windows peut être employée de manière relativement simple pour augmenter les fonctionnalités de Visual dBASE. A titre d'exemple, il est possible de forcer un ComboBox de Style 1 (DropDown) ou Style 2 (DropDownList) de dérouler sa liste lorsque l'utilisateur arrive sur le ComboBox en appuyant sur la touche de tabulation [Tab]. Cela permet d'accélérer la saisie de données. IL s'agit également d'une fonctionnalité populaire que l'on trouve dans de nombreux programmes Windows sur le marché aujourd'hui.

Une seule fonction de WINAPI, SendMessage, est utilisée dans la classe personnalisée ComboDrop pour arriver à ce résultat. La fonction SendMessage est prototypée dans le code constructeur de la classe ComboDrop. Cela permet de s'assurer que SendMessage est correctement défini lorsque le formulaire contenu le ComboBox sera ouvert. L'événement OnGotFocus est intercepté afin de dérouler la liste du ComboBox au moment approprié.

Les appels à la fonction SendMessage sont contenus dans les méthodes personnalisées Drop et PullUp. Cela permet d'appeler les méthodes à partir de n'importe quel endroit du code pour forcer la liste à se dérouler ou se refermer, selon le cas, indépendamment de la propriété DropOnGotFocus.

Pour utiliser la classe ComboDrop comme une classe ComboBox normale, il suffit de mettre la propriété personnalisée DropOnGotFocus à faux (.F.).

* COMBDROP.CC
* By: Jim Sare
* Dernière Modif: 10/15/95
* Utilisation: Set Procedure to CombDrop.CC Additive
* : Recherchez la classe ComboDrop dans la page 'personnalisés' de la 
* : palette des contrôles.
* : Placez-le sur votre formulaire et ajustez les proppriétés comme désiré.

CLASS ComboDrop(f, n) Of ComboBox(f, n) Custom
If Type("SendMessage") # "FP"   
    extern CLONG SendMessage(CHANDLE, CINT, CWORD, CLONG) User
EndIf
#ifndef WM_USER
#define WM_USER HToI("400")
#endif
#ifndef CB_SHOWDROPDOWN
#define CB_SHOWDROPDOWN WM_USER + 15
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
this.DropOnGotFocus =.T. && Drop when user tabs into ComboBox
this.Style =1 && DropDown

PROCEDURE OnGotFocus    
If this.DropOnGotFocus      
    this.Drop() 
EndIf

PROCEDURE Drop  
SendMessage(this.hWND, CB_SHOWDROPDOWN, TRUE, 0)

PROCEDURE PullUp    
SendMessage(this.hWND, CB_SHOWDROPDOWN, FALSE, 0)

ENDCLASS && ComboDrop

Dimensionnez vos applis pour le client/serveur - par Paul Mahar

NdlR: Paul Mahar est ingénieur d'essais dans l'équipe de développement de Visual dBASE. Mais il est probablement plus connu comme l'auteur de l'un des meilleurs livres sur Visual dBASE à ce jour, "Visual dBASE 5.5 Unleashed" (cf. "Ressources" plus loin dans ce numéro)....

Il s'agit du premier d'une série d'articles à propos de la réalisation d'applications Visual dBASE de façon qu'elles puissent être utilisées sur des tables Paradox (.db), ou bien portées avec un minimum d'efforts sur environnement Client/Serveur (SQL).

Annulation transposable

Pour une grande partie, annuler des enregistrements dans une table .db (Paradox), ou SQL, est similaire à l'annulation d'enregistrements dans une table .dbf, lorsque "Deleted" est à ON.

Cependant, ce n'est pas exactement la même chose, et si vous changez de format physique de données, vous devez gérer les différences.

Les pointeurs dans les .dbf...

Lorsque vous annulez un enregistrement dans une table .dbf, le pointeur reste sur cet enregistrement. Visual dBASE ne cache pas l'enregistrement avant que vous n'ayez déplacé le pointeur. La seule exception se produit lorsque vous annulez des enregistrements dans la fenêtre de visualisation de table, ou bien dans un contrôle Browse. Dans ce cas, l'enregistrement annulé disparaît immédiatement et le pointeur se déplace sur l'enregistrement suivant.

Les annulations sur tables .db et SQL fonctionnent de manière similaire au Browse. Dans la boucle SCAN suivante, certains enregistrements sont traités, alors que d'autres sont annulés. Cela fonctionne de manière satisfaisante avec des tables .dbf.

Use orders.dbf
Scan    
    If amt_paid < total      
        ***** traiter les factures  
    Else        
        Delete  
    Endif
Endscan

Pointeurs dans les .db ou SQL...

Si vous utilisez le même raisonnement tant sur une table .db que SQL, le résultat sera que vous sauterez chaque enregistrement suivant directement une annulation. Delete déplacera le pointeur en avant une fois, puis Scan le déplacera une nouvelle fois. Vous pouvez compenser cette difficulté en utilisant une boucle classique du style "Do While .not. eof()":

Use orders.db
Go Top
Do While .not. Eof()    
    If :amount paid: < :total invoice:       
        *** process invoice     
        skip    
    Else        
        Delete && implied skip  
    Endif
Enddo

Le comportement de Delete n'est pas le seul piège dont il faut être conscient lors de la migration vers les tables DB ou SQL. Dans de futurs articles, je compte vous fournir plus d'informations pour éviter des embûches courantes lorsque vous concevrez vos applications pour travailler avec des tables .db et SQL.

Visual dBASE C/S - par Ray Kiuchi

NdlR: Ray Kiuchi fait partie de l'équipe de développement de Visual dBASE. Sa spécialité concerne l'interfaçage de Visual dBASE avec le moteur base de données Borland (Borland Database Engine - BDE). Voici un article en deux parties (la seconde partie sera publiée dans le prochain numéro de la lettre VdDN) concernant l'utilisation de procédures stockées en environnement Client/Serveur (Stored Procedures). Il s'agit de code qui réside et est exécuté sur le serveur. L'un des avantages des procédures stockées est qu'elles sont indépendantes du langage utilisé sur l'outil frontal. Tous vos programmes Visual dBASE peuvent les utiliser, ainsi que tout autre programme (indépendamment de son langage) qui supporte l'accès aux procédures stockées.

Utiliser les procédures stockées - Partie I

Visual dBASE propose un mécanisme que vous connaissez pour utiliser les procédures stockées sur serveur de base de données. Si vous êtes familier avec la commande EXTERN - qui permet de déclarer les fonctions d'une DLL - vous savez déjà comment déclarer des procédures stockées. Les procédures stockées sont similaires aux fonctions de DLL en ce qu'elles existent à l'extérieur des limites de Visual dBASE. L'exécution des procédures stockées s'effectue sur le serveur de bases de données distant.

Les avantages souvent cités des procédures stockées sont:

  1. Performance - les commandes SQL sont déjà préparées. Au lieu d'employer plusieurs instructions en mode pass-thru (NdT: envoyées directement au serveur distant sans être interprétées par le BDE), vous pouvez n'effectuer qu'un seul appel au serveur.
  2. Règles de gestion procédurales centralisées - elles sont localisées dans le serveur, et non au niveau de l'application.
  3. Sécurité - le code de l'application pourrait à la limite ne jamais avoir à accéder à une table, si les procédures font tout le travail.

Quelques uns des désavantages:

  1. Encore un langage de plus - habituellement un pseudo-Pascal.
  2. Performance - n'oubliez pas que cela se passe sur le serveur.

Extraite de l'aide en ligne, voilà la syntaxe de la commande EXTERN SQL:

EXTERN SQL [<return type>] <procedure name>
( [<parameter type list>])
[<database name>]
[ FROM <sp name> ]

N'oubliez pas que les procédures stockées ne renvoient pas de valeurs comme les fonctions. Elles renvoient des valeurs par l'un des paramètres. Dans Visual dBASE, vous utilisez CPTR, CPTROUT pour identifier des paramètres que la procédure stockée modifie. La différence est que CPTR identifie les paramètres que les procédures stockées modifient, mais qu'elles utilisent également comme valeur en entrée (input et output). CPTROUT identifie un paramètre qui est modifié, mais non utilisé comme valeur en entrée (output only ).

Voici un exemple qui part du principe que vous avez installé la version Visual dBASE Client/Serveur avec le moteur local Interbase.

Dans la base de données exemple iblocal, il y a une procédure stockée appelée Dept_Budget. Voici les paramètres pour Dept_Budget:

DNO INPUT CHAR(3)
TOT OUTPUT NUMERIC(15,2)

Les types de paramètres équivalents en EXTERN SQL sont CSTRING et CPTROUT.

Ainsi, pour déclarer la procédure Dept_Budget dans Visual dBASE:

OPEN DATABASE iblocal
SET DATABASE TO iblocal
EXTERN SQL dept_budget( CSTRING, CPTROUT )

Le premier paramètre de la procédure stockée Dept_budget prend une valeur de type chaîne de caractères (string) qui identifie un numéro de département. Le second paramètre identifie la variable pour stocker une valeur numérique pour le budget extrait.

Après le prototypage par la commande EXTERN SQL, elle est maintenant déclarée comme n'importe quelle fonction de DLL, et peut être exécutée.

Pour exécuter Dept_budget:

bud = 0
dept_budget( "670", bud )
* La variable bud contient à présent le budget récupéré.

Prochain numéro, Partie II: Les détails.

Developpeur en direct - par Charles Overbeck

NdlR: Charles Overbeck est membre de l'équipe de développement de Visual dBASE chez Borland. Il est à l'origine de l'implémentation de nombre des écrans de dialogue, ainsi que de fonctionnalité de sécurité.

RPUSH.CC: Texte à gauche, Bitmap à droite

Les boutons poussoirs de Visual dBASE sont plus puissants que les boutons standards de Windows: Les boutons poussoirs de Visual dBASE vous permettent d'utiliser conjointement images et texte. Cependant, dans les formulaires Visual dBASE, l'image est toujours sur le côté droit du bouton, le texte allant à droite de l'image. Dans certains cas (par exemple une image de flèche pointant vers la droite), il peut être plus logique d'avoir l'image sur le côté droit du bouton. C'est ce que les Experts Visual dBASE (Expert formulaire, Expert état, etc.) font, le bouton "suivant" dans les dialogues créés ont leur image sur la droite.

Les boutons utilisés dans les formulaires étant les mêmes que ceux utilisés par les experts, il est donc possible d'avoir des images à droite sur les boutons poussoirs. Simplement, cette possibilité n'a pas été rendue accessible dans l'outil. Avec le code ci-dessous, vous pourrez maintenant contrôler le positionnement de l'image sur un bouton. J'ai intégré le code nécessaire dans une classe personnalisée:

CLASS ImageRightPB(FormObj,Name) OF PUSHBUTTON(FormObj,Name) Custom
this.OnOpen = CLASS::ImageRightPB_ONOPEN
this.OnDesignOpen = CLASS::ImageRightPB_ONOPEN
* OnDesignOpen entraîne l'apparition de l'image à droite même 
* lorsque l'on travaille dans le concepteur de fromulaires.

Procedure ImageRightPB_OnOpen
* le code suivant placera les images sur la partie droite 
* d'un bouton poussoir, et le texte sur la partie gauche.
*
* Avertissement: Ceci devrait fonctionner dans toutes les versions 
* de Visual dBASE 5.5 et dBASE/Windows 5.0. Il fonctionnera probablement
* dans de futures version, mais je ne peux pas le garantir.
*
* Exemple d'tilisation:
*
* 1) Copiez cette classe sans un nouveau fichier .CC, par exemple RPUSH.CC. 
* (ou encore, vous pouvez le copier dans un fichier .CC existant).
* 2) Create Form
* 3) Fichier | Contrôles personnalisés
* 4) Cliquez sur Ajouter, selectionnez RPUSH.CC
* 5) Déposez ce boutons personnalisés sur votre formaulaire.
* 6) Affecter la propriété Upbitmap du bouton à un bitmap.
* Resource #100 est un bon exemple. Par exemple,
* "Resource #100".

#define BPROP_ARRANGEMENT 2
#define BM_SETPROPERTY htoi("0406")
if TYPE("SendMessage") # "FP"   
    extern CLONG SendMessage ( CHANDLE,CINT,CWORD,CLONG ) USER
endif
SendMessage(this.hwnd, BM_SETPROPERTY, BPROP_ARRANGEMENT, 4)
* Autres valeurs admises à la place du 4, ci-dessus, sont 1, 2,
* et 3. 1 vous donne le même résultat que par défaut.
* 2 et 3 ajoute des espaces (esayez-les)
* 
ENDCLASS && End of RPUSH custom class

Réseau pratique - par Alan Frazier

NdlR: Alan Frazier est expert réseau reconnu Visual dBASE. Il installe un ensemble de 800-1000 noeuds pour le Department of Regulatory Agencies de l'état du Colorado. Cet article est le premier d'une série sur la programmation en réseau sous Visual dBASE. Le texte complet et le programme se trouvent sur le site Web VdDN.

Impression en réseau avec Visual dBASE

Ayant la chance d'avoir à développer des applications Visual dBASE destinées à fonctionner sur nos cinq réseaux Netware (ceci sans parler de RS/6000 sous UNIX), j'ai eu à passer quelques temps pour arriver à satisfaire les besoins des utilisateurs en impression sous réseau.

Les applications que nous développons sont des exécutables lancés par les utilisateurs (nous n'avons pas encore osé leur laisser la bride sur le cou en développement sous Visual dBASE). Nos applications doivent pouvoir contrôler les travaux d'impression demandés par les utilisateurs. En général, elles ne sont pas trop bizarres. Mais en ces jours d'impression proportionnelle sur imprimantes laser de haute qualité, nous avons des demandes de plus en plus difficiles à satisfaire, même avec les fonctionnalités avancées de Visual dBASE.

Échantillonner ou pas...

Nous avons dernièrement mis en place un système qui permet d'imprimer une ou plusieurs étiquettes à partir de critères sélectionnés par l'utilisateur. De plus, à l'aide de CHOOSEPRINTER(), nous permettons aux utilisateurs de spécifier l'imprimante contaient leurs étiquettes.

Les utilisateurs changeant fréquemment de fournisseurs, ils nous ont demandé de pouvoir imprimer un échantillon d'étiquette, de façon à pouvoir les ajuster. Cela nécessite de pouvoir imprimer une ou plusieurs étiquettes de test (en général avec des "xxxxxx"), puis d'arrêter l'impression sur la première ligne de l'étiquette suivante. L'utilisateur peut ajuster l'imprimé, puis il a la possibilité de redemander l'impression de l'étiquette échantillon, ou bien de passer à l'impression proprement dite.

Nous avons bien pensé employer la bonne vieille fonctionnalité des versions DOS, mais elle n'existe pas dans Crystal (du moins dans la version incluse dans Visual dBASE) ou ReportSmith.

Nous avons donc essayé un certain nombre de méthodes différentes pour imprimer une étiquette échantillon. Tout d'abord, noua avons essayé différentes méthodes permettant de n'imprimer qu'une seule étiquette, puis d'interrompre l'impression au bon endroit pour commencer l'impression de l'étiquette suivante.

Nous n'avons jamais réussi de faire fonctionner cela de manière correcte, que ce soit avec Crystal Report ou ReportSmith. Ensuite, nous avons envisagé de piloter une fusion automatique de document dans MS Word 6, en utilisant la classe OLEAUTOCLIENT() de Visual dBASE.

Cela semble intéressant à priori, et est en fait assez facile, sauf si vous ne voulez imprimer qu'une seule étiquette - ce qui ne peut être fait.

Le problème avec le fait de n'imprimer qu'un seul exemplaire, puis de s'arrêter, est que MS Word, Crystal, ReportSmith, MS Windows, MS Print Manager, Netware 3.11 Capture et Print Spooler veulent tous être le patron et envoient alors un saut de page ou un "end of print job." Mais nous avons l'idée bizarre de vouloir contrôler nous-mêmes l'impression...

Après avoir essayé différentes méthodes (dont certaines que nous n'oserons pas mentionner ici), nous avons finalement pris du recul et choisi la bonne vieille méthode: "bon ! on va programmer ça nous-mêmes". Bien que nous aimions beaucoup la classe de l'orientation objets de Visual dBASE, des événements, etc., nous regrettons tout de même la simplicité d'environnement moins sophistiqués. Après tout, Netware 3.11 est toujours un système d'exploitation réseau de look DOS. Dans DOS, nous avions la sensation d'avoir plus de contrôle sur les fonctionnalités de bas niveau, ce qui ne pouvait être contredit par Windows ou bien notre langage de programmation.

Ainsi, le bloc de code suivant constitue l'une des méthodes possibles pour imprimer des échantillons d'étiquettes. Il n'est pas très complexe, et certainement pas parfait. Mais en dehors de l'idée avancée par quelqu'un de quitter Visual dBASE et lancer le générateur d'états de dBASE IV, nous n'avons pas trouvé d'autre méthode pour imprimer des échantillons d'étiquettes en environnement réseau.

Récemment, Romain Strieff (TeamB) nous a orienté vers le document LPTPRN.HOW, qui peut être trouvé en Lib 10 (Knowledgebase) du forum VdBASE. Dans ce document, Romain suggère d'utiliser les fonctions fichiers de bas niveau de Visual dBASE pour pomper des données vers l'imprimante, contournant ainsi les drivers d'imprimante installés. C'est une utilisation remarquable pour la fonction d'écriture de bas niveau, mais cela ne nous permet pas de court-circuiter le logiciel Netware Print Spooler, qui tient absolument à imprimer la totalité du job, ou rien du tout.

Je voudrais remercier mon collègue développeur, Lori Costanzo, qui a consacré la plus grande partie d'une semaine (et une bonne migraine) pour mettre au point ce programme.

*================================================
* UNE METHODE POSSIBLE POUR IMPRIMER DES ECHANTILLONS
* D'ETIQUETTES.....
*
* (au moins ça marche)
*
* FLABELS.DBF contient les données à imprimer.
*================================================

PROCEDURE LAB_PRT
public nLine,nCount
nLine = 0
nCount = 0
nLabels = msgbox("Print Labels for Folders for New Registrations?",;
"",36) && yes/no
If nLabels = 6 && user clicks on yes        
    chooseprinter() 
    nGo = msgbox("Put Blank Labels in Dot Matrix Printer","",65)        
    If nGo = 1 && user clicks on ok         
        set console on          
        lLabel = .T. && to display different msg on first time          
        set device to file folders.prt && print to file         
        *---------------------------------          
        * Ecrire les échantillons dans le fichier d'impression           
        Do While .t.                
            If lLabel && first sample label                 
                nSamples = msgbox("Print Sample Label???","",36)                    
                lLabel = .F.                
            Else                    
                nSamples = msgbox("Print Another Sample???","",36)              
            Endif               
            If nSamples = 6 && create sample label
                @nLine,1 SAY "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                nLine = nLine + 1
                @nLine,1 SAY "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                nLine = nLine + 1
                @nLine,1 SAY "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                nLine = nLine + 1
                @nLine,1 SAY "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                nLine = nLine + 1
                @nLine,1 SAY "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                nLine = nLine + 1
                @nLine,1 SAY "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                nLine = nLine + 1
                @nLine,1 SAY " "
                nLine = nLine + 1
                @nLine,1 SAY " "
                nLine = nLine + 1
                @nLine,1 SAY " "
                nLine = nLine + 1
                @nLine,1 SAY " "              
            Else                    
                exit                
            Endif           
        Enddo           
        *---------------------------------          
        * Ecrire les étiquettes normales dans le même fichier d'impression
        Select FLABELS          
        Go Top          
        Scan                
            z ='z'              
            nCount = 0              
            @nLine,1 SAY offrgtype + " " + statefile              
            nLine = nLine + 1               
            nCount = nCount + 1             
            @nLine,1 SAY left(offering,35)              
            nCount = nCount + 1             
            If len(trim(offaddr1)) > 0                   
                nLine = nLine + 1                   
                @nLine,1 SAY offaddr1                   
                nCount = nCount + 1             
            Endif               
            If len(trim( Offaddr2 )) > 0                 
                nLine = nLine + 1                   
                @nLine,1 SAY offaddr2                   
                nCount = nCount + 1             
            Endif               
            If len(trim( Offaddr3 )) > 0                 
                nLine = nLine + 1                   
                @nLine,1 SAY offaddr3                   
                nCount = nCount + 1             
            Endif               
            cZip = space(10)                
            If Len(Trim(Offcity)) + len(trim(Offstate)) +;                  
                len(trim(left(Offzip,5))) > 0                    
                nLine = nLine + 1                   
                If len(rtrim(offzip)) > 6                        
                    cZip = offzip                   
                Else                        
                    cZip = left(offzip,5)                   
                Endif                   
                @nLine,1 SAY trim(Offcity) + ", ";                    
                + trim(Offstate) + " " + cZip                 
                nCount = nCount + 1             
            Endif               
            nLine = nLine + (10-nCount)         
        Endscan         
        nLine = nLine + 1           
        @nLine,1 SAY ""           
        set console on          
        set device to screen        
    Endif       
*---------------------------------      
* utilisez une comande DOS pour écrire vers LPT1 (or 2...)       
* La commande Netware Capture est utilisée pour rediriger le port 
* vers la file d'attente Netware    
    Run CAPTURE L=1 Q=MATRIXQ1 AU NFF NB NT TI=5 C=1 NNOTIFY        
    Run type folders.prt > lpt1  
Endif   
Select FLABELS  
USE
Return
*==============================================

Dans le prochain numéro, Alan traitera de la sélection du bac des enveloppes sur une imprimante laser en réseau !!

La filière interne - par Charles Miedzinski

NdlR: Charles est l'un des rares anciens d'Ashton-Tate encore chez Borland. Bien qu'il soit raisonnablement bon en nombre de langages, il est passionné par dBASE depuis dBASE II, au début des années 80. Il est ingénieur consultant dans l'équipe de support technique de Borland, Wizop des forums dBASE sur CompuServe, et coordinateur des field tests dBASE. La rubrique de Charles figurera de manière régulière dans VdDN, présentant ainsi la perspective Visual dBASE "de l'intérieur".

dBASE - premières:

Un patch Inline (version intermédiaire) et une "liste de problèmes connus"

Historiquement parlant, la livraison de chaque nouvelle version de dBASE a été suivie d'une version intermédiaire, dont l'objectif est de résoudre les problèmes éventuels découverts après la mise à disposition du produit. Dernièrement, l'équipe de développement dBASE a achevé la préparation du patch de l'inline Visual dBASE 5.5a. Il s'agit de la première fois dans l'histoire de dBASE qu'une technologie de patch est employée plutôt que la livraison d'une nouvelle version complète. Employer une technologie de patch permet une distribution facilitée et plus rapide. Le patch Visual dBASE 5.5a est disponible en ce moment pour déchargement sur le forum Visual dBASE sur CompuServe, sur le serveur FTP et le site WEB de Borland.

Pourquoi certaines choses sont corrigées...

Le processus de mise sur pied d'une inline est complexe. Les participants viennent de toute l'équipe dBASE. La demande est pilotée essentiellement par le support technique Visual dBASE et par les utilisateurs eux-mêmes. Chaque bogue est étudié en fonction d'un certain nombre de critères, dont le degré de visibilité, la fréquence avec laquelle les utilisateurs le rencontrent, et le niveau de risque dans la solution du problème.

Le projet de "fix plan" est en principe soumis à des facteurs de risques - des bogues de niveau de risque plus élevé entraînent souvent des retards et délais de disponibilité de la solution. Cependant, éliminer ces bogues de niveau de risque plus élevé peut résulter en un meilleur produit, plus stable.

Une autre "première" pour dBASE est que cette Inline a résolu plus de problèmes que jamais dans les précédentes versions, et que beaucoup plus de bogues de niveau de risque élevé ont fait partie de la liste.

"Known Problems List" Postée...

Plusieurs développeurs ont demandé qu'une "liste de problèmes connus" soit publiée par l'équipe de Visual dBASE , avec des solutions de contournement lorsque possible. Cette liste est à présent disponible sur nos sites de téléchargement habituels: sur le forum VdBASE, bibliothèque 10 (Knowledgebase), fichier VDBPROBS.TXT, ou bien sur les sites Web Borland dBASE ou Internet.

Soumettre un rapport de bogue...

Si vous rencontrez un problème dont vous pensez que la source serait un bogue dans Visual dBASE, la méthode idéale pour le signaler est d'utiliser le Customer Problem Report (CPR). IL s'agit d'un formulaire disponible au déchargement à partir du forum sur CompuServe. Vous pouvez ensuite me faxer directement le rapport chez Borland.

Être en mesure de reproduire le problème est un élément essentiel. Essayez de restreindre la manifestation du bogue au minimum de code possible, et indiquez les étapes nécessaires pour reproduire le problème.

Vous trouverez parfois que le bogue n'est pas reproductible en dehors du contexte de votre application, ou bien vous pouvez ne pas avoir les connaissances nécessaires pour le "traquer". Si vous avez des difficultés, le TeamB sur CompuServe sera heureux de vous venir en aide. Ou encore, envoyez-nous le CPR, et un ingénieur de l'équipe de support technique de Borland vous assistera (NdT: aux US et en anglais).

Enfin, félicitations à Les Squires et à Alan Katz pour le lancement d'une lettre technique Visual dBASE centrée sur les besoins des développeurs Visual dBASE.

Ressources

NdlR: Dans chaque numéro, VdDN essaiera de vous communiquer les références de quelques ressources utiles (publications, classes personnalisées, add-ons de tierce partie, fournisseurs, etc.) qui, nous l'espérons, enrichiront votre connaissance de Visual dBASE, vous aideront à développer des applications sophistiquées, ou à améliorer votre productivité.

Ces "capsules" de références et de mini revues seront regroupées en une bibliothèque de ressources centrale sur notre site Web.

** Newsletter

Une autre newsletter! Excellent. Écrite par Chris Hoffman et publiée par Borland. Pour avoir toutes les nouvelles sur Visual dBASE, souscrivez aux deux lettres, celle de Borland et celle du VdDN! Vous pouvez vous inscrire sur le site Web de Borland:

http://www.borland.com/Connect/Interact.html

** Livre

Visual dBASE 5.5 Unleashed (ISBN 0-672-30877-0), par Paul Mahar. SAMS, 1995. La meilleure revue à ce jour tant des fonctionnalités que de la programmation de Visual dBASE. Disponible sur la librairie Macmillan Internet bookstore (http://mcp.com), les librairies les plus populaires (aux US), y compris Barnes and Noble, et par le Zac Catalog (voir ci-dessous).

** Ressources de tierce partie

Zac Catalog (sous la direction de Len Dozois) prépare un catalogue dédié à Visual dBASE. Il viendra s'ajouter aux catalogues déjà disponibles pour Clipper, Delphi et Visual Basic. D'une manière générales, Zac propose des environnements de programmation et une pléthore d'add-ons de tierce parties, des VBX, etc. pour enrichir et faciliter votre travail de développement. Zac propose également une promotion sans pareille sur Visual dBASE: Visual dBASE et le Compilateur pour le prix du Compilateur seul !

Internet E-Mail: len@zaccatalog WWW Site: Http://www.zaccatalog.com Tél: 1-800-4SOFTWARE (1-800-476-3892) Fax: UK 0800.965.154 International: +1.617.551.0860

Dans le prochain numéro

** Multimédia (suite) - par Adam Menkes (série)
Classe Formulaire personnalisée - Bitmap en arrière-plan
** Classe Custom - par Ken (Zak) Chan
Grouper-par-champs à l'aide de AssocArray
** En réseau - par Alan Frazier
Imprimer des enveloppes.

De l'éditeur - Les Squires

La lettre technique VdDN est sponsorisée par le World Wide Developer Network (WWDN) de Boston, Massachusetts, USA.

WdDN est consacré à l'information des développeurs professionnels en bases de données (tant les consultants que les salariés d'entreprises) en ce qui concerne les manifestations éducatives, les meetings, les opportunités professionnelles, les événements mondiaux, les bons articles, des conseils techniques, les produits nouveaux et indispensables, etc.

Constituant un réseau électronique, organisé par centre d'intérêt des développeurs, plutôt que régional, WdDN est également un centre d'échanges où les développeurs peuvent aborder des sujets d'importance mondiale avec leurs pairs dans le monde entier. Les destinataires sont d'accord pour répondre par courrier électronique de manière régulière à des sondages concernant leurs orientations, leurs opinions et besoins.

Pour ceux qui n'ont pas de club d'utilisateurs/développeurs dans leur région, WdDN constitue un véhicule où les individus peuvent se porter volontaires pour contribuer à quelque chose de plus vaste qu'eux-mêmes. Plus de 16,000 personnes dans le monde entier participent aux discussions sur Microsoft Access, CA-Clipper, Microsoft FoxPro, Visual dBASE, le Software Change Management, et Software Quality and Productive.

La lettre technique est distribuée mensuellement par courrier électronique CompuServe, Internet, FidoNet, et d'autres passerelles électroniques (pour la version anglaise - la version française est disponible en format HTML sur les sites Web du WdDN et de François Ghoche). Elle est gratuite pour les développeurs individuels. Des tarifs modestes sont applicables aux entreprises pour les offres d'emploi et les annonces de produits de tierce partie. Les opinions exprimées ne concernent que leurs auteurs respectifs. Tous les articles sont sous copyright WWDN, sauf indication contraire, mais ils sont libres de droits pour les groupes d'utilisateurs ou pour publication ou redistribution par les publications non commerciales, à la condition qu'une mention d'origine citant le WWDN soient incluse. (NdT: la traduction française est sous copyright spécifique François Ghoche)

Changement d'adresse:

  1. Envoyez un e-mail à partir de votre ancienne adresse.
  2. Indiquez la nouvelle adresse.

Ajouter des abonnés à la liste:

  1. Envoyez un E-mail à vdb@WJI.Com à partir de l'adresse e-mail destinataire de la newsletter.
  2. Incluez le texte VDB-YES dans le Sujet: ou le corps du Message.

Annuler des abonnés:

  1. Envoyez un E-mail à vdb@WJI.Com.
  2. Incluez le texte VDB-NO dans le Sujet: ou le corps Message.

Anciens numéros et téléchargements:

  1. FTP vers ftp.wji.com.
  2. Login comme FTP.
  3. Utilisez votre ID comme password.
  4. cd vdb.
  5. Copiez les anciens numéros et les fichiers à décharger en fonction de leur disponibilité.

Version française

http://ourworld.compuserve.com/homepages/FGhoche/Lettre_F.htm

Word Jenny, Inc. 48 Copeland Street, Watertown (Boston), Massachusetts USA LSquires@WJI.Com //-Checked real-time. 73020.3435@compuserve.com //-Checked once a week. www.wji.com 617-924-5401

© copyright 1996, World Wide Developer Network (WWDN)

version française © copyright 1996, François Ghoche


En savoir plus :


François Ghoche vous propose les services d'un expert, ou d'une équipe d'experts, pour un projet précis, ou bien pour un temps déterminé, ou encore pour un service spécifique réparti dans le temps.


* (® ATON et le logo ATON sont une marque déposée, ainsi que dBASE; tous droits réservés pour leurs détenteurs respectifs - © copyright 1992-1996, François Ghoche)

fg - dernière MàJ: 08/03/96