那个procedure Tform.pcreateTreeView是本论谈里找来的,我代码是能看懂,只是调试不了,出现Expected'='but'('found.这个错误。是不是过程调用出了问题。请各位帮忙看看。
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, ComCtrls;type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    ADOQuery1: TADOQuery;
    ADOConnection1: TADOConnection;
 procedure Tform.pcreateTreeView(node:TTreenode;parentid:integer;atvnviewnode:TTreeview;
Aadoconnection:TAdoconnection;AStrSql:string;AimageIndex,ASelectedindex:integer;AStrfieldname:string);
  private
    { Private declarations }
  public
    { Public declarations }
  end;type
  PMyRecord = ^MyRecord;
  MyRecord = record
           ID : integer;
           Name:string;
           ParentID : integer;
end;//end of record
var
  Form1: TForm1;implementation{$R *.dfm}
procedure Tform.pcreateTreeView(node:TTreenode;parentid:integer;atvnviewnode:TTreeview;
Aadoconnection:TAdoconnection;AStrSql:string;AimageIndex,ASelectedindex:integer;AStrfieldname:string);
 var
  tmpNode : TTreeNode;
  ADOTree : TADOQuery;
  p : PMyRecord;
begin
  ADOTree := TADOQuery.Create(self);
  ADOTree.Connection := AadoConnection;
  ADOTree.close;
  ADOTree.SQL.clear;
  ADOTree.SQL.Text := AstrSQL+' where '+AstrFieldName +' ='+inttostr(ParentID);
  ADOTree.open;
  if ADOTree.recordcount > 0  then
  begin
    ADOTree.First;
    while not ADOTree.Eof do
    begin
      new(p);
      p.ID := ADOTree.Fields[0].AsInteger;
      p.name :=ADOTree.Fields[1].AsString;
      p.ParentID := ADOTree.Fields[2].AsInteger;
      tmpNode := AtvnViewNode.Items.AddChildObject(Node,p.name,p);
      
      if  AtvnViewNode.Images<>nil then  //有图标时设置图标
       begin
         tmpNode.SelectedIndex := ASelectedIndex; //选中时图标
         tmpNode.ImageIndex := AImageIndex;       //没选中时图标
       end;  {== End If ==}
       
      pCreateTreeView(tmpNode,ADOTree.Fields[0].AsInteger,AtvnViewNode,AadoConnection,AstrSQL,16,17,AstrFieldName);
      ADOTree.next;
      //dispose(p);//一定要去掉这条语句,不然的话,Treeview中的Data也被dispose掉了。
    end;
  end;
  ADOTree.Free;
end;
end.

解决方案 »

  1.   

    看看这个代码,希望能对你有所帮助:procedure TMainForm.FillFolderTreeView;  procedure FillTreeNode(TreeNode: TTreeNode);
      var
        I, FolderID: Integer;
        Node: TTreeNode;
      begin
        FolderID := Integer(TreeNode.Data);
        FolderTinyTable.Filter := 'ParentID=' + IntToStr(FolderID);
        FolderTinyTable.Filtered := True;
        FolderTinyTable.First;
        for I := 0 to FolderTinyTable.RecordCount - 1 do
        begin
          Node := TreeView.Items.AddChild(TreeNode, FolderTinyTable.FieldByName('Name').AsString);
          Node.Data := Pointer(FolderTinyTable.FieldByName('ID').AsInteger);
          Node.ImageIndex := 1;
          Node.SelectedIndex := 1;
          FolderTinyTable.Next;
        end;
        for I := 0 to TreeNode.Count - 1 do
        begin
          FillTreeNode(TreeNode.Item[I]);
        end;
      end;begin
      TreeView.Items.BeginUpdate;
      TreeView.Items.Clear;
      with TreeView.Items.Add(nil, SAddressBook) do
      begin
        Data := Pointer(0);
        ImageIndex := 0;
        SelectedIndex := 0;
      end;
      FillTreeNode(TreeView.Items[0]);
      TreeView.FullExpand;
      TreeView.Items.EndUpdate;
      TreeView.Items[1].Selected := True;
    end;