PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → WD9 028m / POO
WD9 028m / POO
Débuté par I.G.LOG, 06 avr. 2005 22:40 - 1 réponse
Posté le 06 avril 2005 - 22:40
Bonjour,
Nouveau problème pour les spécialistes POO / WD9 (90028m).
J'ai 4 objets:
1/ __Enreg est un objet generique pour stocker les tuples (avec sauvegarde
valeurs ini)
2/ _Client: classe de base décrivant le fichier client
3/ Client: classe de manipulation
4/ Tiers: "surclasse" de client
Je veux pouvoir mémoriser les valeurs des rubriques dans la fonction
:Init().
Le probleme est que ca plante a l'execution dans la fonction
__Enreg::mSetRequeteValeurs a la ligne :mSetValeur(lCh,QLLitCol(pReq,x)) :
Erreur systeme n° 1020 dans WD90VM.DLL !!!
Apres multiples recherches, je me suis apercu que le pb survient quand
l'objet client a 2 heritages comme dans l'exemple (Tiers et _Client). Si il
n'herite que de _Client je n'ai plus le defaut.
D'ou peut venir ce probleme ? Ai-je oublie qq chose ?

Une nouvelle fois merci pour vos reponses.
Phil

PS: desole le code est un peu long
Re-PS: je suis oblige d'utiliser la "surclasse" Tiers !



Classe __Enreg
IDENT est un entier
_NOMFIC est une chaîne
_NOMID est une chaîne
MODE est une chaîne
FLAG est un entier sur 1 octet
_Champs est un tableau dynamique
_Init est un objet dynamique

Fin

PROCEDURE __Enreg::mSetRequeteValeurs(pReq="")

lCh est une chaîne
lRub est une chaîne
x est un entier
y est un entier

// Lecture des champs de la requete
POUR x = 1 A y
lCh = ":"+:_Champs[x]
:mSetValeur(lCh,SQLLitCol(pReq,x)) <- CA PLANTE A L'EXEC: erreur
1020
:_Init:mSetValeur(lCh,{lCh})
FIN
RETOUR

PROCEDURE __Enreg::mSetValeur(pMembre,pValeur="")

{pMembre} = pValeur
RETOUR

Classe _Client
Herite de __Enreg
RAISON est une chaine
...
Fin

PROCEDURE _Client::Constructeur()

:_NOMFIC = "CLIENT"
:_NOMID = "IDDOCUM"
Dimension(:_Champs,14)
:_Champs[1] = "RAISON"
...
RETOUR

PROCEDURE VIRTUELLE _Client::Init(pIdent)

lReq est une chaîne
y est un entier = dimension(:_Champs)

// Lecture
SI Fichier:SQLExecute(:mSelect("IDDOCUM = " + pIdent),lReq) ALORS
SI SQLFetch(lReq) = 0 ALORS
// Mémorise
:IDENT = pIdent
:_Init = allouer un _Client
:_Init:IDENT = :IDENT
:_Init:_NOMFIC = :_NOMFIC
:_Init:_NOMID = :_NOMID
:_Init:FLAG = :FLAG
:mSetRequeteValeurs(lReq) // Pour mémoriser les champs <--- CA PLANTE
A L'EXEC:
// // Si j'utilise les lignes suivantes plutot que :mSetRequeteValeurs()
ca marche !???!!
// POUR x = 1 A y
// lCh = ":"+:_Champs[x]
// {lCh} = SQLLitCol(lReq,x)
// :_Init:mSetValeur(lCh,{lCh})
// FIN
fin
fin
SQLFerme(lReq)
RETOUR

Classe Tiers
RUB1 est une chaine
...
Fin

Classe Client
Herite de Tiers // NOTA: si j'enleve cet heritage, plus de
probleme !?!
Herite de _Client
...
Fin

PROCEDURE VIRTUELLE Client::Init(pIdent=0)

// Init
SI PAS :_Client::Init(pIdent) ALORS
Erreur("Procedure Client::Init(), Fichier CLIENT, index
IDDOCUM","pIdent -> " + pIdent + " non trouvé !!!")
RENVOYER Faux
FIN
...
RENVOYER vrai
Posté le 07 avril 2005 - 08:11
difficile de répondre avec un code aussi incomplet
pour avoir testé ton code ça à l'air de fonctionner sans prb

quelques questions néanmoins
ou sont les appels aux constructeurs des classes "parentes"
ou est l'instenciation du tableau :_Champs
comment est déterminée la valeur de y

tu peux m'envoyer le code à patrice.barreau@free.fr si je peux je t'aiderai
ps : envoi les classes complètes j'ai pas envie de retapper...
re-ps : inutile de m'envoyer tout le projet les classes concernées suffises

bon dev
patrice