View Issue Details

IDProjectCategoryView StatusLast Update
0006234JEDI VCL00 JVCL Componentspublic2015-09-14 13:20
ReporterTorbinsAssigned Toobones 
PrioritynormalSeverityminorReproducibilityalways
Status resolvedResolutionfixed 
Product VersionDaily / GIT 
Target VersionFixed in Version3.48 
Summary0006234: TJvMemoryData imports indexes incorrectly
DescriptionIf records in source dataset were sorted not by index, then this indexes will be imported incorrectly by TJvMemoryData. I have added a patch, to fix this problem.
TagsNo tags attached.

Activities

2013-12-04 12:52

 

JMD Index Import fix.patch (3,227 bytes)
diff --git "a/D:\\Components\\jvclg\\jvcl\\run\\JvMemoryDataset.pas" "b/C:\\Users\\User\\Documents\\RAD Studio\\Projects\\JMD AutoIncrement Test\\JvMemoryDataset.pas"
index cef77ee..ad49617 100644
--- "a/D:\\Components\\jvclg\\jvcl\\run\\JvMemoryDataset.pas"
+++ "b/C:\\Users\\User\\Documents\\RAD Studio\\Projects\\JMD AutoIncrement Test\\JvMemoryDataset.pas"	
@@ -2008,7 +2008,7 @@ end;
 function TJvMemoryData.LoadFromDataSet(Source: TDataSet; RecordCount: Integer;
   Mode: TLoadMode; DisableAllControls: Boolean = True): Integer;
 var
-  MovedCount, I: Integer;
+  MovedCount, I, FinalAutoInc: Integer;
   SB, DB: TBookmark;
 begin
   Result := 0;
@@ -2050,6 +2050,8 @@ begin
         Source.First;
         MovedCount := MaxInt;
       end;
+
+      FinalAutoInc := 0;
       FAutoIncField := nil;
       // FixReadOnlyFields also sets FAutoIncField if there is any
       FixReadOnlyFields(False);
@@ -2069,7 +2071,10 @@ begin
           AssignRecord(Source, Self, True);
           // assign AutoInc value manually (make user keep largest if source isn't sorted by autoinc field)
           if (FAutoIncField <> nil) and (FSrcAutoIncField <> nil) then
-            FAutoInc := Max(FAutoInc, FSrcAutoIncField.AsInteger);
+          begin
+            FinalAutoInc := Max(FinalAutoInc, FSrcAutoIncField.AsInteger);
+            FAutoInc := FSrcAutoIncField.AsInteger; //SetAutoIncFields will write this value to all fields with ftAutoInc
+          end;
           if (Mode = lmCopy) and (FApplyMode <> amNone) then
             FieldByName(FStatusName).AsInteger := Integer(rsOriginal);
           Post;
@@ -2086,6 +2091,8 @@ begin
           FRowsAffected := 0;
         end;
         FixReadOnlyFields(True);
+        if Mode = lmCopy then
+          FAutoInc := FinalAutoInc + 1;
         FAutoIncField := nil;
         FSrcAutoIncField := nil;
         First;
@@ -2468,7 +2475,7 @@ end;
 
 function TJvMemoryData.CopyFromDataSet: Integer;
 var
-  I, Len: Integer;
+  I, Len, FinalAutoInc: Integer;
   Original, StatusField: TField;
   OriginalFields: array of TField;
   FieldReadOnly: Boolean;
@@ -2515,6 +2522,7 @@ begin
     if FApplyMode <> amNone then
       StatusField := FieldByName(FStatusName);
 
+    FinalAutoInc := 0;
     FAutoIncField := nil;
     // find first source autoinc field
     FSrcAutoIncField := nil;
@@ -2552,7 +2560,10 @@ begin
       end;
       // assign AutoInc value manually (make user keep largest if source isn't sorted by autoinc field)
       if (FAutoIncField <> nil) and (FSrcAutoIncField <> nil) then
-        FAutoInc := Max(FAutoInc, FSrcAutoIncField.AsInteger);
+      begin
+        FinalAutoInc := Max(FinalAutoInc, FSrcAutoIncField.AsInteger);
+        FAutoInc := FSrcAutoIncField.AsInteger; //SetAutoIncFields will write this value to all fields with ftAutoInc
+      end;
       if FApplyMode <> amNone then
         StatusField.AsInteger := Integer(rsOriginal);
       Post;
@@ -2562,6 +2573,7 @@ begin
     FRowsChanged := 0;
     FRowsAffected := 0;
   finally
+    FAutoInc := FinalAutoInc + 1;
     SetLength(FCopyFromDataSetFieldDefs, 0);
     FSaveLoadState := slsNone;
     EnableControls;

obones

2013-12-13 11:10

administrator   ~0020753

Please try with the latest JVCL version in GIT (or daily zip) and then send us a zipped file containing the sources of an application showing the issue.

2013-12-16 12:15

 

Jira 6234.7z (452,995 bytes)

Torbins

2013-12-16 12:16

reporter   ~0020853

I have added a demo.

obones

2013-12-18 15:39

administrator   ~0020882

This is now in GIT

Issue History

Date Modified Username Field Change
2013-12-04 12:52 Torbins New Issue
2013-12-04 12:52 Torbins File Added: JMD Index Import fix.patch
2013-12-13 11:10 obones Note Added: 0020753
2013-12-13 11:10 obones Status new => feedback
2013-12-16 12:15 Torbins File Added: Jira 6234.7z
2013-12-16 12:16 Torbins Note Added: 0020853
2013-12-16 17:48 obones Status feedback => acknowledged
2013-12-18 15:39 obones Note Added: 0020882
2013-12-18 15:39 obones Status acknowledged => resolved
2013-12-18 15:39 obones Fixed in Version => Daily / GIT
2013-12-18 15:39 obones Resolution open => fixed
2013-12-18 15:39 obones Assigned To => obones
2015-09-14 13:20 obones Fixed in Version Daily / GIT => 3.48