Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi t字典多路输出?_Delphi_Delphi Xe_Delphi Xe7 - Fatal编程技术网

Delphi t字典多路输出?

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

是否可以在TDictionary中存储多个项目?我想要一个简单的解决方案

我的桌子看起来像:

  • 地址、城市、邮政编码
  • 2000年12月1日,英国
  • 匈牙利,2000年
  • 土耳其,300
  • 4,德国,5000等等
我想存储表中的所有字段以及其中的搜索项后的字段。。TDictionary是否有能力做到这一点?我有一个悖论表,查询是一个简单的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);
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;
噢!:)谢谢你的帮助!