2010-04-13 57 views
1

我想在delphi中存儲一組值,但我希望能夠使用它們的名稱而不是分配的編號來解決它們。在德爾福存儲一組數值

例如,「OldValues」的陣列將讓我做

OldValue[1] := InflationEdit.Text; 

理想但是,我想有存儲在「Data.Inflation.OldValue」例如一個值。對於每個標識符(如通貨膨脹),都有一個OldValue,NewValue和StoredValue。大約有12個這樣的標識符。

有沒有什麼方法可以存儲這樣的值?這樣我就可以做這樣的事情:

Data.Inflation.NewValue := Data.Inflation.OldValue; 
Data.Inflation.NewValue := InflationEdit.Text; 

回答

2

一個類真的會在這類問題上非常方便。喜歡的東西;

// Inflation record 
TInflation = record 
    NewValue, 
    OldValue:string; 
end; 

/data class 
Tdata = class(object) 
private 
    Inflation:TInflation; 
    // other properties 
    ... 
public 
constructor ... 

end; 

data := TData.create(nil) 

data.Inflation.NewValue := data.inflation.OldValue; 
... 
+0

在什麼地方「//通脹記錄」部分的單位去了? – chendriksen 2010-04-13 09:58:22

+0

在設備的型號部分 – gath 2010-04-13 10:09:02

+0

解決了!記錄後,我拿走了分號。JIC任何人都有同樣的問題! – chendriksen 2010-04-13 10:27:59

1

這可能會爲你工作:

  • 數據集具有字段。
  • 字段具有OldValue和Value。
  • 字段可以是持久的(所以它們被聲明並且你有代碼完成)。
  • TClientDataSet(它是一個DataSet)基本上只是一個具有零個或多個記錄的內存表。

--jeroen

+0

不投票,因爲這是一個有效的答案。但是,對於三個字符串的十幾條記錄,每個CDS對我來說似乎都是過度的。 – 2010-04-13 20:19:59

+0

我使用帶有持久字段的ClientDataSets,即使對於單行數據集,通常包裝在DataModule中。它使用起來非常簡單,並且具有與UI簡單綁定的優點。示例:帶驗證的配置對話框。輕鬆導出到XML配置文件。隨着Delphi 2009中新的泛型(在Delphi 2010中最終穩定),我期望爲此提供全新的解決方案。 – 2010-04-15 08:06:04

1
type 
    TIndentifier = class 
    private 
    FOldValue: string; 
    FNewValue: string; 
    FStoredValue: string; 
    public 
    constructor Create(const OldValue, NewValue, StoredValue: string); 
    property OldValue: string read FOldValue write FOldValue; 
    property NewValue: string read FNewValue write FNewValue; 
    property StoredValue: string read FStoredValue write FStoredValue; 
    end; 

這是你的基類。您爲每個值使用它。那麼你有兩個選擇。你可以做這樣的:

var 
    Values: TStringList; 
begin 
    Values.AddObject('SomeValue', TIndentifier.Create('OldValue', 'NewValue', 'StoredValue')); 

這讓我想起了如何類似於瑞士軍刀是TStringList中:)。注意在舊版本的delphi中釋放對象,或者將TStringList設置爲最新版本中對象的所有者。

或者,如果你需要的不僅僅是名字越多,你可以有對象的列表:

type 
     TValue = class(TIndentifier) 
     private 
     FName: string; 
     public 
     property Name: string read FName write FName;  
     end; 

    var 
     Value: TValue;  
     Values: TObjectList; 
    begin 
     Value := TValue.Create('OldValue', 'NewValue', 'StoredValue'); 
     Value.Name := 'SomeValue'; 
     Values.Add(Value); 

但我真的很喜歡在這樣的情況下是XML的力量。它節省了太多的代碼,但另一方面隱藏了聲明。用我的SimpleStorage你可以這樣做:

var 
     Value: IElement; 
     Storage: ISimpleStorage: 
    begin 
     Storage := CreateStorage; 
     Value := Storage.Ensure(['Values', 'SomeValue']); 
     Value.Ensure('OldValue').AsString := 'OldValue'; 
     Value.Ensure('NewValue').AsString := 'NewValue'; 
     Value.Ensure('StoredValue').AsString := 'StoredValue'; 
1

什麼版本的德爾福?如果是Delphi 2009或更新版本,則可以使用TDictionary

將您的名稱存儲爲Key並將OldValue和NewValue成員存儲爲值。

MyDictionary: TDictionary<string, TMyClass>; 

按名稱搜索TMyClass的給定實例:

MyDictionary.Items[SomeName];