在窗口上生成一个树形菜单:
procedure treecreate1(tabnam1:string);
var
  mynode:array[0..2] of ttreenode;
begin
  form3.TreeView1.Enabled:=true;
  form3.TreeView1.Items.Clear ;
  form3.ADOQuery1.Close;
  form3.ADOQuery1.SQL.Clear;
  form3.ADOQuery1.SQL.Add('select * from '''+tabnam1+'''');
  form3.ADOQuery1.Open ;
  while not form3.ADOQuery1.Eof do
  begin
    form3.TreeView1.Items.Add(form3.TreeView1.TopItem,form3.ADOQuery1.Fields[1].AsString+form3.ADOQuery1.Fields[0].AsString);
    form3.ADOQuery1.Next;
  end;
end;调用该过程,打开该窗口:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
 form3.hide;
 if dbgrid1.SelectedField=dbgrid1.DataSource.DataSet.FieldByName('b0110') then
  begin
   treecreate1('单位代码');
   form3.Show;
  end;
end;错误提示:
project project1.exe raised exception class EAccessViolation with message 'access violation at address 004563D6 in module 'project1.exe' read of address ffffffff'

解决方案 »

  1.   

    if dbgrid1.SelectedField=dbgrid1.DataSource.DataSet.FieldByName('b0110') then
    改為:
    if dbgrid1.SelectedField='b0110' then
      

  2.   

    procedure treecreate1(tabnam1:string);
    var
      mynode:array[0..2] of ttreenode;
    begin
      form3.TreeView1.Enabled:=true;
      form3.TreeView1.Items.Clear ;
      form3.ADOQuery1.Close;
      form3.ADOQuery1.SQL.Clear;
      form3.ADOQuery1.SQL.Add('select * from '''+tabnam1+'''');
      form3.ADOQuery1.Open ;  TreeView1.Items.Clear;
      Mynode:=TreeView1.Items.Add(nil,'单位信息');
      while not form3.ADOQuery1.Eof do
      begin
        form3.TreeView1.Items.AddChild(Mynode,form3.ADOQuery1.Fields  //改成MYnode[1].AsString+form3.ADOQuery1.Fields[0].AsString);
        form3.ADOQuery1.Next;
      end;
    end;
      

  3.   

    var
       mynode: TTreeNode;
    定义一个就行了
      

  4.   

    我想问题在 你前面清空了Treeview的Items
    在后面对TopItem引用出错
      

  5.   

    剛才寫錯了,應該是:if dbgrid1.SelectedField.FieldName='b0110' then
      With Tform3.Create(Application) do
      begin
        try
          TreeView1.Enabled:=true;
          TreeView1.Items.Clear ;
          ADOQuery1.Close;
          ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Add('select * from '''+tabnam1+'''');
          ADOQuery1.Open ;
          while not ADOQuery1.Eof do
          begin
             TreeView1.Items.Add(TreeView1.TopItem,ADOQuery1.Fields[1].AsString+ADOQuery1.Fields[0].AsString);
             ADOQuery1.Next;
          end;
          ShowModal;
        Finally
          Free;
        End;
      end;
              
      

  6.   

    兄弟,
    你的问题在于Form3.hide,
    后,又有Form3,show,
      

  7.   

    好象是我要调用的窗体FORM3本身出了问题,就算我用FORM3.SHOW都不行了,和上面同样的错误,哪位可以告诉我那是什麽错误.或者如何把与FORM3相关的一切都删除,我刚才删了一下,整个程序都崩了,幸好有备份.DELPHI里可否象VB一样直接在程序里REMOVE窗体.
      

  8.   

    Form3是自创建还是程序中创建
    另外看看 工具栏中的 代减号的那个
      

  9.   

    form3.TreeView1.Items.Add(form3.TreeView1.TopItem, form3.ADOQuery1.Fields[1].AsString+form3.ADOQuery1.Fields[0].AsString);form3.TreeView1.topItem = nil ???