一个TreeView控件的和数据库的连接问题,我想把数据库里面的部门架构加载到TreeView上,代码如下:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls, Grids, DBGrids;type
TForm1 = class(TForm)
TreeView1: TTreeView;
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Procedure GetSubNodes(MyNode :TTreeNode);
procedure FormCreate(Sender: TObject); private { Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
Type
PMyRecord = ^TMyRecord;
TMyRecord = Record
ParentNOdeID : String;
NodeID : String;
Caption : String;
End;implementation{$R *.dfm}{ TForm1 }procedure TForm1.FormCreate(Sender: TObject);
var
MyRecordPointer :PmyRecord;
begin New(MyRecordPointer);
MyRecordPointer.ParentNOdeID := '00';
MyRecordPointer.NodeID := 'AA';
MyRecordPointer.Caption :='ABC有限公司';
TreeView1.Items.Add(nil,MyRecordPointer.Caption);
TreeView1.Items[0].Data := MyRecordPointer; GetSubNodes(TreeView1.Items[0]);end;procedure TForm1.GetSubNodes(MyNode: TTreeNode);
var
tmpDataSet :TADODataSet;
DataSet2 :TADODataSet;
MyRecordPointer :PMyRecord;
tmpNode : TTreeNode;
SQLStr,SQLStr2 :String;
begin
tmpDataSet.Active := false;
SQLStr := 'FatherPartID = '''+PmyRecord(myNode.Data)^.NOdeID+'''';
tmpDataSet.Connection := ADOConnection1;
tmpDataSet.cursorType := ctStatic;
tmpDataSet.CursorLocation := clUseClient;
tmpDataSet.CommandText := 'select * from Part where '+SQLStr+' order by PartID';
tmpDataSet.Active := true;
tmpDataSet.First;
//showMessage(IntToStr(TmpDataSet.RecordCount));
while not TmpDataSet.Eof do begin
tmpNode := TreeView1.Items.AddChild(MyNode,tmpDataSet.FieldValues['PartName']);
New(MyRecordPointer);
MyRecordPointer.ParentNOdeID := tmpDataSet.FieldValues['FatherPartID'];
MyRecordPointer.NodeID := tmpDataSet.FieldValues['PartID'];
MyRecordPointer.Caption := tmpDataSet.FieldValues['PartName'];
tmpNode.Data := MyRecordPointer;
SQLStr2 := 'FatherPartID = '''+PmyRecord(tmpNode.Data)^.NOdeID+'''';
DataSet2.Connection := ADOConnection1;
DataSet2.cursorType := ctStatic;
DataSet2.CursorLocation := clUseClient;
DataSet2.CommandText := 'select * from Part where '+SQLStr2+' order by PartID';
DataSet2.Active := true;
if DataSet2.RecordCount <> 0 then
begin
GetSubNodes(tmpNode);
// tmpDataSet.Next;
end;
DataSet2.Active := false;
DataSet2.Free;
tmpDataSet.Next;
end;
end;
end.
但是程序一运行就出错:
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls, Grids, DBGrids;type
TForm1 = class(TForm)
TreeView1: TTreeView;
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Procedure GetSubNodes(MyNode :TTreeNode);
procedure FormCreate(Sender: TObject); private { Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
Type
PMyRecord = ^TMyRecord;
TMyRecord = Record
ParentNOdeID : String;
NodeID : String;
Caption : String;
End;implementation{$R *.dfm}{ TForm1 }procedure TForm1.FormCreate(Sender: TObject);
var
MyRecordPointer :PmyRecord;
begin New(MyRecordPointer);
MyRecordPointer.ParentNOdeID := '00';
MyRecordPointer.NodeID := 'AA';
MyRecordPointer.Caption :='ABC有限公司';
TreeView1.Items.Add(nil,MyRecordPointer.Caption);
TreeView1.Items[0].Data := MyRecordPointer; GetSubNodes(TreeView1.Items[0]);end;procedure TForm1.GetSubNodes(MyNode: TTreeNode);
var
tmpDataSet :TADODataSet;
DataSet2 :TADODataSet;
MyRecordPointer :PMyRecord;
tmpNode : TTreeNode;
SQLStr,SQLStr2 :String;
begin
tmpDataSet.Active := false;
SQLStr := 'FatherPartID = '''+PmyRecord(myNode.Data)^.NOdeID+'''';
tmpDataSet.Connection := ADOConnection1;
tmpDataSet.cursorType := ctStatic;
tmpDataSet.CursorLocation := clUseClient;
tmpDataSet.CommandText := 'select * from Part where '+SQLStr+' order by PartID';
tmpDataSet.Active := true;
tmpDataSet.First;
//showMessage(IntToStr(TmpDataSet.RecordCount));
while not TmpDataSet.Eof do begin
tmpNode := TreeView1.Items.AddChild(MyNode,tmpDataSet.FieldValues['PartName']);
New(MyRecordPointer);
MyRecordPointer.ParentNOdeID := tmpDataSet.FieldValues['FatherPartID'];
MyRecordPointer.NodeID := tmpDataSet.FieldValues['PartID'];
MyRecordPointer.Caption := tmpDataSet.FieldValues['PartName'];
tmpNode.Data := MyRecordPointer;
SQLStr2 := 'FatherPartID = '''+PmyRecord(tmpNode.Data)^.NOdeID+'''';
DataSet2.Connection := ADOConnection1;
DataSet2.cursorType := ctStatic;
DataSet2.CursorLocation := clUseClient;
DataSet2.CommandText := 'select * from Part where '+SQLStr2+' order by PartID';
DataSet2.Active := true;
if DataSet2.RecordCount <> 0 then
begin
GetSubNodes(tmpNode);
// tmpDataSet.Next;
end;
DataSet2.Active := false;
DataSet2.Free;
tmpDataSet.Next;
end;
end;
end.
但是程序一运行就出错:
请问,这到底应该怎么解决啊