2010-11-18 1 views
0

dans Delphi 7, a déclaré une classe et en a créé une classe (au sens uml).Comment puis-je savoir quel appel de fonction corrompt mes données?

La classe contient un type de liste de chaînes publique.

Après avoir passé l'objet plusieurs fois, la première lettre de la première ligne est découpée.

comment puis-je tracer de ne pas se produire ???

l'appel de fonction qui est trims

stringlist.ValueFromIndex[i]; 

plus d'informations?

bien c'est quelque chose comme ça.

type 
    TObjectionFilterFields = class(TObject) 
    private 
    public 
     z,x,c,v,b,n,a,s:integer; 
     list1:TStringList; 
     list2:TStringList; 
     enum:TEnum; 
     constructor Create; //override; 
     destructor Destroy; //override; 
    end; 

maintenant à un objet que nous invoquons créer, et insérer des données, et le transmettre. sur un autre objet, nous récupérons les données et en créons une chaîne, avec + concatination.

for i := 0 to list1.count-1 
sql.add(''''+list1.ValueFromIndex[i] + ''''+'hdsjkf'); 

stringlist.Strings de envoking [i] ont résolu

grâce

+0

Pouvez-vous s'il vous plaît donner plus d'informations, et de préférence du code? –

+0

Pouvez-vous nous dire quelle est la paire nom/valeur? Le caractère manquant n'est pas le séparateur nom/valeur, n'est-ce pas? Habituellement, c'est un signe égal (=). Les versions ultérieures de Delphi vous permettent de le définir via TStrings.NameValueSeparator mais je ne sais pas si cela existait dans D7. Vous pouvez vérifier la chaîne brute en utilisant stringlist [i] (devrait voir quelque chose comme "Name = Value"). – WileCau

+0

Je suppose que "pour i = to list1.count-1" doit être "pour i = ** 0 ** à list1.count-1" –

Répondre

1

Pour autant que je peux comprendre. Vous avez un objet qui contient un champ public de type TStringList.

type 
    TMyClass = class 
    FField : TStringList; 
    end; 

Vous avez créé une instance et vous l'avez transmise à une fonction.

var 
    instance : TMyClass; 

begin 
    instance := TMyClass.Create; 
    try 
    DoSomething(instance); 
    finally 
    instance.Free; 
    end; 
end; 


procedure DoSomething(AObject: TMyClass); 
begin 
    // Check here 
    DoSomethingElse(AObject); 
    // Check here 
end; 

procedure DoSomethingElse(AObject: TMyClass); 
begin 
    // Check here 
end; 

Vous pouvez vérifier l'état de l'objet à chaque entrée et chaque point de sortie de chaque fonction afin de savoir quand la modification a eu lieu. Publiez ce code si vous ne pouvez pas trouver le problème vous-même.

Veuillez noter que l'utilisation de champs publics peut être dangereuse car tout peut accéder à ce champ et le modifier.

+0

J'ai commencé avec l'enregistrement mais je l'ai trouvé il y a des problèmes en passant la valeur de la chaîne.J'ai donc renoncé à cette idée, et la modification de l'encapsulation avec les successeurs prendra un certain travail. – none

Questions connexes