Browse Source

+ Patch from Martin Schreiber to fix AV when closing a TSQLQuery

git-svn-id: trunk@4244 -
michael 19 years ago
parent
commit
d3896e0661
2 changed files with 14 additions and 12 deletions
  1. 13 11
      fcl/db/bufdataset.inc
  2. 1 1
      fcl/db/db.pp

+ 13 - 11
fcl/db/bufdataset.inc

@@ -77,6 +77,7 @@ procedure TBufDataset.InternalClose;
 var pc : pchar;
 var pc : pchar;
 
 
 begin
 begin
+ if fopen then begin
   FOpen:=False;
   FOpen:=False;
   FCurrentRecBuf := FFirstRecBuf;
   FCurrentRecBuf := FFirstRecBuf;
   SetLength(FUpdateBuffer,0);
   SetLength(FUpdateBuffer,0);
@@ -87,6 +88,7 @@ begin
     FreeRecordBuffer(pc);
     FreeRecordBuffer(pc);
     end;
     end;
   SetLength(FFieldBufPositions,0);
   SetLength(FFieldBufPositions,0);
+ end;
 end;
 end;
 
 
 procedure TBufDataset.InternalFirst;
 procedure TBufDataset.InternalFirst;
@@ -160,12 +162,12 @@ begin
   if Result = grOK then
   if Result = grOK then
     begin
     begin
 
 
-    with PBufBookmark(Buffer + FRecordSize)^ do
+    with PBufBookmark(Buffer + RecordSize)^ do
       begin
       begin
       BookmarkData := FCurrentRecBuf;
       BookmarkData := FCurrentRecBuf;
       BookmarkFlag := bfCurrent;
       BookmarkFlag := bfCurrent;
       end;
       end;
-    move((pointer(FCurrentRecBuf)+sizeof(TBufRecLinkItem))^,buffer^,FRecordSize);
+    move((pointer(FCurrentRecBuf)+sizeof(TBufRecLinkItem))^,buffer^,RecordSize);
     end
     end
   else if (Result = grError) and doCheck then
   else if (Result = grError) and doCheck then
     DatabaseError('No record');
     DatabaseError('No record');
@@ -190,27 +192,27 @@ end;
 
 
 procedure TBufDataset.InternalSetToRecord(Buffer: PChar);
 procedure TBufDataset.InternalSetToRecord(Buffer: PChar);
 begin
 begin
-  FCurrentRecBuf := PBufBookmark(Buffer + FRecordSize)^.BookmarkData;
+  FCurrentRecBuf := PBufBookmark(Buffer + RecordSize)^.BookmarkData;
 end;
 end;
 
 
 procedure TBufDataset.SetBookmarkData(Buffer: PChar; Data: Pointer);
 procedure TBufDataset.SetBookmarkData(Buffer: PChar; Data: Pointer);
 begin
 begin
-  PBufBookmark(Buffer + FRecordSize)^.BookmarkData := pointer(Data^);
+  PBufBookmark(Buffer + RecordSize)^.BookmarkData := pointer(Data^);
 end;
 end;
 
 
 procedure TBufDataset.SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag);
 procedure TBufDataset.SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag);
 begin
 begin
-  PBufBookmark(Buffer + FRecordSize)^.BookmarkFlag := Value;
+  PBufBookmark(Buffer + RecordSize)^.BookmarkFlag := Value;
 end;
 end;
 
 
 procedure TBufDataset.GetBookmarkData(Buffer: PChar; Data: Pointer);
 procedure TBufDataset.GetBookmarkData(Buffer: PChar; Data: Pointer);
 begin
 begin
-  pointer(Data^) := PBufBookmark(Buffer + FRecordSize)^.BookmarkData;
+  pointer(Data^) := PBufBookmark(Buffer + RecordSize)^.BookmarkData;
 end;
 end;
 
 
 function TBufDataset.GetBookmarkFlag(Buffer: PChar): TBookmarkFlag;
 function TBufDataset.GetBookmarkFlag(Buffer: PChar): TBookmarkFlag;
 begin
 begin
-  Result := PBufBookmark(Buffer + FRecordSize)^.BookmarkFlag;
+  Result := PBufBookmark(Buffer + RecordSize)^.BookmarkFlag;
 end;
 end;
 
 
 procedure TBufDataset.InternalGotoBookmark(ABookmark: Pointer);
 procedure TBufDataset.InternalGotoBookmark(ABookmark: Pointer);
@@ -440,7 +442,7 @@ begin
         begin
         begin
         if UpdateKind = ukModify then
         if UpdateKind = ukModify then
           begin
           begin
-          move(pchar(OldValuesBuffer+sizeof(TBufRecLinkItem))^,pchar(BookmarkData+sizeof(TBufRecLinkItem))^,FRecordSize);
+          move(pchar(OldValuesBuffer+sizeof(TBufRecLinkItem))^,pchar(BookmarkData+sizeof(TBufRecLinkItem))^,RecordSize);
           FreeRecordBuffer(OldValuesBuffer);
           FreeRecordBuffer(OldValuesBuffer);
           end
           end
         else if UpdateKind = ukDelete then
         else if UpdateKind = ukDelete then
@@ -577,7 +579,7 @@ begin
       FFirstRecBuf := FCurrentRecBuf;
       FFirstRecBuf := FCurrentRecBuf;
 
 
     // Link the newly created record buffer to the newly created TDataset record
     // Link the newly created record buffer to the newly created TDataset record
-    with PBufBookmark(ActiveBuffer + FRecordSize)^ do
+    with PBufBookmark(ActiveBuffer + RecordSize)^ do
       begin
       begin
       BookmarkData := FCurrentRecBuf;
       BookmarkData := FCurrentRecBuf;
       BookmarkFlag := bfInserted;
       BookmarkFlag := bfInserted;
@@ -599,7 +601,7 @@ begin
       begin
       begin
       // Update the oldvalues-buffer
       // Update the oldvalues-buffer
       FUpdateBuffer[FCurrentUpdateBuffer].OldValuesBuffer := intAllocRecordBuffer;
       FUpdateBuffer[FCurrentUpdateBuffer].OldValuesBuffer := intAllocRecordBuffer;
-      move(FCurrentRecBuf^,FUpdateBuffer[FCurrentUpdateBuffer].OldValuesBuffer^,FRecordSize+sizeof(TBufRecLinkItem));
+      move(FCurrentRecBuf^,FUpdateBuffer[FCurrentUpdateBuffer].OldValuesBuffer^,RecordSize+sizeof(TBufRecLinkItem));
       FUpdateBuffer[FCurrentUpdateBuffer].UpdateKind := ukModify;
       FUpdateBuffer[FCurrentUpdateBuffer].UpdateKind := ukModify;
       end
       end
     else
     else
@@ -608,7 +610,7 @@ begin
 
 
   CurrBuff := pchar(FCurrentRecBuf);
   CurrBuff := pchar(FCurrentRecBuf);
   inc(Currbuff,sizeof(TBufRecLinkItem));
   inc(Currbuff,sizeof(TBufRecLinkItem));
-  move(ActiveBuffer^,CurrBuff^,FRecordSize);
+  move(ActiveBuffer^,CurrBuff^,RecordSize);
 end;
 end;
 
 
 procedure TBufDataset.CalcRecordSize;
 procedure TBufDataset.CalcRecordSize;

+ 1 - 1
fcl/db/db.pp

@@ -2206,7 +2206,7 @@ end;
 {$i fields.inc}
 {$i fields.inc}
 {$i datasource.inc}
 {$i datasource.inc}
 {$i database.inc}
 {$i database.inc}
-{$i BufDataset.inc}
+{$i bufdataset.inc}
 {$i dsparams.inc}
 {$i dsparams.inc}
 
 
 end.
 end.