Hnimsgern
Messages postés48Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention 4 mars 2005
-
23 févr. 2005 à 20:16
Hnimsgern
Messages postés48Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention 4 mars 2005
-
4 mars 2005 à 10:01
Bonjour,
J'ai besoin d'un tel pointeur pour avoir accés aux variables et aux fonctions d'un objet.
L'objet instancié (partiel) est le suivant :
type TRecordSet=class(Tobject)
public
Fields:array of string;
Rows:array of array of string;
Constructor Create(Owner: TComponent);
Destructor Destroy;
function Value(Field:string;Row:integer=-1):string;overload;
function Next(Field:string=''):string;
private
end;
je voudrai pouvoir faire quelque chose comme : p.Rows[x][y]:='texte' et p.Value(etc)
Hnimsgern
Messages postés48Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention 4 mars 2005 27 févr. 2005 à 18:09
Merci roud59 et neko pour vos réponses mais en fait le problème est un peu plus compliqué car j’ai deux objets déclarés chacun faisant référence à l'autre:
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />
type TRecordSet=class(Tobject)
public
p:TDb; //Message TDb inconnu (c’est normal).
Fields:array of string;
etc…
end;
type TDb=class(Tobject)
public
function TDb.OpenRecordset(Selectstring:Pansichar;var RecordSet:TRecordSet):boolean;
etc…
end;
Si je déclare le type TDb en premier j’aurai un message d’erreur sur la fonction :
function TDb.OpenRecordset(Selectstring:Pansichar;var RecordSet:TRecordSet):boolean;
En attendant de trouver une solution, je met la déclaration de p:TDb en global.
HN
Vous n’avez pas trouvé la réponse que vous recherchez ?
roud59
Messages postés99Date d'inscriptionjeudi 16 septembre 2004StatutMembreDernière intervention26 juillet 20072 28 févr. 2005 à 09:37
Bonjour Hnimsgern
Avant la déclaration de TRecordSet, ajoute une pré-declaration de TDb :
TDb = class;
Je ferais la même chose pour TRecordSet pour être tranquille, ce qui donne :
type
TDb=class;
TRecordSet=class;
TRecordSet=class(Tobject) public<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />
p:TDb; //Message TDb inconnu (c’est normal).
Fields:array of string;
etc…
end;
TDb=class(Tobject)
public
function TDb.OpenRecordset(Selectstring:Pansichar;var RecordSet:TRecordSet):boolean;
etc…
Hnimsgern
Messages postés48Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention 4 mars 2005 1 mars 2005 à 20:03
Bonjour Roud59,
Effectivement cela devrait fonctionner . D'après la doc, c'est une déclaration
avancée dont le type n'est pas encore défini. Malheurement mon compilateur
(Delpi 7 personnel) ne l'acepte pas (message TDb n'est pas encore
complètement défini) .
Je ne vois d'options compilateur qui puissent bloquer la déclaration.
Avec des objets simplifiés le résultat est identique :
type TDb = class; //Déclaration avancée.
type
TRecordSet = class(TObject)
p:TDB;
end;
type
TDb = class(TObject)
end;
Je vais essayer de répartir les déclarations dans deux modules.