是否可以在TDictionary中存储多个项?我想要一个简单的解决方案
我的桌子看起来是:
我想把表中的所有字段和搜索后的项目都存储在表中。TDictionary有这个能力吗?我有一个悖论表,查询是一个简单的TQuery
我用两个字段做了一个小例子
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)。
我在课堂上试过了,但我只从桌子上得到了最后一项。
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。谢谢你的帮助!
发布于 2015-11-09 19:40:37
你只给tSampleClass.Create打过一次电话。
将其移动到WHILE语句中,以便为每个记录创建一个新实例。
发布于 2015-11-09 19:40:54
您只创建一个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;https://stackoverflow.com/questions/33616711
复制相似问题