是否可以在TDictionary中存储多个项目?我想为下一个
提供一个简单的解决方案我的表格如下:
我想存储表格中的所有字段以及搜索项目后的内容。是否TDictionary能够存储它?我有一个Paradox表,Query是一个简单的TQuery
我用2场
做了一个小例子 var
stSearch: string;
vPDX: TDictionary<String, TCity>;
variable: string;
stSearch := '4';
vPDX := TDictionary<String, String>.Create; qry_TMP.DatabaseName := 'C:\S_DATABASE';
qry_TMP.SQL.Text := 'select * from SAMPLE_TABLE';
qry_TMP.Open;
while not qry_TMP.Eof do
begin
vPDX.AddOrSetValue(qry_TMP.FieldByName('LOCATION_ID').AsString, qry_TMP.FieldByName('Location').AsString);
qry_TMP.Next;
end;
if vPDX.TryGetValue(stSearch, variable) then
showmessage(variable);
此代码有效,但我也需要另一个字段(ZIP_CODE)。
我用Class尝试过,但我只得到了表中的最后一项。
TSampleClass = class
ZIP_CODe: String;
Location: String;
end;
var
SampleClass, Value: TSampleClass;
vPDX := TDictionary<String, TSampleClass>.Create;
begin
stSearch := '4';
SampleClass := TSampleClass.Create;
vPDX := TDictionary<String, TSampleClass>.Create;
qry_TMP.DatabaseName := 'C:\S_DATABASE';
qry_TMP.SQL.Text := 'select * from SAMPLE_TABLE';
qry_TMP.Open;
while not qry_TMP.Eof do
begin
vPDX.AddOrSetValue(qry_TMP.FieldByName('LOCATION_ID').AsString, SampleClass);
SampleClass.ZIP_CODE := Qry_TMP.FieldByName('ZIP_CODE').AsString;
SampleClass.City := Qry_TMP.FieldByName('City').AsString;
qry_TMP.Next;
end;
if vPDX.TryGetValue(stSearch, SampleClass) then
showmessage(SampleClass.ZIP_CODE + SampleClass.City);
任何人都可以帮助解决问题吗?我想要德国和5000 ZIP_CODE。我想学习如何使用TDictionary。谢谢你的帮助!
答案 0 :(得分:1)
您只需拨打tSampleClass.Create
一次。
将其移到WHILE
语句中,以便为每条记录创建一个新实例。
答案 1 :(得分:1)
您只创建一个SampleClass
实例,这意味着每次后续使用都会覆盖它包含的值。您需要为字典的每个添加创建一个新实例。
while not qry_TMP.Eof do
begin
SampleClass := TSampleClass.Create;
SampleClass.ZIP_CODE := qry_TMP.FieldByName('ZIP_CODE).AsString;
SampleClass.City := qry_TMP.FieldByName('City').AsString;
vPDX.AddOrSetValue(qry_TMP.FieldByName('LOCATION_ID', SampleClass);
qry_TMP.Next;
end;