5,927
社区成员




表1 AREA
AREAID | AREANAME |
1001 | 黑龙江 |
1002 | 辽宁 |
1003 | 吉林 |
表2 CITY
CITYID | AREAID | CITYNAME |
2001 | 1001 | 哈尔滨 |
2002 | 1001 | 大兴安岭 |
2003 | 1002 | 沈阳 |
以下代码可以查询出地区的数据,
procedure TMain.Button1Click(Sender: TObject);
var
RootNode : TTreeNode;
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM AREA');
ADOQuery1.Open;
RootNode:=TreeView1.Items.GetFirstNode();
RootNode.DeleteChildren;
while NOT ADOQuery1.EOF do
Begin
TreeView1.Items.AddChild(RootNode,ADOQuery1.FieldByName('AREANAME').AsString) ;
ADOQuery1.Next;
End;
RootNode.Expand(false);
如何查询下一级数据,就是哈尔滨、大兴安岭这级别?
10.6W+?太夸张了吧,哈哈哈
这是DS给的结果,我没有测试,你可以试一下:
procedure TMain.Button1Click(Sender: TObject);
var
RootNode, AreaNode: TTreeNode;
AreaID: Integer;
CityQuery: TADOQuery; // 用于查询城市的临时查询对象
begin
// 清除TreeView现有内容
RootNode := TreeView1.Items.GetFirstNode();
RootNode.DeleteChildren;
// 查询地区数据
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM AREA');
ADOQuery1.Open;
// 创建临时查询对象用于查询城市
CityQuery := TADOQuery.Create(nil);
try
CityQuery.Connection := ADOQuery1.Connection; // 使用相同的数据库连接
// 遍历地区数据
while not ADOQuery1.EOF do
begin
AreaID := ADOQuery1.FieldByName('AREAID').AsInteger;
// 添加地区节点
AreaNode := TreeView1.Items.AddChild(RootNode, ADOQuery1.FieldByName('AREANAME').AsString);
// 查询该地区下的城市
CityQuery.Close;
CityQuery.SQL.Clear;
CityQuery.SQL.Add('SELECT * FROM CITY WHERE AREAID = :AreaID');
CityQuery.Parameters.ParamByName('AreaID').Value := AreaID;
CityQuery.Open;
// 添加城市子节点
while not CityQuery.EOF do
begin
TreeView1.Items.AddChild(AreaNode, CityQuery.FieldByName('CITYNAME').AsString);
CityQuery.Next;
end;
ADOQuery1.Next;
end;
finally
CityQuery.Free; // 释放临时查询对象
end;
RootNode.Expand(False);
end;
要在 TreeView1
中查询并显示下一级城市数据(如哈尔滨、大兴安岭),您需要修改代码,在添加地区节点后,进一步查询对应的城市数据并作为子节点添加。以下是实现代码:
procedure TMain.Button1Click(Sender: TObject);
var
RootNode, AreaNode: TTreeNode;
begin
// 清空树视图
RootNode := TreeView1.Items.GetFirstNode();
RootNode.DeleteChildren;
// 查询地区数据
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM AREA');
ADOQuery1.Open;
// 遍历地区数据
while not ADOQuery1.EOF do
begin
// 添加地区节点
AreaNode := TreeView1.Items.AddChild(RootNode, ADOQuery1.FieldByName('AREANAME').AsString);
// 查询当前地区对应的城市数据
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('SELECT * FROM CITY WHERE AREAID = :AreaID');
ADOQuery2.Parameters.ParamByName('AreaID').Value := ADOQuery1.FieldByName('AREAID').AsString;
ADOQuery2.Open;
// 遍历城市数据并添加为地区节点的子节点
while not ADOQuery2.EOF do
begin
TreeView1.Items.AddChild(AreaNode, ADOQuery2.FieldByName('CITYNAME').AsString);
ADOQuery2.Next;
end;
ADOQuery1.Next;
end;
// 展开所有节点
RootNode.Expand(True);
end;
关键点说明:
使用了两个 ADOQuery
组件:
ADOQuery1
用于查询地区数据ADOQuery2
用于查询对应地区的城市数据节点层级关系:
RootNode
是根节点AreaNode
是地区节点(如黑龙江、辽宁)AreaNode
的子节点添加参数化查询:
:AreaID
来确保只查询当前地区的城市注意事项:
ADOQuery2
组件已正确配置数据库连接ADOQuery
组件,可以在查询城市数据前先关闭并重新设置 ADOQuery1
这样,您就能在 TreeView 中看到层级结构:根节点展开后显示所有地区,每个地区节点展开后显示该地区下的所有城市。