我看了半天我没有看是白你想干什么.如查是想加载树形结构的话你可以参照下面的这个. 你对比一下.原理是相通的. 我用的是分级试的. MENUID NENUNAME parents_name 00 在职员工 NULL 0001 生管部 在职员工 000101 小海盗 生管部 第一个为他的ID 第一个为节点的名称.第三个存的是他父节点的名称 parents_name字段存放的是他父节点的名称. //------------------------------创建树BEGIN---------------------------------- //调用的时候传入一个树形控件的名称 procedure TFrm_Set_Power.CreateNavigationTree(tvThis:TTreeView);Var sqlstr:String; myQ,Child:TAdoQuery; sqlstr2:String; i:integer; Begin i:=0; tvThis.Items.Clear(); myQ:=TadoQuery.Create(self); myQ.ConnectionString:=Frm_Main_Menu.ADOConnection1.ConnectionString; myQ.Close(); myQ.SQL.Clear(); sqlstr := 'Select menuid,MenuName menuname,MenuUrl menuurl,SetParameters menuparam From T_SysMenuInfo menu'; sqlstr:= sqlstr+' where parents_name=' ; sqlstr:= sqlstr+''''''; sqlstr:= sqlstr+' Order By MenuId' ; myQ.Close(); myQ.SQL.Clear(); myQ.SQL.Add(sqlstr); myQ.Open(); myQ.First(); While not myQ.Eof do Begin tvThis.Items.Add(tvThis.Selected,myQ.FieldByName('menuname').AsString); begin Child:=tAdoQuery.Create(Self); Child.ConnectionString:=Frm_Main_Menu.ADOConnection1.ConnectionString;//'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=WORK;Data Source=sbsever'; sqlstr2:='Select menuid,MenuName menuname,MenuUrl menuurl,SetParameters menuparam From T_SysMenuInfo menu'; sqlstr2:= sqlstr2+' where parents_name=' ; sqlstr2:= sqlstr2+''''+myQ.FieldByName('menuname').AsString+''''; sqlstr2:= sqlstr2+' Order By MenuId' ;
Child.Close(); Child.SQL.Clear(); Child.SQL.Add(sqlstr2); Child.Open(); Child.First(); for i:=i to tvThis.Items.Count-1 do if tvThis.items.Item[i].Text=myQ.FieldByName('menuname').AsString then begin While not Child.Eof do Begin tvThis.Items.AddChild(tvThis.items.Item[i],Child.FieldByName('menuname').AsString); Child.Next; End; Child.Free; break; END; end; i:=i+1; myQ.Next; End; myQ.Free(); sqlstr:=''; sqlstr2:=''; End; //-------创建树END-----
楼主是不是想要这种效果啊!代码如下//大类、小类、编号(大类的前3位,小类的前5位,后面几位随意) //获取大类编号 procedure Tform1.FormCreate(Sender: TObject); var str,s:string; begin str:='select * from esprodmainclss order by 大类编号';//esprodmainclss大类表 begin ADOquery0.close; ADOquery0.sql.clear; ADOquery0.SQL.add(str); ADOquery0.open; end; ComboBox1.Items.Clear; ADOquery0.First; while not ADOquery0.EOF do begin s:=ADOQuery0.Fields[0].AsString; s:=s+''+ADOQuery0.Fields[1].AsString; ComboBox1.Items.Add(s); ADOQuery0.Next; end; combobox1.itemindex:=0; end; //获取小类 procedure Tform1.ComboBox1Change(Sender: TObject); var str,s:string; begin str:='select * from esprodsubclss where 大类编号=''';//esprodsubclss小类表 str:=str+copy(combobox1.Text,1,3)+''''; str:=str+' order by 小类编号'; begin ADOQuery0.close; ADOQuery0.sql.clear; ADOQuery0.SQL.add(str); ADOQuery0.open; end; ComboBox2.Items.Clear; ADOQuery0.First; while not ADOQuery0.EOF do begin s:=ADOQuery0.Fields[0].AsString; s:=s+' '+ADOQuery0.Fields[1].AsString; ComboBox2.Items.Add(s); ADOQuery0.Next; end; combobox2.itemindex:=0; end; //获取编号 procedure Tform1.ComboBox2Change(Sender: TObject); var str,s:string; begin str:='select * from esprodclss where 大类编号=''';//esprodclss编号表 str:=str+copy(combobox1.Text,1,3)+''''; str:=str+' and 小类编号='''; str:=str+copy(combobox2.Text,1,5)+''''; str:=str+' order by 资产编号';begin ADOQuery0.close; ADOQuery0.sql.clear; ADOQuery0.SQL.add(str); ADOQuery0.open; end; ComboBox3.Items.Clear; ADOQuery0.First; while not ADOQuery0.EOF do begin s:=ADOQuery0.Fields[0].AsString; s:=s+' '+ADOQuery0.Fields[1].AsString; ComboBox3.Items.Add(s); ADOQuery0.Next; end; combobox3.itemindex:=0; end;
你对比一下.原理是相通的.
我用的是分级试的.
MENUID NENUNAME parents_name
00 在职员工 NULL
0001 生管部 在职员工
000101 小海盗 生管部
第一个为他的ID 第一个为节点的名称.第三个存的是他父节点的名称
parents_name字段存放的是他父节点的名称.
//------------------------------创建树BEGIN----------------------------------
//调用的时候传入一个树形控件的名称
procedure TFrm_Set_Power.CreateNavigationTree(tvThis:TTreeView);Var
sqlstr:String;
myQ,Child:TAdoQuery;
sqlstr2:String;
i:integer;
Begin
i:=0;
tvThis.Items.Clear();
myQ:=TadoQuery.Create(self);
myQ.ConnectionString:=Frm_Main_Menu.ADOConnection1.ConnectionString;
myQ.Close();
myQ.SQL.Clear(); sqlstr := 'Select menuid,MenuName menuname,MenuUrl menuurl,SetParameters menuparam From T_SysMenuInfo menu';
sqlstr:= sqlstr+' where parents_name=' ;
sqlstr:= sqlstr+'''''';
sqlstr:= sqlstr+' Order By MenuId' ; myQ.Close();
myQ.SQL.Clear();
myQ.SQL.Add(sqlstr);
myQ.Open();
myQ.First();
While not myQ.Eof do
Begin
tvThis.Items.Add(tvThis.Selected,myQ.FieldByName('menuname').AsString);
begin
Child:=tAdoQuery.Create(Self);
Child.ConnectionString:=Frm_Main_Menu.ADOConnection1.ConnectionString;//'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=WORK;Data Source=sbsever'; sqlstr2:='Select menuid,MenuName menuname,MenuUrl menuurl,SetParameters menuparam From T_SysMenuInfo menu';
sqlstr2:= sqlstr2+' where parents_name=' ;
sqlstr2:= sqlstr2+''''+myQ.FieldByName('menuname').AsString+'''';
sqlstr2:= sqlstr2+' Order By MenuId' ;
Child.Close();
Child.SQL.Clear();
Child.SQL.Add(sqlstr2);
Child.Open();
Child.First();
for i:=i to tvThis.Items.Count-1 do
if tvThis.items.Item[i].Text=myQ.FieldByName('menuname').AsString then
begin
While not Child.Eof do
Begin
tvThis.Items.AddChild(tvThis.items.Item[i],Child.FieldByName('menuname').AsString);
Child.Next;
End;
Child.Free;
break;
END;
end;
i:=i+1;
myQ.Next;
End;
myQ.Free();
sqlstr:='';
sqlstr2:='';
End;
//-------创建树END-----
分先记着,呵呵~~~~~~~~~
对不起~没写明白~抱歉~~~~~
是ComboBox控件选择框的动态载入~~~~~~~
你想实现.我先择一个省的时候比如四川的时候
在COMBOBOX里就出现成都城市的名字吗?
是只有一个COMBOBOX还是
省,市,县各用一个COMBOBOX?
1,先择一个省的时候比如四川的时候
在COMBOBOX里就出现成都城市的名字
2,省,市,县各用一个COMBOBOX?
比如3个combobox(代称为:省、市、县)你把市和县设置为enable:= false;这时只能选择省。
然后在省的onchange事件里访问数据库,将返回结果加入‘市’里,同时市的enable:= true;同理.............
//获取大类编号
procedure Tform1.FormCreate(Sender: TObject);
var str,s:string;
begin
str:='select * from esprodmainclss order by 大类编号';//esprodmainclss大类表
begin
ADOquery0.close;
ADOquery0.sql.clear;
ADOquery0.SQL.add(str);
ADOquery0.open;
end;
ComboBox1.Items.Clear;
ADOquery0.First;
while not ADOquery0.EOF do
begin
s:=ADOQuery0.Fields[0].AsString;
s:=s+''+ADOQuery0.Fields[1].AsString;
ComboBox1.Items.Add(s);
ADOQuery0.Next;
end;
combobox1.itemindex:=0;
end;
//获取小类
procedure Tform1.ComboBox1Change(Sender: TObject);
var str,s:string;
begin
str:='select * from esprodsubclss where 大类编号=''';//esprodsubclss小类表
str:=str+copy(combobox1.Text,1,3)+'''';
str:=str+' order by 小类编号';
begin
ADOQuery0.close;
ADOQuery0.sql.clear;
ADOQuery0.SQL.add(str);
ADOQuery0.open;
end;
ComboBox2.Items.Clear;
ADOQuery0.First;
while not ADOQuery0.EOF do
begin
s:=ADOQuery0.Fields[0].AsString;
s:=s+' '+ADOQuery0.Fields[1].AsString;
ComboBox2.Items.Add(s);
ADOQuery0.Next;
end;
combobox2.itemindex:=0;
end;
//获取编号
procedure Tform1.ComboBox2Change(Sender: TObject);
var str,s:string;
begin
str:='select * from esprodclss where 大类编号=''';//esprodclss编号表
str:=str+copy(combobox1.Text,1,3)+'''';
str:=str+' and 小类编号=''';
str:=str+copy(combobox2.Text,1,5)+'''';
str:=str+' order by 资产编号';begin
ADOQuery0.close;
ADOQuery0.sql.clear;
ADOQuery0.SQL.add(str);
ADOQuery0.open;
end;
ComboBox3.Items.Clear;
ADOQuery0.First;
while not ADOQuery0.EOF do
begin
s:=ADOQuery0.Fields[0].AsString;
s:=s+' '+ADOQuery0.Fields[1].AsString;
ComboBox3.Items.Add(s);
ADOQuery0.Next;
end;
combobox3.itemindex:=0;
end;