瀏覽代碼

* If the deleted record is the first record in the index, delete it properly

git-svn-id: trunk@10165 -
joost 17 年之前
父節點
當前提交
91447b85e3
共有 1 個文件被更改,包括 8 次插入2 次删除
  1. 8 2
      packages/fcl-db/src/base/bufdataset.pas

+ 8 - 2
packages/fcl-db/src/base/bufdataset.pas

@@ -1766,7 +1766,10 @@ begin
       begin
       begin
       // Remove record from index
       // Remove record from index
       PBufRecLinkItem(CurrBuff)[IndNr].next[IndNr].prior := PBufRecLinkItem(CurrBuff)[IndNr].prior;
       PBufRecLinkItem(CurrBuff)[IndNr].next[IndNr].prior := PBufRecLinkItem(CurrBuff)[IndNr].prior;
-      PBufRecLinkItem(CurrBuff)[IndNr].prior[IndNr].next := PBufRecLinkItem(CurrBuff)[IndNr].next;
+      if assigned(PBufRecLinkItem(CurrBuff)[IndNr].prior) then
+        PBufRecLinkItem(CurrBuff)[IndNr].prior[IndNr].next := PBufRecLinkItem(CurrBuff)[IndNr].next
+      else
+        FIndexes[i].FFirstRecBuf := PBufRecLinkItem(CurrBuff)[IndNr].next;
       // iterate to new position
       // iterate to new position
       tmpRecBuffer:=PBufRecLinkItem(CurrBuff)[IndNr].prior;
       tmpRecBuffer:=PBufRecLinkItem(CurrBuff)[IndNr].prior;
       while assigned(tmpRecBuffer[IndNr].prior) and
       while assigned(tmpRecBuffer[IndNr].prior) and
@@ -1786,7 +1789,10 @@ begin
       begin
       begin
       // Remove record from index
       // Remove record from index
       PBufRecLinkItem(CurrBuff)[IndNr].next[IndNr].prior := PBufRecLinkItem(CurrBuff)[IndNr].prior;
       PBufRecLinkItem(CurrBuff)[IndNr].next[IndNr].prior := PBufRecLinkItem(CurrBuff)[IndNr].prior;
-      PBufRecLinkItem(CurrBuff)[IndNr].prior[IndNr].next := PBufRecLinkItem(CurrBuff)[IndNr].next;
+      if assigned(PBufRecLinkItem(CurrBuff)[IndNr].prior) then
+        PBufRecLinkItem(CurrBuff)[IndNr].prior[IndNr].next := PBufRecLinkItem(CurrBuff)[IndNr].next
+      else
+        FIndexes[i].FFirstRecBuf := PBufRecLinkItem(CurrBuff)[IndNr].next;
       // iterate to new position
       // iterate to new position
       tmpRecBuffer:=PBufRecLinkItem(CurrBuff)[IndNr].next;
       tmpRecBuffer:=PBufRecLinkItem(CurrBuff)[IndNr].next;
       while (tmpRecBuffer[IndNr].next<>FIndexes[i].FLastRecBuf) and
       while (tmpRecBuffer[IndNr].next<>FIndexes[i].FLastRecBuf) and