在Delphi中存储一组值

时间:2010-04-13 09:16:59

标签: delphi text delphi-7 storage

我试图在delphi中存储一组值,但我希望能够使用它们的名称而不是分配的号码来解决它们。

例如,'OldValues'数组会让我做

OldValue[1] := InflationEdit.Text;

然而,理想情况下,我希望将值存储在'Data.Inflation.OldValue'中。对于每个标识符,例如Inflation,都有OldValue,NewValue和StoredValue。这些标识符中大约有12个。

有什么方法可以存储像这样的值吗?那样我就可以这样做:

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

4 个答案:

答案 0 :(得分: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;
...

答案 1 :(得分:1)

这可能对您有用:

  • DataSet有字段。
  • 字段具有OldValue和Value。
  • 字段可以是持久的(因此它们被声明并且您已完成代码完成)。
  • TClientDataSet(它是一个DataSet)基本上只是一个包含零个或多个记录的内存表。

- 的Jeroen

答案 2 :(得分: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';

答案 3 :(得分:1)

什么版本的Delphi?如果它是Delphi 2009或更新版本,您可以使用TDictionary

将您的名称存储为Key,并将具有OldValue和NewValue成员的对象存储为值。

MyDictionary: TDictionary<string, TMyClass>;

按名称搜索TMyClass的给定实例:

MyDictionary.Items[SomeName];