Delphi 复制树并设置新的数据库id';s

Delphi 复制树并设置新的数据库id';s,delphi,Delphi,我想复制一棵树。树保存在SQLite数据库中,我将其加载到treeview中。表结构类似于:id、父级、级别、位置。在树视图中,id被赋予节点对象。现在我想递归地复制树。必须生成新id并正确设置父id: procedure copyTree(machineId, parent : integer; startNode : TTreeNode); var tmpId : integer; tmpData : TAssignmentData; // Record begin if ass

我想复制一棵树。树保存在SQLite数据库中,我将其加载到treeview中。表结构类似于:id、父级、级别、位置。在树视图中,id被赋予节点对象。现在我想递归地复制树。必须生成新id并正确设置父id:

procedure copyTree(machineId, parent : integer; startNode : TTreeNode);
var
  tmpId : integer;
  tmpData : TAssignmentData; // Record
begin
  if assigned(startNode) then
  begin
    //Read out data from existing node
    tmpData := data.getAssignment(integer(startnode.Data));
    //Set node data to new machine
    tmpData.machine := machineId;
    //If node is on the top level
    if tmpData.parent <> 0 then
      tmpData.parent := parent;
    //Write dataset (new node) to the database
    tmpId := data.insertAssignment(tmpData);

    copyTree(machineId, tmpId, startnode.getFirstChild);
    copyTree(machineId, tmpId, startnode.getNextSibling);
  end;
end;
过程复制树(machineId,父级:整数;startNode:TTreeNode);
变量
tmpId:整数;
tmpData:TAssignmentData;//记录
开始
如果已分配(startNode),则
开始
//从现有节点读取数据
tmpData:=data.getAssignment(整数(startnode.data));
//将节点数据设置为新机器
tmpData.machine:=machineId;
//如果节点位于顶层
如果tmpData.parent为0,则
tmpData.parent:=父项;
//将数据集(新节点)写入数据库
tmpId:=数据插入分配(tmpData);
copyTree(machineId、tmpId、startnode.getFirstChild);
copyTree(machineId、tmpId、startnode.getNextSibling);
结束;
结束;
我已经尝试过这段代码,但是数据库中的父id设置不正确。作业丢了。我的错在哪里


致以最诚挚的问候…

假设
数据。插入分配(tmpData)返回节点的新id,然后只有该节点的子节点的父id应设置为tmpId。您正在将下一个兄弟姐妹的parentid也设置为tmpId

copyTree(machineId, tmpId, startnode.getNextSibling);
考虑只传递同级节点的父节点:

copyTree(machineId, parent, startnode.getNextSibling);