我希望將資訊TADOQuery加載到TTreeView. 例如,我希望它像Field1->AddinTable1和Field2->AddChildwith一樣加載buttonClick。但是當我運行代碼時,我收到一個錯誤:
模塊“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;
更新:我想獲取整個表并TTreeView在將新的 Add 和 Child 添加到資料庫時更新。使用這些代碼(AddButtonClick和AddChildButtonClick),我只能將第一個值匯入TTreeView. 我想知道是否需要回圈?
uj5u.com熱心網友回復:
MyNode和Node都是區域變數,您沒有初始化任何東西。你的 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為真。
uj5u.com熱心網友回復:
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]
塊參考
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/400671.html
上一篇:在SOAPWebService(Delphi)中使用TsoapAttachment的記憶體泄漏問題
下一篇:過濾MongoDB中的子檔案
