ATOUTFOX
    COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO

Forum AtoutFox

Le forum AtoutFox

Forum

RSS © www.atoutfox.org - Forum

Re: erreur de compilation executable
Merci beaucoup cela fonctionne

@+



Fri, 18 Aug 2017 09:10:02 GMT

Re: erreur de compilation executable
ajoute dans le code de ces écrans
[vfp]
external array les_tps
[/vfp]
ça dit au compilateur que le tableau est défini ailleurs


Fri, 18 Aug 2017 09:10:02 GMT

erreur de compilation executable
Bonjour

Lors de la compilation j'ai une erreur avec comme message

Erreurs dans Formulaire d:\backup\backup 41\lag.scx:
Inconnu LES_TPS - Non défini
Erreurs dans Formulaire d:\backup\backup 41\pods.scx:
Inconnu LES_TPS - Non défini
Erreurs dans Formulaire d:\backup\backup 41\hot.scx:
Inconnu LES_TPS - Non défini
Erreurs dans Formulaire d:\backup\backup 41\poe.scx:
Inconnu LES_TPS - Non défini

LES_TPS est une variable tableau que j'ai défini dans le form de lancement en public et réutilisé dans d'autre form
je ne comprend pas d'où viens le problème

Merci de votre aide
@+




Fri, 18 Aug 2017 09:10:02 GMT

Re: Propriété sous forme de tableau dans un formulaire
Bonsoir Damonzon,

cela ne marche pas parce que la propriété n'existe pas : tu essaies de mettre
une valeur dedans et tu as une erreur. Ou simplement tu ne la vois pas parce que
tu as sélectionné quelque chose comme 'couleur des propriétés personnelles"?

Dans l'IDE, tu ouvres ton formulaire (qui ne doit pas être en lecture seule !),
dans le menu 'formulaire', tu sélectionnes nouvelle propriété. Tu lui donnes un
nom avec les dimensions entre crochets (pas de parenthèses) exemple :
essai[2,2]. Cliques Ok et la propriété doit apparaitre dans l'onglet 'autre' de
la fenêtre propriétés du formulaire.

Si cela ne fonctionne pas, je donne ma langue à mes chats !

Bonne soirée
Jean à Grenoble

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Thu, 17 Aug 2017 09:10:02 GMT

Re: Propri=c3=a9t=c3=a9 sous forme de tableau dans un formulaire
Pareil.
Sinon, la réponse de Francis était excellente, la seule précision étant
que la commande est à mettre dans l'init, et pas dans le addproperty.
JC

Le 15/08/2017 à 17:27, Marc Thivolle a écrit :
> Je ne comprends pas ce qui ne fonctionne pas. J'ai utilisé cette méthode pendant des années pour définir des propriétés tableaux dans mes classes.
>
>
>

Tue, 15 Aug 2017 09:10:02 GMT

Re: Propriété sous forme de tableau dans un formulaire
Je ne comprends pas ce qui ne fonctionne pas. J'ai utilisé cette méthode pendant des années pour définir des propriétés tableaux dans mes classes.



Tue, 15 Aug 2017 09:10:02 GMT

Re: Propriété sous forme de tableau dans un formulaire
bonjour Marc,
J'ai essayé votre solution, mais ca n'a pas marché.
Merci.
Damonzon.



Tue, 15 Aug 2017 09:10:02 GMT

Re: Propriété sous forme de tableau dans un formulaire
bonjour Marc,
J'ai essayé votre solution, mais ca n'a pas marché.
Merci.
Damonzon.



Tue, 15 Aug 2017 09:10:02 GMT

Re: Propriété sous forme de tableau dans un formulaire
Bonjour,

Dans l'éditeur de propriétés/méthodes tu tapes dans le nom MonTableau[1,2]. Attention : les cellules du tableau sont initialisées à .F. Il est donc nécessaire de les redéfinir dans la méthode init de la classe.


Mon, 14 Aug 2017 09:10:02 GMT

Re: Propriété sous forme de tableau dans un formulaire
Bjr Francis, j'étais en province. En fait il s'agit d'ajouter une propriété a travers le menu principal de vfp. New property, en définissant en même temps les dimensions du tableau[n,n]. Ex:à structure[1, 2]. Merci d'avance.


Mon, 14 Aug 2017 09:10:02 GMT

Re: Exécution d'une formule dans une feuille Excel
Deux solutions :

1 - Remplacer la ligne
[VFP]
lcFormula = [=SOMME(] + CHR(69 + lni) + ALLTRIM(STR(m.lnBeginRange)) +[:] + CHR(69 + lni) + ALLTRIM(STR(m.Lig)) + [)]
[/VFP]
par la ligne
[VFP]
lcFormula = [=SUM(] + CHR(69 + lni) + ALLTRIM(STR(m.lnBeginRange)) +[:] + CHR(69 + lni) + ALLTRIM(STR(m.Lig)) + [)]
[/VFP]

2 - Remplacer la ligne
[VFP]
xlSheet.Cells(m.lig+1,5+lni).Formula = [&lcFormula]
[/VFP]
par la ligne
[VFP]
xlSheet.Cells(m.lig+1,5+lni).FormulaLocal = [&lcFormula]
[/VFP]

Historiquement le langage VBA Excel accepte les fonctions dans leurs dénominations anglaises. Il est maintenant possible d'utiliser les noms français en appelant la fonction VBA suffixé par Local (FormulaLocal dans le cas présent).

NB : pas facile de débugger quand on ne possède ni le modèle Excel référencé dans le source ni un fichier de test pour alimenter le tableau.




Mon, 14 Aug 2017 09:10:02 GMT

Exécution d'une formule dans une feuille Excel
Bonjour à Tous,
J'utilise OLE Automation pour renseigner une feuille Excel à partir de VF. Cette feuille contient des colonne montant. A la fin, je fais des totaux à l'aide d'une formule de cellule que j'ai pu vérifiée est correcte. Cependant cette formule n'est pas exécutée. Pour qu'elle soit exécutée, il faut que je parte sur la feuille Excel, je clique sur la cellule qui contient la formule et ensuite je clique dans la plage à sommer.
Quelqu'un pourrait-il m'indiquer comment procéder pour que ma formule s'exécute automatiquement sans intervention sur la feuille Excel.
Sinon je serais obligé de faire le calcul et remplir les cellules des totaux moi même.

Merci pour vos réactions.

Le code est le suivant :

CLEAR ALL
LOCAL oExcel, tmpsheet, xlBook, xlSheet, lnBeginRange, Lig
tmpsheet = CREATEOBJECT('excel.application')
oExcel = tmpsheet.APPLICATION
oExcel.SheetsInNewWorkbook = 1
oExcel.Workbooks.CLOSE
oExcel.Workbooks.ADD("ReleveBilan_Mod.xltx") && modele de document Excel
xlBook = oExcel.ActiveWorkbook.FULLNAME
xlSheet = oExcel.activesheet
xlSheet.NAME = "Releve de Compte"
oExcel.visible = .t.
*
xlSheet.Range([C4]).Select
xlSheet.Cells(4,3).Value = [NOM DU CLIENT : GRAS-SAVOYE]
xlSheet.Cells(5,1).Value = [RELEVE DE COMPTE CLIENT 2017]
*
IF !used('tmp_upd_rcdet')
USE tmp_upd_rcdet IN 0
ENDIF
Lig = 7
lnBeginRange = Lig+1
SELECT tmp_upd_rcdet
SCAN
lig=lig+1
xlSheet.Cells(lig,1).Value = lig-7
xlSheet.Cells(lig,2).Value = tmp_upd_rcdet.RCD_DTEBRD
xlSheet.Cells(lig,3).Value = tmp_upd_rcdet.RCD_NH_NUM
xlSheet.Cells(lig,4).Value = tmp_upd_rcdet.RCD_NATPRE
xlSheet.Cells(lig,5).Value = tmp_upd_rcdet.RCD_NOMCLI
xlSheet.Cells(lig,6).Value = tmp_upd_rcdet.RCD_MNTBRD
xlSheet.Cells(lig,7).Value = tmp_upd_rcdet.RCD_MNTACQ
xlSheet.Cells(lig,8).Value = NVL(tmp_upd_rcdet.RCD_MNTBRD,0)-NVL(tmp_upd_rcdet.RCD_MNTACQ,0)
ENDSCAN
FOR lni = 1 TO 3
lcFormula = [=SOMME(] + CHR(69 + lni) + ALLTRIM(STR(m.lnBeginRange)) +[:] + CHR(69 + lni) + ALLTRIM(STR(m.Lig)) + [)]
xlSheet.Range(CHR(69 + lni) + ALLTRIM(STR(m.Lig+1))).Select
xlSheet.Cells(m.lig+1,5+lni).Formula = [&lcFormula]
ENDFOR


Mon, 14 Aug 2017 09:10:02 GMT

Re: Propriété sous forme de tableau dans un formulaire
Damonzon,

suite :

je relis ton message :


> > LPARAMETERS cPropertyName, eNewValue, nVisiblity, cDescription

tu cherches a surcharger la méthode addproperty() ???

ma réponse était dans n'importe quelle méthode ou événement par exemple init()

mais a priori tu veux faire autre chose en surclassant addproperty() ?

svp donner un bout de code pour comprendre mieux la demande

Cordialement
Francis


Sat, 12 Aug 2017 09:10:02 GMT

Re: Propriété sous forme de tableau dans un formulaire
Damonzon,
relire ma réponse... "explicite"
car dans ton code il manque des " = guillemets
[vfp]
thisform.AddProperty("astructure[1,2]")
[/vfp]
suffisamment explicite ?
Cordialement
Francis

Le sam. 12 août 2017, 15h30 Damonzon a écrit :
> Merci Francis, j'ai du m'y prendre mal, ca n'a pas marché. Voici comment j'ai procédé
> LPARAMETERS cPropertyName, eNewValue, nVisiblity, cDescription
> thisform.AddProperty(astructure[1,2]) dans AddProperty du Formulaire.
>
> Merci d'être plus explicite.
> Damonzon.



Sat, 12 Aug 2017 09:10:02 GMT

Re: Propriété sous forme de tableau dans un formulaire
Merci Francis, j'ai du m'y prendre mal, ca n'a pas marché. Voici comment j'ai procédé
LPARAMETERS cPropertyName, eNewValue, nVisiblity, cDescription
thisform.AddProperty(astructure[1,2]) dans AddProperty du Formulaire.

Merci d'être plus explicite.
Damonzon.



Sat, 12 Aug 2017 09:10:02 GMT

Re: Propriété sous forme de tableau dans un formulaire
Bonjour Damonzon,

[vfp]
thisform.AddProperty("propertie[n,n]")
[/vfp]

Cordialement
Francis

Le sam. 12 août 2017, 12h21 Damonzon a écrit :
> Chers Collègues,
> Je voulais créer une propriété dans mon formulaire sous forme de tableau comme suit : propertie[n,n].
> Comment faire?
> Merci d'avance à tous.
> Damonzon.




Sat, 12 Aug 2017 09:10:02 GMT

Propriété sous forme de tableau dans un formulaire
Chers Collègues,
Je voulais créer une propriété dans mon formulaire sous forme de tableau comme suit : propertie[n,n].
Comment faire?
Merci d'avance à tous.
Damonzon.


Sat, 12 Aug 2017 09:10:02 GMT

probleme automation avec Excel
\vfp
Bonjour,

Jusqu'à hier soir l'automation avec Excel fonctionnait bien. J'ai
essayé avec Word et ca fonctionne bien

avec Excel

lo = createobject("excel.application") j'ai les 2 erreurs suivantes

dans une 1ere fenetre j'ai

OLE error code 0x8001010a: Unknown COM status code

et dans une seconde fenetre j'ai

Report Tools Add-in

Error:Argument ou appel de procédure incorrect

apres avoir exécuté dans une fenetre de cmd administrateur

Excel /regserver proposé par Eric Den Doop

ca ne fonctionne pas

Une réparation rapide d'Office et ca ne fonctionne toujours pas
Une réparation en ligne et ca ne fonctionne pas

restauration du systeme au 1er aout et toujours ca ne fonctionne pas

bref je ne sais plus quoi faire d'autre que de désinstaller/réinstaller
office

Avec Word ca fonctionne

L'erreur avec aError() donne

The error provided the following information

1426
OLE error code 0x8001010a: Unknown COM status code.
8001010a: Unknown COM status code
..NULL.
..NULL.
..NULL.
..NULL.

--
a+ Eddy
Merci de partager avec moi votre immense savoir que je me ferai plaisir
d'absorber... il va de soi que je vais vous en laisser un peu
Politesse et savoir vivre oblige ;0)

---
This email has been checked for viruses by AVG.
http://www.avg.com

Sat, 05 Aug 2017 09:10:02 GMT

Re: Exécuter un script python depuis VFP
Merci Marco


Wed, 02 Aug 2017 09:10:02 GMT

Re: Exécuter un script python depuis VFP

Bonjour à tous Il est ma première collaboration dans ce forum avec l'aide de notre ami « Google Translate ». (Je l'espère aussi apprendre un peu le français!) Je me suis souvenu de cette façon d'utiliser un serveur com pour exécuter du code python peut être ce que vous avez besoin (traduit par Google):

https://groups.google.com/d/msg/publicesvfoxpro/WvI39KIAQ3c/4tRyuED_JDwJ


Wed, 02 Aug 2017 09:10:02 GMT

Re: Anomalie apr=c3=a8s compilation
Le 27/07/2017 à 20:51, GLS a écrit :
> +1
>
> Cordialement
>
>
+1
Un vieux renard
Fri, 28 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
+1

Cordialement


Thu, 27 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
Bonjour Hervé,

d'où l'interêt du 'chargeur' (loader) tel que l'a expliqué Gregory quelques
posts plus haut
(http://www.atoutfox.com/articles.asp?ACTION=FCONSULTER&ID=0000000384).

cela combine la facilité de mise à jour : un seul .app sur le serveur et la
robustesse de fonctionnement : l'executable est sur le disque local.

Bonne fin de journée
Jean à Grenoble

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Thu, 27 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
Je vais envisagé d'aller dans cette direction. Mais c'est plus facile de mettre à jour le serveur que tous les postes.
Merci pour ta disponibilité.

Hervé.


Thu, 27 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
Bonjour,

C'est très certainement la raison de vos soucis..

Il est plus que conseillé que l'exécutable et tous les fichiers utiles hormis les tables et le dbc, soient présents sur le disque système du PC sur lequel ils sont exécutés..

Cordialement
GLS


Thu, 27 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
Bonjour,

L'exécutable est lancé à partir d'un partage réseau.

Cordialement,
Hervé


Thu, 27 Jul 2017 09:10:02 GMT

Re: j'ai 2 versions d'office d'installé
Salut

on peux controler le format de la feuille pour connaitre la version:
xlworkbook.FileFormat

voir l exemple ci-dessous

SET STEP ON
m_file="mafeuille.xlsx"
*insert_config.location
m.location='C:\Users\mypc\Downloads'
=excelconv()
PROCEDURE excelconv
oExcel = CREATEOBJECT("Excel.Application")
xlworkbook = oExcel.Workbooks.Open(ALLTRIM(m.location)+"\"+m_file)
lnFormat = xlworkbook.FileFormat
*https://www.rondebruin.nl/win/s5/win001.htm
*
* les valeurs possibles lnFormat sont:
*!* 51 = pour 2007-2016, xlsx)
*!* 52 = pour 2007-2016, xlsm
*!* 50 = pour xlsb binaire non conseillé
*!* 56 = pour 97-2003 format dans Excel 2007-2016, xls
*
* pour la sauvegarde j utilise la valeur 39
xlworkbook.SaveAs(ALLTRIM(m.location)+"\"+LEFT(ALLTRIM(m_file),LEN(ALLTRIM(m_file))-4)+".xls",39) &&,43)
*RELEASE oExcel
xlworkbook.saved = .t.
xlworkbook.close
oExcel.quit
RETURN

esperons que ça aidera

cordialement


Tue, 25 Jul 2017 09:10:02 GMT

Re: j'ai 2 versions d'office d'installé
Bonjour

A essayer, mais il semble que ce soit la version la plus élevée qui
démarre...
CreateObject("Excel.Application.11")
CreateObject("Excel.Application.12")

Franck



"eddymaue" a écrit dans le message de news:
mn.c4a57e17a1a5d0b5.102164@hotmail.com...
> Bonsoir,
>
> J'ai la 2016 et la 2007
>
> lo = createobject("excel.application")
> lo.Version
> ?lo.Version && 16.0
>
> est-il possible de travailler avec la 2007 tout en conservant la 2016
> d'installé ?
>
> a+ Eddy
>
> --
> a+ Eddy
> Merci de partager avec moi votre immense savoir que je me ferai plaisir
> d'absorber... il va de soi que je vais vous en laisser un peu
> Politesse et savoir vivre oblige ;0)
>
> ---
> This email has been checked for viruses by AVG.
> http://www.avg.com
>


Tue, 25 Jul 2017 09:10:02 GMT

Re: j'ai 2 versions d'office d'installé
Merci de votre retour. Il semble que toutes versions a partir
d'office12 partagent le meme clsid
"00024500-0000-0000-C000-000000000046" et en automation c'est la
derniere version qui va s'exécuter

Word 2000, 2002, 2003 and 2007 modify these registry keys during Office
setup and each time Word starts. When you automate Word, the version
that is loaded is the version that was last started by the user or the
version that was last installed.

bref j'vais m'y faire

bonne journée a tous

--
a+ Eddy
Merci de partager avec moi votre immense savoir que je me ferai plaisir
d'absorber... il va de soi que je vais vous en laisser un peu
Politesse et savoir vivre oblige ;0)

---
This email has been checked for viruses by AVG.
http://www.avg.com

Tue, 25 Jul 2017 09:10:02 GMT

j'ai 2 versions d'office d'installé
Bonsoir,

J'ai la 2016 et la 2007

lo = createobject("excel.application")
lo.Version
?lo.Version && 16.0

est-il possible de travailler avec la 2007 tout en conservant la 2016
d'installé ?

a+ Eddy

--
a+ Eddy
Merci de partager avec moi votre immense savoir que je me ferai plaisir
d'absorber... il va de soi que je vais vous en laisser un peu
Politesse et savoir vivre oblige ;0)

---
This email has been checked for viruses by AVG.
http://www.avg.com

Mon, 24 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
Bonjour,

Ce que précise Gregory, c'est que si l'exécutable est lancé à travers le réseau local et NON directement depuis un disque local, il peut dans certaines situations lorsqu'il ouvre un SCX accéder a son fichier EXE sur le disque distant et non plus en RAM...et encore plus si c'est un APP qui est lancé
Dans ce cas, si le réseau local répond mal (très souvent lié aux anti-virus qui traitent tous les accès disques) le formulaire ne peut s'ouvrir correctement déclenchant cette erreur.

Comment est lancé l'EXE chez vos clients (depuis un disque partagé réseau ou depuis un disque local de chaque machine) ?

Cordialement
GLS


Mon, 24 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
Bonjour Grégory,

Merci de ta réponse.

Je vais voir pour générer mon exécutable à partir d'un disque local sur lequel j'aurai recopié touts les fichiers de l'application et voir si cela se reproduit de nouveau.

Cordialement,
Hervé.


Mon, 24 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
Comme GLS le suppose, je crois aussi qu'il y a un probleme de reseau (aleatoire)

Pour remedier au probleme, utiliser un loader voir http://www.atoutfox.com/articles.asp?ACTION=FCONSULTER&ID=0000000384
Avantage: l'appli se trouve sur le disque local de l'utilisateur


Autre avantage : tu peux mettre des MAJ ( une nouvelle appli.app ) sans que les utilisateurs doivent sortir du programme. IL auront la nouvelle version quand il demarreront la prochaine fois




Sat, 22 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
Merci de ta réponse.

Ce qui est inexplicable, à mon niveau, c'est que le fait de relancer la génération de l'exécutable va faire disparaître l'anomalie. Mais qu'éventuellement, le même type d'anomalie va apparaître sur un autre SCT.

Mystère...


Fri, 21 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
Bonjour

essaies de Compiler le Formulaire par la commande suivante:
compile form E:\Tetra\paye\salarie.scx
cela pourrait dans certain cas faire disparaitre ces anomalie citées

cordialement



Fri, 21 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
Les deux..

Si j'ai bien compris, chez les clients, l'exécutable est dans un dossier d'un serveur de fichiers et il est lancé depuis chaque poste de travail..
Dans tous les cas (lancement et exécution d'un exe depuis un disque local, lancement depuis un disque réseau) les dossiers utilisés par l'application doivent être sorties depuis toutes les machines du traitement des anti-virus..

Il m'est arrivé d'avoir des SCX complètement corrompu ou partiellement corrompu.. les ouvrir en mode table, les réindexer et les compacter n'y faisaient rien..les dupliquer sur un autre disque, les effacer sur le disque original, puis y remettre les copies n'y faisaient toujours rien..
En final, je n'ai pas trouvé d'autre solution que de les reconstruire totalement sans copier aucun des objets du SCX original..


Fri, 21 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
compiler : je veux dire générer le projet en exécutable à partir du gestionnaire de prjoet


Fri, 21 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
compilée


Fri, 21 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
Bonjour,

Parlez-vous de l'infrastructure sur laquelle est compilée l'application, ou sur celle où elle est exécutée.
Si c'est pour l'exécution, l'anomalie se produit chez tous mes clients auxquels j'aurais distribué l'exécutable.

Cordialement,
Hervé


Fri, 21 Jul 2017 09:10:02 GMT

Re: Anomalie après compilation
Bonjour,
Tous les dossiers VFP et applications VFP sont ils bien exclus de l'analyse anti-virus (disque local et disque réseau)?
La stabilité de la connexion réseau est elle assurée ?

Cordialement
GLS


Fri, 21 Jul 2017 09:10:02 GMT

Anomalie après compilation
Bonjour à tous,

Je rencontre depuis quelque temps un anomalie aléatoire (se produit sur un formulaire quelconque) après compilation de mon projet en exécutable.
Je reçois l'erreur 2005 : Erreur lors du chargement du fichier - enregistrement n° 99. Label8 . Parent : Le fichier Mémo E:\Tetra\paye\salarie.sct est absent ou n'est pas valide
Je relance la compilation et je n'ai plus l'erreur.

Je suis en Windows 10, Core I7, 16 GO de RAM, disque SSD. Le projet et tous les fichiers sont sur un partage réseau. L'exécutable dépasse les 30 Mo (je ne sais pas si il y a une limite de taille).

Merci de votre aide.



Fri, 21 Jul 2017 09:10:02 GMT

Re: _vfp.Eval() - curiosité
Francis,

Je viens de tester, tu as raison

Date devient DateTime

Je crois que je vais utiliser le contournement. Sans doute y aura-t-il d'autres surprises


Sat, 08 Jul 2017 09:10:02 GMT

Re: _vfp.Eval() - curiosité
Gregory,
Pour information :
d'après ce que je trouve sur la toile: _vfp.eval() est bien une méthode OLE (donc méthode d'une class COMM)
et je vois qu'il semble aussi y avoir des différences de mapping des données (comme tu l'a soulevé pour les Tableaux et références/valeurs) mais au niveau des "dates" de vfp : il semble que les dates COM deviennent des DATETIME en vfp: je n'ai pas encore vérifié.
Cordialement
Francis


Sat, 08 Jul 2017 09:10:02 GMT

Re: _vfp.Eval() - curiosité
Correction - il manque une parenthese

Remarks

Native foxpro classes instantiated with both _vfp.Eval() and _vfp.SetVar() are considered to be COM objects
and hence arrays are passed by value rather than by reference.

In order to pass arrays by reference you need to use ComArray(.., 11) after each instantiation of the class.

eg
obj = _vfp.Eval([createObject('MyClass', param1, ...)])
local myArray[1]
=comarray(obj, 11)
result = obj.Method(@myArray)


Sat, 08 Jul 2017 09:10:02 GMT

Re: _vfp.Eval() - curiosité
Salut Francis,

Cela te va ?


Remarks

Native foxpro classes instantiated with both _vfp.Eval() and _vfp.SetVar() are considered to be COM objects
and hence arrays are passed by value rather than by reference.

In order to pass arrays by reference you need to use ComArray(.., 11) after each instantiation of the class.

eg
obj = _vfp.Eval([createObject('MyClass', param1, ...)]
local myArray[1]
=comarray(obj, 11)
result = obj.Method(@myArray)




Sat, 08 Jul 2017 09:10:02 GMT

Re: _vfp.Eval() - curiosité
Hello Gregory,

Effectivement cela semble la bonne explication et donc bonne solution
dans la doc de VFP sur la méthode eval il est mentionné :
"Evaluates an expression and returns the result for an instance of the Visual FoxPro application automation server."

peut être il me faudrait ajouter à la doc une petite ligne concernant les tableaux dans la documentation de vfp ?
Si oui : quel serait, en bon anglais la ligne à ajouter ?

Cordialement
Francis



Le sam. 08 juillet 2017, 12h12 Gregory Adam a écrit :
> La solution
>
> Il me semble que tout objet créé par _vfp.Eval(), _vfpSetVar() est consideré comme un objet com
> Un tableau est passé par valeur
>
> Donc, après la création de l'objet avec _vfp.Eval(), il faut faire comarray(.., 11) pour forcer le passage du tableau par référence
>
> Et la, tout va bien
>
> Il faut bien initialiser naa avec une valeur, sinon naa est traité comme une variable logique


Sat, 08 Jul 2017 09:10:02 GMT

Re: _vfp.Eval() - curiosité
La solution

Il me semble que tout objet créé par _vfp.Eval(), _vfpSetVar() est consideré comme un objet com
Un tableau est passé par valeur

Donc, après la création de l'objet avec _vfp.Eval(), il faut faire comarray(.., 11) pour forcer le passage du tableau par référence

Et la, tout va bien

Il faut bien initialiser naa avec une valeur, sinon naa est traité comme une variable logique

[vfp]
obj = _vfp.Eval([createobject('TestVfpEvalRelation')])
=comArray(m.obj, 11) &&
[/vfp]

[vfp]
*_______________________________________________________________________________
function TestVfpEval()

local objResult1, objResult2, obj
obj = createobject('TestVfpEval')


local aa[1], naa
naa = 0 && needed
=m.obj.GetResultObject1(@m.objResult1)

=m.objResult1.GetArray(@m.aa, @m.naa)
?alen(aa) && 5
?m.naa && 5

assert false


endfunc
*_______________________________________________________________________________
define class TestVfpEval as Relation

function GetResultObject1(obj)
obj = _vfp.Eval([createobject('TestVfpEvalRelation')])
=comArray(m.obj, 11) &&
endfunc
enddefine
*_______________________________________________________________________________
define class TestVfpEvalRelation as Relation
function GetArray(aa, naa)
external array aa
naa = 5
dimension aa[m.naa]
local i
for i = 1 to m.naa
aa[m.i] = m.i
endfor

enddefine
*_______________________________________________________________________________
[/vfp]


Sat, 08 Jul 2017 09:10:02 GMT

Re: _vfp.Eval() - curiosité
Bon, la solution ou plutôt le contournement

Problème
J'ai une classe qui est basée sur 'Session'
Une méthode retourne un objet crée dans cette classe session (avec createObject())
Tant que cet objet est en vie, la session ne disparait pas ( même après session= null)

Si la classe session fait obj = _vfp.Eval( [createobject('ClasseARetourner')]) j'ai les problèmes de tableau

Solution
Créer une classe avec une méthode pour créer un objet
Cette classe est si nécessaire instanciée et ajoutée quelque part a _screen
[vfp]
_screen.AddObject('NomDeLaClasse', _vfp.Eval([createObject('NomDeLaClasse')]))
[/vfp]

Donc, la classe session fait a peu près
[vfp]
If(vartype(_screen. NomDeLaClasse) <> T_OBJECT)
= _screen.AddObject('NomDeLaClasse', _vfp.Eval([createObject('NomDeLaClasse')]))
Endif
Obj = _screen. NomDeLaClasse.CreateObject('ClasseARetourner')
[/vfp]



Fri, 07 Jul 2017 09:10:02 GMT

Re: _vfp.Eval() - curiosité
Salut Jean,

J'ai tout vu dans le debugger avant de poster

Il y a une raison pourquoi je n'utilise ni evaluate() ni createobject()
( l'objet se cree dans une session de donnees privee. Tant que cet objet existe, la session de donnees va trainer)

Je crois que je vais devoir contourner


Thu, 06 Jul 2017 09:10:02 GMT

Re: _vfp.Eval() - curiosité
Si on remplace _vfp.eval() par EVALUATE(), cela fonctionne.

Dans l'aide, il n'est pas dit que EVALUATE et eval puisse retourner un objet ...
même si cela semble fonctionner.

Avec le debugger, _vfp.eval() donne un objet 'correct' et le tableau aa prend
bien la dimension 5. C'est au retour de la fonction, qu'il n'y a pas le
transfert vers l'appelant (suis-je clair ?)

A+
Jean

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Thu, 06 Jul 2017 09:10:02 GMT

Re: _vfp.Eval() - curiosité
Salut Francis,

>si tu initialise tes variables locales dans TestVfpEval() avant création des objets, par exemple :
>aa[1]=0
>naa=0

Oui et non

apres naa est bien 5, mais le tableau ne change pas
[vfp]
function TestVfpEval()

local objResult1, objResult2, obj
obj = createobject('TestVfpEval')

local aa[1], naa


=m.obj.GetResultObject1(@m.objResult1)
naa=4
aa[1]=0
assert false

=m.objResult1.GetArray(@m.aa, @m.naa)
?alen(aa) && 1
?m.naa && 5

assert false
endfunc
[/vfp]


Thu, 06 Jul 2017 09:10:02 GMT

Re: _vfp.Eval() - curiosité
Bonjour Gregory,

si tu initialise tes variables locales dans TestVfpEval() avant création des objets, par exemple :
aa[1]=0
naa=0
alors ça marche.

autre solution : tu inverse les appels GetResultObject1() et GetResultObject2 ainsi les variables seront initialisées

Cordialement
Francis



Le jeu. 06 juillet 2017, 12h12 Gregory Adam a écrit :
>
> [vfp]
> *_______________________________________________________________________________
> function TestVfpEval()
>
> local objResult1, objResult2, obj
> obj = createobject('TestVfpEval')
>
> local aa[1], naa
>
> =m.obj.GetResultObject1(@m.objResult1)
> =m.objResult1.GetArray(@m.aa, @m.naa)
> ?alen(aa) && 1
> ?m.naa && .T.
>
>
> =m.obj.GetResultObject2(@m.objResult2)
> =m.objResult2.GetArray(@m.aa, @m.naa)
> ?alen(aa) && 5
> ?m.naa && 5
>
>
> endfunc
> *_______________________________________________________________________________
> define class TestVfpEval as Relation
>
> function GetResultObject1(obj)
> obj = _vfp.Eval([createobject('TestVfpEvalRelation')])
> endfunc
> function GetResultObject2(obj)
> obj = createobject('TestVfpEvalRelation')
> endfunc
> enddefine
> *_______________________________________________________________________________
> define class TestVfpEvalRelation as Relation
> function GetArray(aa, naa)
> external array aa
> naa = 5
> dimension aa[m.naa]
> local i
> for i = 1 to m.naa
> aa[m.i] = m.i
> endfor
>
> enddefine
> *_______________________________________________________________________________
> [/vfp]
>
>
> .
>



Thu, 06 Jul 2017 09:10:02 GMT

_vfp.Eval() - curiosité

[vfp]
*_______________________________________________________________________________
function TestVfpEval()

local objResult1, objResult2, obj
obj = createobject('TestVfpEval')

local aa[1], naa

=m.obj.GetResultObject1(@m.objResult1)
=m.objResult1.GetArray(@m.aa, @m.naa)
?alen(aa) && 1
?m.naa && .T.


=m.obj.GetResultObject2(@m.objResult2)
=m.objResult2.GetArray(@m.aa, @m.naa)
?alen(aa) && 5
?m.naa && 5


endfunc
*_______________________________________________________________________________
define class TestVfpEval as Relation

function GetResultObject1(obj)
obj = _vfp.Eval([createobject('TestVfpEvalRelation')])
endfunc
function GetResultObject2(obj)
obj = createobject('TestVfpEvalRelation')
endfunc
enddefine
*_______________________________________________________________________________
define class TestVfpEvalRelation as Relation
function GetArray(aa, naa)
external array aa
naa = 5
dimension aa[m.naa]
local i
for i = 1 to m.naa
aa[m.i] = m.i
endfor

enddefine
*_______________________________________________________________________________
[/vfp]


Thu, 06 Jul 2017 09:10:02 GMT

Re: Développement en VFP
moi non plus !

Jean à Grenoble

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Sun, 02 Jul 2017 09:10:02 GMT

Développement en VFP
Bonsoir tous les FOXEURS
Je n'abandonnerai jamais le développement en VFP.


Sun, 02 Jul 2017 09:10:02 GMT

Re: Développement en VFP
c bien

BENMAHAMED a couché sur son écran :
> Bonsoir tous les FOXEURS
> Je n'abandonnerai jamais le développement en VFP.

--
a+ Eddy
Merci de partager avec moi votre immense savoir que je me ferai plaisir
d'absorber... il va de soi que je vais vous en laisser un peu
Politesse et savoir vivre oblige ;0)

---
This email has been checked for viruses by AVG.
http://www.avg.com

Sat, 01 Jul 2017 09:10:02 GMT

Re: Longueur de champ insuffisante dans une requête
Super !!

Merci Gregory.

/b


Tue, 27 Jun 2017 09:10:02 GMT

Re: Longueur de champ insuffisante dans une requête
[vfp]

SELECT ;
padr(SUBSTR(STRTRAN(cMemo,CHR(13), " "),1,130), 130) AS Ligne1 ;
padr(SUBSTR(STRTRAN(cMemo,CHR(13), " "),131,130), 130) AS Ligne2 ;
...
[/vfp]

ou
[vfp]

select cast(padr(cMemo, 10*130) as Memo) as cMemo into cursor xxx


SELECT SUBSTR(STRTRAN(cMemo,CHR(13), " "),1,130) AS Ligne1 ;
SUBSTR(STRTRAN(cMemo,CHR(13), " "),131,130) AS Ligne2 ;
SUBSTR(STRTRAN(cMemo,CHR(13), " "),261,130) AS Ligne3 ;
from xxx
[/vfp]



Tue, 27 Jun 2017 09:10:02 GMT

Longueur de champ insuffisante dans une requête
Bonjour,

Je sais que, pour une requête, VFP fait "un premier passage à vide" pour établir la longueur des champs. Mon problème est que je dois éclater un mémo en lignes de 130 caractères. Je fais donc :

SELECT SUBSTR(STRTRAN(cMemo,CHR(13), " "),1,130) AS Ligne1 ;
SUBSTR(STRTRAN(cMemo,CHR(13), " "),131,130) AS Ligne2 ;
SUBSTR(STRTRAN(cMemo,CHR(13), " "),261,130) AS Ligne3 ;

etc jusqu'à 10 lignes.

Mais si le mémo du premier enregistrement a moins de 10 lignes, les champs vides se retrouvent avec une longueur de 1 et les mémos suivants ne me retournent qu'un caractère par ligne.

Comment faire pour m'assurer que chaque ligne va loger dans le champ approprié ?

Merci,

/b


Tue, 27 Jun 2017 09:10:02 GMT

Re: dbalias()
Francis,

Absolument, dbc() donne le correcte reponse, dbalias() donne que le nom du dbc, et fullpath(dbalias()) donne une, a mon opinion, fause information.
Cordialement,
Koen


Sun, 25 Jun 2017 09:10:02 GMT

Reproduction totale ou partielle strictement interdite • Propulsé par KitWeb • Hébergement Wan AgainValid XHTML 1.0 Transitional