2010-11-18 32 views
0

,聲明瞭一個類並從它創建了一個類(以uml的含義)。如何找出哪個函數調用正在破壞我的數據?在Delphi 7中使用

該類包含公共字段類型的字符串列表。

通過對象幾次後,第一行中的第一個字母被劃掉。

我如何從不發生?

該修剪函數調用是

stringlist.ValueFromIndex[i]; 

更多信息?

好吧,它是這樣的。

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; 

現在在一個對象中,我們調用create和insert數據並傳遞它。 在另一個對象上,我們獲取數據並使用+ concatination創建一個字符串。

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

envoking stringlist.Strings [I]解決它

感謝

+0

可以請你提供一些更多的信息,最好是一些代碼。 – 2010-11-18 09:22:50

+0

您能告訴我們名稱/值對是什麼嗎?缺少的字符不是名稱/值分隔符嗎?通常它是一個等號(=)。 Delphi的後續版本讓你通過TStrings.NameValueSeparator進行設置,但我不知道D7中是否存在。你可以使用stringlist [i]檢查原始字符串(應該看到類似「Name = Value」的內容)。 – WileCau 2010-11-18 09:36:01

+0

我假設「for i = to list1.count-1」需要「for i = ** 0 ** to list1.count-1」 – 2010-11-18 09:38:38

回答

1

至於我能理解。您有一個包含TStringList類型的公共字段的對象。

type 
    TMyClass = class 
    FField : TStringList; 
    end; 

您已創建實例並將其傳遞給函數。

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; 

您可以在每個函數的每個入口和出口點檢查對象的狀態,以便找出何時發生更改。如果您自己找不到問題,請發佈該代碼。

請注意,使用公共字段可能是危險的,因爲任何事物都可以訪問和更改該字段。

+0

我開始記錄,但我發現它有問題傳遞的字符串的值。所以我放棄了這個想法,修改與繼任者的封裝將需要一些工作。 – none 2010-11-18 09:39:24

相關問題