代码如下:
procedure TFrmkd0013.CreateTVList;
var
TVNode :TTreenode;
qry_trans :TADOQuery;
str_sql :string;
begin
qry_trans :=TADOQuery.Create(self);
qry_trans.Connection :=dm.adoconn;
str_sql :='select FItemID,FNumber,FParentid,FName,FShortNumber into #t_item_temp1 from t_item (nolock) where fitemclassid=4 create index ix_temp1 on #t_item_temp1(fnumber asc,fitemid,fparentid)';
qry_trans.SQL.Add(str_sql);
qry_trans.ExecSQL; TVNode :=TV1.Items.AddChildFirst(TV1.Items.GetFirstNode,'物料'); AddChildNode(TVNode);
qry_trans.Close;
qry_trans.SQL.Clear;
str_sql :='drop table #t_item_temp1';
qry_trans.SQL.Add(str_sql);
qry_trans.ExecSQL;
qry_trans.Free;
end;
procedure TFrmkd0013.AddChildNode(node :TTreeNode);
var
qry_child :TADOQuery;
CData :^TCNODE;
TVNode :TTreenode;
str_sql :string;
begin
qry_child :=TADOQuery.Create(self);
with qry_child do
begin
Connection :=dm.adoconn;
close;
str_sql :=' select * from #t_item_temp1 (nolock) where fparentid='+QuotedStr(Data_Str)+' order by FNumber';
sql.Add(str_sql);
open;
first;
while not eof do
begin
new(CData);
Data_Str := fieldbyname('Fitemid').asstring;
CData^.FNumber := fieldbyname('FNumber').AsString;
CData^.FName := fieldbyname('FName').AsString;
CData^.FParentid := fieldbyname('FParentid').AsString;
TVNode := TV1.Items.AddChildObject(node,fieldbyname('FShortNumber').AsString+'('+fieldbyname('FName').AsString+')',CData);
TVNode.ImageIndex :=1;
TVNode.StateIndex :=2;
AddChildNode(TVNode);
next;
end;
end;
qry_child.Free;
end;出错如图:
procedure TFrmkd0013.CreateTVList;
var
TVNode :TTreenode;
qry_trans :TADOQuery;
str_sql :string;
begin
qry_trans :=TADOQuery.Create(self);
qry_trans.Connection :=dm.adoconn;
str_sql :='select FItemID,FNumber,FParentid,FName,FShortNumber into #t_item_temp1 from t_item (nolock) where fitemclassid=4 create index ix_temp1 on #t_item_temp1(fnumber asc,fitemid,fparentid)';
qry_trans.SQL.Add(str_sql);
qry_trans.ExecSQL; TVNode :=TV1.Items.AddChildFirst(TV1.Items.GetFirstNode,'物料'); AddChildNode(TVNode);
qry_trans.Close;
qry_trans.SQL.Clear;
str_sql :='drop table #t_item_temp1';
qry_trans.SQL.Add(str_sql);
qry_trans.ExecSQL;
qry_trans.Free;
end;
procedure TFrmkd0013.AddChildNode(node :TTreeNode);
var
qry_child :TADOQuery;
CData :^TCNODE;
TVNode :TTreenode;
str_sql :string;
begin
qry_child :=TADOQuery.Create(self);
with qry_child do
begin
Connection :=dm.adoconn;
close;
str_sql :=' select * from #t_item_temp1 (nolock) where fparentid='+QuotedStr(Data_Str)+' order by FNumber';
sql.Add(str_sql);
open;
first;
while not eof do
begin
new(CData);
Data_Str := fieldbyname('Fitemid').asstring;
CData^.FNumber := fieldbyname('FNumber').AsString;
CData^.FName := fieldbyname('FName').AsString;
CData^.FParentid := fieldbyname('FParentid').AsString;
TVNode := TV1.Items.AddChildObject(node,fieldbyname('FShortNumber').AsString+'('+fieldbyname('FName').AsString+')',CData);
TVNode.ImageIndex :=1;
TVNode.StateIndex :=2;
AddChildNode(TVNode);
next;
end;
end;
qry_child.Free;
end;出错如图:
解决方案 »
- dev express(求助)
- 关于视频采集卡
- 外部程序调用时,外部程序非法退出(是外部程序检查到父进程不是Exeplore,所以自己自杀了)
- 大富翁和盒子都上不去了,还有别的什么好地方啊?
- VC写的DLL的一个函数返回类型是char**,在Delphi下如何使用?
- 救命啊。。。怎么project->options..都变成空的了?
- 是不是QucikRep的BUG?
- dbExpress连接sql server2000,把datasource和tdbgrid关联时老是说什么"此项操作不能应用在单向的数据集"。。。
- 我在这个BUTTON上把数量存进了表二里面,然后怎样去冲表一的数量..
- 为什么没人回答我这个问题!不回答也要看看!,是我大幼稚吗?
- dbedit不能输入数据
- 新手提问: DELPHI 模块复制的问题 - 望路过高手不吝赐教!
我估计是你的字段有为空的,当你做asstring的时候就会报错。你检查一下你的数据。
procedure TFrmkd0013.CreateTVList;
var
TVNode :TTreenode;
qry_trans :TADOQuery;
str_sql :string;
begin
qry_trans :=TADOQuery.Create(self);
qry_trans.Connection :=dm.adoconn;
str_sql :='select FItemID,FNumber,FParentid,FName,FShortNumber into #t_item_temp1 from t_item (nolock) where fitemclassid=4 create index ix_temp1 on #t_item_temp1(fnumber asc,fitemid,fparentid)';
qry_trans.SQL.Add(str_sql);
qry_trans.ExecSQL; //这里如果返回要用qry_trans.Open; TVNode :=TV1.Items.AddChildFirst(TV1.Items.GetFirstNode,'物料'); AddChildNode(TVNode); //检查这里是否有问题
qry_trans.Close;
qry_trans.SQL.Clear;
str_sql :='drop table #t_item_temp1';
qry_trans.SQL.Add(str_sql);
qry_trans.ExecSQL;
qry_trans.Free;
end;
procedure TFrmkd0013.AddChildNode(node :TTreeNode);
var
qry_child :TADOQuery;
CData :^TCNODE;
TVNode :TTreenode;
str_sql :string;
begin
qry_child :=TADOQuery.Create(self);
with qry_child do
begin
Connection :=dm.adoconn;
close;
str_sql :=' select * from #t_item_temp1 (nolock) where fparentid='+QuotedStr(Data_Str)+' order by FNumber';
sql.Add(str_sql);
open;
first;
while not eof do
begin
new(CData);
Data_Str := fieldbyname('Fitemid').asstring;
CData^.FNumber := fieldbyname('FNumber').AsString;
CData^.FName := fieldbyname('FName').AsString;
CData^.FParentid := fieldbyname('FParentid').AsString;
TVNode := TV1.Items.AddChildObject(node,fieldbyname('FShortNumber').AsString+'('+fieldbyname('FName').AsString+')',CData);
TVNode.ImageIndex :=1;
TVNode.StateIndex :=2;
AddChildNode(TVNode);//递归调用?
next;
end;
end;
qry_child.Free;
end;注意你的CData,你在哪里释放,可能会引起内存泄露。