【问题标题】:How can I load Field1 and Field2 from TADOQuery to TTreeView?如何将 Field1 和 Field2 从 TADOQuery 加载到 TTreeView?
【发布时间】:2022-01-25 15:59:11
【问题描述】:

我希望将来自TADOQuery 的信息加载到TTreeView。例如,我希望它在Table1 中加载为Field1->Add,在buttonClick 中加载为Field2->AddChild。但是当我运行代码时,我得到一个错误:

模块“TRV2.exe”中地址 0043616B 的访问冲突

我犯了一个错误或缺少某些东西。你能指导我吗?

procedure TForm1.AddButtonClick(Sender: TObject); 
var
  t: Integer;
  MyNode, Node : TTreeNode; 
begin 
  MyNode := Node;
  t := Node.AbsoluteIndex;
  TreeView1.Items.Add(MyNode, ADOQuery1.FieldByName('CODE_NAME').AsString);
end;

procedure TForm1.AddChildButtonClick(Sender: TObject); 
var
  t: Integer;
  MyNode, Node: TTreeNode; 
begin 
  MyNode := Node;
  t := Node.AbsoluteIndex;
  TreeView1.Items.Add(MyNode, ADOQuery1.FieldByName('CODE_CHILD').AsString);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  t: Integer;
  MyNode, Node: TTreeNode;
begin
  MyNode := Node;
  t := Node.AbsoluteIndex;
  ADOQuery1.Open;
end;  

更新:当我向数据库添加新的 Add 和 Child 时,我想获取整个表并更新 TTreeView。使用这些代码(AddButtonClickAddChildButtonClick)我只能将第一个值导入TTreeView。我想知道是否需要循环?

【问题讨论】:

  • MyNode:=Node; 是有问题的:两者都是未初始化的局部变量,它们的值是随机的。访问 Node 或 MyNode 可能会产生访问冲突。

标签: delphi delphi-7 tadoquery


【解决方案1】:

MyNodeNode 都是局部变量,你没有初始化任何东西。你的 AV 是因为你试图访问一个不存在的对象。

尝试改用类成员,通过单击一个按钮对其进行初始化,然后在单击另一个按钮时使用它,例如:

private
  MyNode: TTreeNode;

...

procedure TForm1.AddButtonClick(Sender: TObject); 
begin 
  MyNode := TreeView1.Items.Add(nil, ADOQuery1.FieldByName('CODE_NAME').AsString);
end;

procedure TForm1.AddChildButtonClick(Sender: TObject); 
begin
  if MyNode <> nil then
    TreeView1.Items.AddChild(MyNode, ADOQuery1.FieldByName('CODE_CHILD').AsString);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ADOQuery1.Open;
end;  

UPDATE:要遍历查询结果中的多条记录,需要循环调用TADOQuery.Next(),直到TADOQuery.Eof为真。

【讨论】:

  • while not ADOQuery1.Eof do //此行不运行后编译程序。
【解决方案2】:

The database was taken into treview with the following codes. There is something missing. Because Field1=Add and Field2=Child. Same Fields repeating.

procedure TForm1.AddButtonClick(Sender: TObject);
var
CurrentDeptID, RecordDeptID: Integer; RootNode, DeptNode: TTreeNode;
begin
CurrentDeptID := 0;
TreeView1.Items.Clear;
RootNode := TreeView1.Items.Add(DeptNode, 'CODE_NAME');
DeptNode := nil;
ADOQuery1.SQL.Text := 'Select * from Tablo1 where CODE_NAME= CODE_NAME';
ADOQuery1.Open;
try
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
RecordDeptID := ADOQuery1.FieldByName('ID').AsInteger;
if ( DeptNode  = nil) or (RecordDeptID <> CurrentDeptID) then
begin
DeptNode := TreeView1.Items.AddChild(RootNode, 
ADOQuery1.FieldByName('CODE_NAME').AsString); //
CurrentDeptID := RecordDeptID;
end;
TreeView1.Items.AddChild(DeptNode, 
ADOQuery1.FieldByName('CODE_CHILD').AsString);
ADOQuery1.Next;
end;
finally
ADOQuery1.close;
end;
end;

[https://i.stack.imgur.com/kNojV.jpg]

块引用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多