procedure TCodeForm.FormShow(Sender: TObject);
var
  codeSys: TCodeSys;
begin
 codeSys := TCodeSys.Create;
 if TreeView1.Selected.Text = '海区' then  ///到这里总是错误。。
 begin
  CodeData := codeSys.GetCode;
  DataSourceArea.DataSet := CodeData;
  end
 else
  begin
  DataSourceArea.DataSet := nil;
  end;
  codeSys.Free;
end;

解决方案 »

  1.   

    改一下这句,选中结点为空,所以出错
    if Assigned(TreeView1.Selected)and(TreeView1.Selected.Text = '海区') then  ///到这里总是错误。。......
      

  2.   

    当formshow时,treeview并没有节点被选中,treeview1.selected=nil,这时候引用等于引用一个不存在的地址,当然要出异常了。把这一段去掉吧,没用的代码:
    if TreeView1.Selected.Text = '海区' then  ///到这里总是错误。。
     begin
      CodeData := codeSys.GetCode;
      DataSourceArea.DataSet := CodeData;
      end
     else
      
      

  3.   

    改成 if (Not Assigned(TreeView1.Selected)and(TreeView1.Selected.Text = '海区')) then还是原来的错误
    ::: Project Mexs.exe(我得程序) raised exception class EAccessViolation with 
    message'Access vidation at address 0050428D in module'Mexs.exe'.Read of 
    address 00000008.Process stopped.'Use step or run to continue。
      

  4.   

    好像明白了一点
    我得treeview有两个父节点,父节点下各有4个子节点,每个子节点对应一个表
    不知道该怎么连接对应的表
    :(
      

  5.   

    procedure TForm1.FormShow(Sender: TObject);
    var
    i:integer;
    node:TTreeNode;
    list:TStringList;
    s:AnsiString;
    begin
      ADOquery1.Close;
      ADOquery1.sql.Clear;
      ADOquery1.sql.Add('select distinct 父结点数据 from 表');
      query1.open;
      list:=tstringlist.Create;
      while not ADOquery1.Eof do
      begin
        list.Append(query1.fieldbyname('父结点数据').asstring);
        ADOquery1.next;
      end;
      for i:=0 to list.count-1 do
      begin
       s:=list.strings[i];
       node:=treeview1.Items.Add(treeview1.selected,s);
       treeview1.Items.addchild(node,'temp');
      end;
      treeview1.Items[1].Selected :=true;
    end;