#1 Fri 02 March 2001 01:11
- Claude Paquet
- Invité
Programation avenue
Bonjour a tous,
j'ai deux problemes avec la programmation Avenue.
Probleme de programmation
Voici deux problemes de programmation relies a un script en langage Avenue.
Probleme 1
Le premier probleme concerne l'utilisation d'une variable numerique capter
dans une boite de message et utilisee pour des calculs. Exemple.
Voici la table :
PerturbationAnnee de perturbationÂge de la perturbation
CPR1978
CT1998
PLR1986
'**********Prealablement, une boite sous forme de liste capte l'annee
actuelle
liste = { 1999 , 2000 , 2001 }
boite = msgbox.choiceasstring( liste, Choisir l'annee actuelle , Annee )
msgbox.info( Vous avez choisi ++boite, Choix )
'**************Utilisation de l'annee choisie
ori=v.FindField( Âge de la perturbation )
cal1 = ((boite) - ([Annee de perturbation].AsNumber))
v.calculate (cal1, ori)
v.refresh
'************Donc, par exemple, si nous sommes en 2001, pour le premier
enregistrement, l'age de la perturbation devrait etre 23.
'************Si j'ecris 2001 directement au lieu boite, le calcul se fait
tres bien alors que si j'utilise la variable, ca ne marche pas
Donc la question 1 est de savoir comment utiliser une variable numerique
capter dans une boite de message.
Probleme 2
Le probleme 2 consiste a apporter une table dans un projet. Dans l'exemple,
a l'aide de la commande .summarize , une table de sommation est creee et
celle-ci s'enregistre dans le meme dossier que le projet. Cependant, je ne
connais pas la commande pour mettre cette table dans le projet. Si j'ajoute
la table dans le projet en dehors du script(a la main), il n'y a pas de
probleme pour travailler avec la table par la suite. Exemple
Voici la table avant la sommation :
EssenceVolumeSuperficie
EE2310
SS3412
EE405
ES506
SS2020
Voici le script :
'****************Ouvrir la table
t=av.getactivedoc
'****************Rendre la table en Vtab
v=t.getvtab
v.StartEditingWithRecovery
e = v.FindField( Essence )
vo= v.FindField( Volume )
s = v.FindField( Superficie )
newVTab = v.Summarize( sommation .AsFileName, dBASE, e,{vo, s },
{ #VTAB_SUMMARY_SUM, #VTAB_SUMMARY_SUM })
'*******Jusqu'ici, il n'y a pas de probleme, la table suivante(sommation)
est creee et cette table est enregistree dans le meme dossier que le projet
EssenceVolumeSuperficie
EE6315
SS5432
ES506
'******Maintenant, il manque la commande pour apporter cette table dans le
projet
????????????????????????????
'******Par la suite, une fois que la table est dans le projet, on peut la
manipuler
matable= av.getproject.finddoc( zxz.dbf )
maTable.GetWin.Open
lavtab = matable.getvtab
matable.setname(lavtab.getname)
lavtab.seteditable(false)
Donc, le probleme deux consiste a apporter une table dans un projet.
Claude Paquet
Tech. de la faune
Ministere des ressources naturelles
Direction de l'environnement forestier
880 ch. Sainte-Foy, local 5.50
(Quebec), Quebec G1S 4X4
#2 Tue 06 March 2001 01:14
- Robin Prest
- Invité
Re: Programation avenue
Bonjour,
Je ne connais pas votre niveau en langage Avenue, mais un conseil ne fait
pas de mal . Utilisez l'execution pas-a-pas. C'est un peu long, mais ca a le
merite de localiser les erreurs. La plupart du temps les erreurs sont dues a
la classe de l'objet que vous utilisez (view, table, vtab, ftab, theme,
etc). Une bonne requete pour verifier que l'objet manipule est le bon :
Admettons que vous ayez un objet O que vous souhaitez manipuler :
msgbox.info(O.getclass.getclassname.asstring, Type d'objet )
Si votre objet est un theme, il vous renverra theme , si c'est une vtab, il
vous renverra vtab , ...et ainsi de suite.
(je ne suis pas sur que le asstring est necessaire)
Cela vous sera utile si jamais vous croyez utiliser un objet (string) et que
vous avez oublie quelque chose comme un asstring (cf reponse de M.
Vasquez)
Cordialement. RP
#3 Tue 06 March 2001 01:15
- Vasquez Mickaël
- Invité
Re: Programation avenue
Probleme 1 :
si tu ecris cal1 = ((boite) - ([Annee de perturbation].AsNumber)) , ce que
va recevoir Arview, c'est effectivement ((boite) - ([Annee de
perturbation].AsNumber)). Or, boite ne signifie rien pour lui.
Il faut donc ecrire (( + boite.asstring + ) - ([Annee de
perturbation].AsNumber))
Probleme 2
myTable=Table.Make(newVTab)
av.GetProject.AddDoc(mytable)