Form

Résolu
Domatreal Messages postés 14 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 9 août 2005 - 26 avril 2005 à 11:24
cs_wardaty Messages postés 5 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 août 2005 - 9 août 2005 à 13:13
Salut

Je suis un novice en Visual FoxPro. J'ai la version 9.0. Je programme par plaisir. J'ai creer une forme avec laquelle j'ouvre un fichier et j'aimerais retourner le nom de ce fichier dans une textbox. Meme chose pour creer une table DBF. J'aimerais un peu d'aide pour faire cela. Ca a l'air tout simple et pourtant...
Merci d'avance

8 réponses

michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
5 mai 2005 à 14:38
Domatreal,

tu trouveras de nombreux exemples d'utilisation de la listbox dans l'aide, et dans les Samples fournis (taskpane > solutions Samples > Controls > Listbox, et aussi Foundation Classes > Use MoverList boxes for selecting data)

Celà dit, le code que tu donnes pose les problèmes suivants:

le nommage des variables - tu en utilises 3, qui sont m, tempfld, et maxlen
pour le m, il ne faut jamais l'utiliser, car c'est le préfixe qui permet à VFP de reconnaitre une variable mémoire d'un champ qui porterait le même nom. Par exemple, si une table matable a un champ monchamp1, que tu fais un scatter memvar, alors m.monchamp1 sera la variable mémoire créée par VFP qui contiendra le contenu copié depuis matable.monchamp1
(voir à ce sujet l'article de Robert Plagnard sur le site d'AtoutFox)
autant prendre les bonnes habitudes : déclaration de la portée de la variable, et bon nommage

local lCtempfld && le nom du champ
lCtempfld= "" && ou bien store "" to lCtempfld

tu trouveras dans l'aide un chapitre consacré aux conventions de nommage (Reference>General Reference>Naming conventions)

Et surtout, autre gros problème, ta façon d'utiliser la syntaxe select:
select A date de l'époque où Dbase (le grand ancètre de VFP) ne pouvait pas nommer les alias ouverts, et on passait de l'un à l'autre par select A et select B
aujourdhui, tu vas ouvrir tes tables par la syntaxe
use matable1.dbf in 0 alias celle_ci order cet_ordre
use matable1.dbf in 0 again alias celle_ci_encore order cet_autre_ordre
use matable2.dbf in 0 alias celle_la order cet_ordre

etc, etc..
et select celle_ci
select celle_la
select celle_ci_encore
3
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
26 avril 2005 à 22:03
Bonjour Domatreal,

Pour qu'on puisse te répondre, est-ce que tu peux préciser comment tu ouvres ce fichier? et quel est le type de ce fichier?

Pour créer ta table dbf, regarde l'aide de CREATE TABLE:
create table c:\tests\matable.dbf (monchamp1 C(15), monchamp2 I) par exemple...

Si tu es novice en VFP, en attendant que l'aide soit traduite en français, tu peux télécharger l'aide de VFP6 sur le serveur FTP de l'association AtoutFox, ça te donnera des indications qui sont encore valables...
0
Domatreal Messages postés 14 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 9 août 2005
27 avril 2005 à 09:31
Bonjour Michelatoutfox

Tout d'abord merci pour ta reponse.
Je cherche a convertir n'importe quel fichier textes ou autres en DBF. Je ne souhaite pas utiliser l'option import. Je peux le faire automatiquement par un program mais j'aimerais le faire via une form (Oriente Objet).
J'utilise ces fonctions dans mon program:
FInput=GETFILE('CSV',"CSV File",'Open') **pour un fichier CSV
CREATE TABLE testtable (filler c(1))
*** emplacement pour routine creer des champs
APPEND FROM (fInput) TYPE DELIMITED

Voila en gros le principe et je ne t'ai pas envoye ma routine pour creer les champs.

Domatreal
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
28 avril 2005 à 14:34
Domatreal,

il ne faut pas confondre Orienté Objet et utilisation d'un form. Tu peux parfaitement créer des objets non visuels dans des prg, et faire de la programmation OOP sans jamais utiliser un form ; et si tu as un des prog en procédural, et que depuis ton form, tu les appelles avec leur fonctionnement habituel, peut-on parler d'orienté objet??

Pour ta question, si je comprends bien, ton prog te convient. Alors, pourquoi ne pas le mettre dans la méthode click d'un commandbutton de ton form, et, en admettant que tu aies un textbox nommé txtFileName par exemple, tu aurais dans ce click:
FInput=GETFILE('CSV',"CSV File",'Open') **pour un fichier CSV
this.parent.txtfilename.value=iif(!empty(finput),finput,"Pas de fichier ouvert")

Pour la création de la table, comment veux-tu faire? on choisit le nom du fichier en saisie, on choisit les noms des champs, si oui, en choix libre ou dans une liste préétablie, si liste préétablie, où est-elle stockée, etc...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Domatreal Messages postés 14 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 9 août 2005
3 mai 2005 à 11:04
Salut MichelAtoutFox,

Pour la creation de ma table, je choisis le nom du fichier en saisie, avec le meme principe que pour ouvrir un fichier texte.
FOutput=GETFILE('DBF',"DBF File",'Create')
Pour les champs, et en general, les fichiers texte contiennent les noms des champs sur la premiere ligne.
Dans ce cas-la, je lis et saisit la premiere ligne de mon fichier (petite procedure) avec des fonctions C de bas niveau (Fseek, fopen, Fwrite...). Je retourne alors le nombre des champs.
Je cree ensuite une table vide (tablevide.dbf) avec mon nombre de champs avec 255 en longueur.
J'amene ensuite mon fichier texte dans ma table vide.
Ensuite je n'ai qu'a changer le nom de mes champs avec MODIFY STRUCTURE
Mais comment faire avec une liste preetablie ? et comment calculer la longueur maximum d'un champ?

Autrement l'aide VFP en francais m'est bien utile. Merci.

Domatreal
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
4 mai 2005 à 10:56
Domatreal,

Si je comprend bien, tu as toujours des champs Caractère, tes données ne sont pas d'un autre type. Et tu veux simplement renommer tes champs, tu peux le faire par la commande ALTER TABLE (regarde en fin de l'ide la syntaxe du RENAME COLUMN).

Imaginons que tu crées ta table avec des champs qui au départ s'appelleraient champ1, champ2, etc...
Imaginons que ces noms soient utilisés pour peupler un listbox1
Imaginons que les noms autorisés pour tes champs soient contenus dans un dbf, qui serve à peupler un listbox2
Et que tu permette (drag and drop, ou bien bouton de validation) d'associer 1 élément du listbox1 à 1 élément du listbox2, en controlant l'unicité des choix.

Est-ce que ça te semble convenir au choix des noms dans une liste préétablie ?

Pour la longueur maximale d'un champ caractère, il ne s'agit pas de calcul, mais de choix en fonction des données qui y seront stockées : 10 caractères pour un numéro de téléphone français, c'est suffisant, mais pas pour une ligne d'adresse (mieux vaut 35 ou 50)
0
Domatreal Messages postés 14 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 9 août 2005
5 mai 2005 à 11:13
MichelAtoutFox

C'est vrai toutes mes donnees sont de type caractere.
Cela semble me convenir au choix des noms dans une liste preetablie, mais je ne sais comment utiliser une listbox. As-tu quelques exemples simples sur lesquels je puisse m'exercer?
Pour la longueur maximale des champs, j'ai fait cette petite procedure:
* A est ma table principal et B est ma table contenant ma structure (creee de A en faisant Copy Stru Extended to )


m=1
FOR m=1 TO nbMaxFld
tempfld=FIELD(m)
INDEX on LEN(TRIM(&tempfld)) TAG sortfld DESCENDING
MaxLen=LEN(TRIM(&tempfld))
SELECT B
GO m
IF Maxlen<>0
replace field_len WITH MaxLen
ELSE
replace field_len WITH 1
ENDIF
SELECT A
NEXT m

Merci

Domatreal
0
cs_wardaty Messages postés 5 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 août 2005
9 août 2005 à 13:13
bonjour,
je suis débutante en visual fox pro,et j'aimerais bien voir un exemple ou bien un mini projet pour savoir comment programmer avec foxpro
merci
0
Rejoignez-nous