我用下面的语句得不到索要的值
Pryjg(treeview1.Selected.Data)^.bh;
这个语句我本来想得到,在treevieww里面,选择的那个就把相应的编号提取出来,但是现在得到的却是最后的值,而不是想要得,这个treeview与数据库相联系,个个数据已经显示出来了,我想现在的问题与数据库无关了吧?
Pryjg(treeview1.Selected.Data)^.bh;
这个语句我本来想得到,在treevieww里面,选择的那个就把相应的编号提取出来,但是现在得到的却是最后的值,而不是想要得,这个treeview与数据库相联系,个个数据已经显示出来了,我想现在的问题与数据库无关了吧?
解决方案 »
- DataSource2DataChange(sender); 这个事件怎么写
- Delphi中有支持IDEA加密的控件吗?
- 请问:在delphi怎样操作powerbuilder
- 请问:如何把数字格式化成字符串,如 10格式化成 0010?
- 散分啦(3)
- 急!!!高手请进!怎么监控FTP Server中上传/下载的文件?
- 为什么记录号不改?100分
- 求酒店管理系统(C/S)的源代码
- 前景透明图无级缩放或平移屏幕无闪烁的方法?
- 在delphi7中我想实现具有多个相同属性的查询,应该怎么写代码?这是我写的代码,不过选出来的是或的关系!我的代码如下:
- 如何处理输入到数据库的关键字段重复的问题?
- DBchart只顯示數據集中的一個點﹐而不能顯示整個數據集所有的點﹖
我定义的一个record,里面有两个string,一个是名字,一个是编号
type
Pryjg = ^TPryjg;
TPryjg = record
name: string;
bh: string;
end;
procedure TjgryFrm.FormCreate(Sender: TObject);
var
node,node1,nodenext : TTreeNode;
myjg :Pryjg;
myry :pryjg;
myroot :pryjg;
zw :string;
begin
new(myjg);
new(myry);
new(myroot);
myroot.name:= '山东省税务机构人员';
myroot.bh :='0000000000';
treeview1.Items.Clear;
node:=treeview1.Items.AddObject(nil,myroot.name,myroot);
with dm.ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select * from jgsl');
Open;
end;
dm.ADOQuery1.First; while not dm.ADOQuery1.Eof do
begin
myjg.name := dm.ADOQuery1.fieldbyname('jg_mc').AsString;
myjg.bh := dm.ADOQuery1.fieldbyname('jg_bh').AsString;
node1:=treeview1.Items.AddChildObject(node,myjg.name,myjg);
with dm.ADOQuery2 do
begin
close;
sql.Clear;
sql.Add('select * from rypb');
Open;
end;
dm.ADOQuery2.First;
while not dm.ADOQuery2.Eof do
begin
myry.name :=dm.ADOQuery2.fieldbyname('ry_mc').AsString;
myry.bh := dm.ADOQuery2.fieldbyname('ry_bh').AsString;
nodenext :=treeview1.Items.AddChildObject(node1,myry.name,myry);
dm.ADOQuery2.next;
end;
dm.ADOQuery2.First;
dm.ADOQuery1.next;
end;
dm.ADOQuery1.First;
dm.ADOQuery2.First;
treeview1.Refresh;
pagecontrol1.ActivePage:=tabsheet1;
///////////////////////////////////////
///添加子项
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from jszw');
adoquery1.Open;
adoquery1.First;
dbcombobox1.Items.Clear;
while not adoquery1.Eof do
begin
zw := adoquery1.fieldbyname('zw').AsString;
DBComboBox1.Items.Add(zw);
adoquery1.Next;
end;
///////////////////////////////////////
//dispose(myroot);
//dispose(myjg);
//dispose(myry);
end;
procedure TjgryFrm.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
bh :string;
begin
//treeviewrefresh;
//if treeview1.Selected.Level =2 then
//begin
bh:=pryjg(treeview1.Selected.Data)^.bh;
showmessage(bh);
//end;
//dispose(myry);
end;
然后重新编译ComCtrls单元
不停的把数据纪录的值传给相同的指针
再将指针传给Node的Data
当然只有对应一条纪录
好像你说的是对的,不过,应该如何修改呢?
var
iCount: Integer;
saNode: array of pryjg;
SetLength(saNode,ADOQuery1.RecordCount);
ADOQuery1.First;
iCount:= 0;
while not ADOQuery1.Eof do
begin
New(saNode[iCount]);
saNode[iCount].name:= ADOQuery1.fieldbyname('jg_mc').AsString;
saNode[iCount].bh:= ADOQuery1.fieldbyname('jg_bh').AsString;
node1:=treeview1.Items.AddChildObject(node,saNode[iCount].name,saNode[iCount]);
Inc(iCount);
end;
栽树时,两个树应该按照Nm,ID对应着同步的载成.
(我原来有跟你一样的需求,也和你采用同样的解决办法,但是系统报内存错误.把D6 Help中的例题拉出来同样报内存错误)
呵呵,现在是只有两个 字段值
如果以后遇到节点对应n个字段的时候怎么办呢?
弄上n棵树?
再change事件中,该怎么写?
var
bh :string;
begin
if (TreeView1.Selected<>nil)
and (TreeView1.Selected.Level = 2) then
begin
bh:= pryjg(TreeView1.Selected.data)^.bh;
end;
end;另外,刚才上面的代码只是提供思路
你自己还要把初始化树的代码改写
这种解决办法我曾经用过,绝对可以实现你要的效果,自己多试一下吧