Browse Source

fcl-db/dbase:
* fixed tests TTestSpecificTDBF.TestCodePage and TestTableLevel
* fixed division by zero for null length record size memos (e.g. if no memo file present)

git-svn-id: trunk@24338 -

reiniero 12 years ago
parent
commit
12fd50c890

+ 4 - 3
packages/fcl-db/src/dbase/dbf_memo.pas

@@ -66,7 +66,7 @@ type
     procedure SetBlockLen(BlockLen: Integer); override;
   end;
 
-  { TNullMemoFile, a kind /dev/null memofile ;-) }
+  { TNullMemoFile, a kind of /dev/null memofile ;-) }
   { - inv: FHeaderModified == false!! (otherwise will try to write FStream) }
   { - inv: FHeaderSize == 0 }
   { - inv: FNeedLocks == false }
@@ -387,8 +387,9 @@ begin
     end;
 //    if ((bytesBefore + Src.Size + bytesAfter + PDbtHdr(Header).BlockLen-1) div PDbtHdr(Header).BlockLen)
 //        <= ((ReadSize + PDbtHdr(Header).BlockLen-1) div PDbtHdr(Header).BlockLen) then
-    if ((bytesBefore + Src.Size + bytesAfter + RecordSize-1) div RecordSize)
-        <= ((ReadSize + RecordSize-1) div RecordSize) then
+    // If null memo is used, recordsize may be 0. Test for that.
+    if (RecordSize=0) or (((bytesBefore + Src.Size + bytesAfter + RecordSize-1) div RecordSize)
+        <= ((ReadSize + RecordSize-1) div RecordSize)) then
     begin
       append := false;
     end else begin

+ 2 - 2
packages/fcl-db/tests/testspecifictdbf.pas

@@ -108,9 +108,9 @@ procedure TTestSpecificTDBF.TestTableLevel;
 var
   ds : TDBF;
 begin
+  ds := TDBFAutoClean.Create(nil);
   if ((DS as TDBFAutoClean).UserRequestedTableLevel=25) then
     ignore('Foxpro (tablelevel 25) may write data out in dBase IV (tablelevel 4) format.');
-  ds := TDBFAutoClean.Create(nil);
   DS.FieldDefs.Add('ID',ftInteger);
   DS.CreateTable;
   DS.Open;
@@ -422,9 +422,9 @@ var
   CorrespondingCodePage: integer;
   ds : TDBF;
 begin
+  ds := TDBFAutoClean.Create(nil);
   if ((DS as TDBFAutoClean).UserRequestedTableLevel=25) then
     ignore('Foxpro (tablelevel 25) may write data out in dBase IV (tablelevel 4) format.');
-  ds := TDBFAutoClean.Create(nil);
   DS.FieldDefs.Add('ID',ftInteger);
   if ((DS as TDBFAutoClean).UserRequestedTableLevel in [7,30]) then
   begin