请问为什么不能new?
procedure TfrmMain.BuildSysSNode(iParNDID:integer;iP_ID:integer);
var
adoqeTNT:TADOQuery;
strSqlPar1:string;
strSqlPar2:string;
strSql:string;
i:integer;
iParAIndex,iParTindex:integer;//Par = parent
ptndNewN:PTND;
tnNewN: TTreeNode;
begin
adoqeTNT:=TADOQuery.Create(nil);
adoqeTNT.Connection:=g_adocnMainsys;
strSqlPar1:='select * from TNT where P_ID=';
strSqlpar2:=IntToStr(iP_ID);
strSql:=strSqlPar1+strSqlPar2;
adoqeTNT.SQL.Clear;
adoqeTNT.SQL.Add(strSql);
adoqeTNT.Open;
if(Not adoqeTNT.Active)then
begin
showmessage('Open TNT Error');
exit;
end;
adoqeTNT.First;
for i:=0 to adoqeTNT.RecordCount-1 do
begin
new(ptndNewN);
ptndNewN.iT_ID:=adoqeTNT.Fields[0].AsInteger;
ptndNewN.strCaption:=adoqeTNT.Fields[1].AsString;
ptndNewN.iCType:=adoqeTNT.Fields[4].AsInteger;
ptndNewN.iS_ID:=adoqeTNT.Fields[0].AsInteger;
ptndNewN.iPType:=0;
ptndNewN.iM_ID:=0;
ptndNewN.iG_ID:=0;
ptndNewN.iU_ID:=0;
ptndNewN.iPM:=adoqeTNT.Fields[3].AsInteger;
ptndNewN.iSC:=adoqeTNT.Fields[5].AsInteger;
ptndNewN.iPF:=0;
ptndNewN.iPL:=0;
if(iParNDID=-1)then
begin
tnNewN:=tvMain.Items.AddChildObject(nil,ptndNewN^.strCaption,ptndNewN);
end
else
begin
tnNewN:=tvMain.Items.AddChildObject(tvMain.Items[iParNDID],ptndNewN^.strCaption,ptndNewN);
end;
iParAIndex:=tnNewN.AbsoluteIndex;
iParTIndex:=ptndNewN^.iT_ID;
BuildSysSNode(iParAIndex,iParTIndex);
adoqeTNT.Next;
end;
adoqeTNT.close;
adoqeTNT.Destroy;
end;
现在问题是如果这样运行的话,会在new的地方出错,只能创建一次这个变量?请部这样创建的是动态变量吗?如果是的话,请问为什么不能创建呢?它会出现association错误read of address 0xfffff...或者write of addresss 0xffffff..