Delphi t字典多路输出?
是否可以在TDictionary中存储多个项目?我想要一个简单的解决方案 我的桌子看起来像:Delphi t字典多路输出?,delphi,delphi-xe,delphi-xe7,Delphi,Delphi Xe,Delphi Xe7,是否可以在TDictionary中存储多个项目?我想要一个简单的解决方案 我的桌子看起来像: 地址、城市、邮政编码 2000年12月1日,英国 匈牙利,2000年 土耳其,300 4,德国,5000等等 我想存储表中的所有字段以及其中的搜索项后的字段。。TDictionary是否有能力做到这一点?我有一个悖论表,查询是一个简单的TQuery 我用2个字段做了一个小例子 var stSearch: string; vPDX: TDictionary<String, TCity
- 地址、城市、邮政编码
- 2000年12月1日,英国
- 匈牙利,2000年
- 土耳其,300
- 4,德国,5000等等
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);
var
stSearch:字符串;
vPDX:t字典;
变量:字符串;
stSearch:=“4”;
vPDX:=TDictionary.Create;qry_TMP.DatabaseName:=“C:\S_数据库”;
qry_TMP.SQL.Text:='select*from SAMPLE_TABLE';
qry_TMP.Open;
而不是qry_TMP.Eof do
开始
vPDX.AddOrSetValue(qry_TMP.FieldByName('LOCATION_ID').assString,qry_TMP.FieldByName('LOCATION').assString);
qry_TMP.Next;
结束;
如果vPDX.TryGetValue(stSearch,变量),则
showmessage(变量);
这个代码可以工作,但我也需要另一个字段(邮政编码)
我在课堂上试过了,但我只拿到了桌子上的最后一件东西
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);
TSampleClass=class
邮政编码:字符串;
位置:字符串;
结束;
变量
SampleClass,值:TSampleClass;
vPDX:=TDictionary.Create;
开始
stSearch:=“4”;
SampleClass:=TSampleClass.Create;
vPDX:=TDictionary.Create;
qry_TMP.DatabaseName:=“C:\S_数据库”;
qry_TMP.SQL.Text:='select*from SAMPLE_TABLE';
qry_TMP.Open;
而不是qry_TMP.Eof do
开始
vPDX.AddOrSetValue(qry_TMP.FieldByName('LOCATION_ID')。AsString,SampleClass);
SampleClass.ZIP_代码:=Qry_TMP.FieldByName('ZIP_代码').AsString;
SampleClass.City:=Qry_TMP.FieldByName('City').AsString;
qry_TMP.Next;
结束;
如果vPDX.TryGetValue(stSearch,SampleClass),则
showmessage(SampleClass.ZIP_代码+SampleClass.City);
任何人都可以帮忙,有什么问题吗?我要德国和5000的邮政编码。我想学习如何使用字典。谢谢你的帮助 您正在调用
tSampleClass。仅创建一次
将其移动到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;
噢!:)谢谢你的帮助!