TDictionary 多重输出?
TDictionary multiple output?
是否可以在 TDictionary 中存储多个项目?我想要 next
的简单解决方案
我的 table 看起来像:
- LOCATION_ID,城市,ZIP_CODE
- 1 , 英国, 2000
- 2, 匈牙利, 1000
- 3,土耳其,300
- 4,德国,5000 等...
我想存储 table 中的所有字段并在其中搜索项目后.. TDictionary 是否有能力?我有一个 Paradox Table,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 试过了,但我只得到了 Table 的最后一项。
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。感谢您的帮助!
您只调用了一次 tSampleClass.Create
。
将它移到 WHILE
语句中,以便为每条记录创建一个新实例。
您只创建了一个 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;
是否可以在 TDictionary 中存储多个项目?我想要 next
的简单解决方案我的 table 看起来像:
- LOCATION_ID,城市,ZIP_CODE
- 1 , 英国, 2000
- 2, 匈牙利, 1000
- 3,土耳其,300
- 4,德国,5000 等...
我想存储 table 中的所有字段并在其中搜索项目后.. TDictionary 是否有能力?我有一个 Paradox Table,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 试过了,但我只得到了 Table 的最后一项。
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。感谢您的帮助!
您只调用了一次 tSampleClass.Create
。
将它移到 WHILE
语句中,以便为每条记录创建一个新实例。
您只创建了一个 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;