瀏覽代碼

CheckIDTree增加兄弟节点死循环检查

JimiZhang 3 周之前
父節點
當前提交
d98c887659
共有 2 個文件被更改,包括 14 次插入12 次删除
  1. 二進制
      Tools/CheckIDTree/CheckIDTree.exe
  2. 14 12
      Tools/CheckIDTree/Unit1.pas

二進制
Tools/CheckIDTree/CheckIDTree.exe


+ 14 - 12
Tools/CheckIDTree/Unit1.pas

@@ -131,6 +131,19 @@ begin
     bHasLastNode := False;
     bHasMoreThanOneLastNode := False;
     iEndlessNextID := -1;
+    // 生产所有兄弟的ID关系数组,后面检查兄弟关系死循环用
+    if bIsFirstChild then
+      for K := iFirstChild to FIdx.RecordCount - 1 do
+      begin
+        Rec3 := FIdx.Records[K];
+        // 是否换Parent
+        if Rec1.ValueByName('ParentID').AsInteger <> Rec3.ValueByName('ParentID').AsInteger then Break;
+        iLength := Length(arrChild) + 1;
+        SetLength(arrChild, iLength, 2);
+        arrChild[iLength - 1, 0] := Rec3.ValueByName('ID').AsInteger;
+        arrChild[iLength - 1, 1] := Rec3.ValueByName('NextSiblingID').AsInteger;
+      end;
+
     for J := iFirstChild to FIdx.RecordCount - 1 do
     begin
       ProgressBar.Position := I;
@@ -159,17 +172,6 @@ begin
             bHasMoreThanOneLastNode := True;
           bHasLastNode := True;
         end;
-        // 生产所有兄弟的ID关系数组,后面检查兄弟关系死循环用
-        for K := iFirstChild to FIdx.RecordCount - 1 do
-        begin
-          Rec3 := FIdx.Records[K];
-          // 是否换Parent
-          if Rec1.ValueByName('ParentID').AsInteger <> Rec3.ValueByName('ParentID').AsInteger then Break;
-          iLength := Length(arrChild) + 1;
-          SetLength(arrChild, iLength, 2);
-          arrChild[iLength - 1, 0] := Rec3.ValueByName('ID').AsInteger;
-          arrChild[iLength - 1, 1] := Rec3.ValueByName('NextSiblingID').AsInteger;
-        end;
       end;
       // 寻找后兄弟
       if Rec1.ValueByName('NextSiblingID').AsInteger = Rec2.ValueByName('ID').AsInteger then
@@ -206,7 +208,7 @@ begin
       end;
       if iEndlessNextID >= 0 then
       begin
-        mmError.Lines.Add(Format('Node[ID: %d] and Node[ID: %d] have endless loop.', [Rec1.ValueByName('ID').AsInteger, iEndlessNextID]));
+        mmError.Lines.Add(Format('Node[ID: %d] have endless loop.', [Rec1.ValueByName('ID').AsInteger]));
         Inc(iError);
       end;
     end;