mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 18:29:27 +02:00
* Change ApplyUpdates to use FieldDefs instead of Fields to prevent errors when number of fields does not match with number of fieldefs
git-svn-id: trunk@12760 -
This commit is contained in:
parent
82e9d9009d
commit
ea52fee334
@ -909,8 +909,8 @@ begin
|
||||
UpdateMasterDetailProperties;
|
||||
|
||||
// Get PrimaryKeyNo if available
|
||||
if Fields.FindField(FPrimaryKey) <> nil then
|
||||
FPrimaryKeyNo := Fields.FindField(FPrimaryKey).FieldNo - 1
|
||||
if TDefCollection(FieldDefs).Find(FPrimaryKey) <> nil then
|
||||
FPrimaryKeyNo := FieldDefs.Find(FPrimaryKey).FieldNo - 1
|
||||
else
|
||||
FPrimaryKeyNo := FAutoIncFieldNo; // -1 if there's no AutoIncField
|
||||
|
||||
@ -1456,7 +1456,7 @@ begin
|
||||
begin
|
||||
FReturnCode := SQLITE_OK;
|
||||
StatementsCounter := 0;
|
||||
WhereKeyNameEqual := ' WHERE ' + Fields[FPrimaryKeyNo].FieldName + ' = ';
|
||||
WhereKeyNameEqual := ' WHERE ' + FieldDefs[FPrimaryKeyNo].Name + ' = ';
|
||||
{$ifdef DEBUG_SQLITEDS}
|
||||
WriteLn('##TCustomSqliteDataset.ApplyUpdates##');
|
||||
if FPrimaryKeyNo = FAutoIncFieldNo then
|
||||
@ -1492,13 +1492,13 @@ begin
|
||||
for iItems := 0 to FUpdatedItems.Count - 1 do
|
||||
begin
|
||||
SQLLine := TemplateStr;
|
||||
for iFields := 0 to Fields.Count - 2 do
|
||||
for iFields := 0 to FieldDefs.Count - 2 do
|
||||
begin
|
||||
SQLLine := SQLLine + (Fields[iFields].FieldName + ' = ' +
|
||||
SQLLine := SQLLine + (FieldDefs[iFields].Name + ' = ' +
|
||||
FGetSqlStr[iFields](PDataRecord(FUpdatedItems[iItems])^.Row[iFields]) + ',');
|
||||
end;
|
||||
iFields := Fields.Count - 1;
|
||||
SQLLine := SQLLine + (Fields[iFields].FieldName + ' = ' +
|
||||
iFields := FieldDefs.Count - 1;
|
||||
SQLLine := SQLLine + (FieldDefs[iFields].Name + ' = ' +
|
||||
FGetSqlStr[iFields](PDataRecord(FUpdatedItems[iItems])^.Row[iFields]) +
|
||||
WhereKeyNameEqual +
|
||||
String(PDataRecord(FUpdatedItems[iItems])^.Row[FPrimaryKeyNo]) + ';');
|
||||
@ -1520,16 +1520,16 @@ begin
|
||||
if FAddedItems.Count > 0 then
|
||||
begin
|
||||
TemplateStr := 'INSERT INTO ' + FTableName + ' (';
|
||||
for iFields := 0 to Fields.Count - 2 do
|
||||
TemplateStr := TemplateStr + Fields[iFields].FieldName + ',';
|
||||
TemplateStr := TemplateStr + Fields[Fields.Count - 1].FieldName + ') VALUES (';
|
||||
for iFields := 0 to FieldDefs.Count - 2 do
|
||||
TemplateStr := TemplateStr + FieldDefs[iFields].Name + ',';
|
||||
TemplateStr := TemplateStr + FieldDefs[FieldDefs.Count - 1].Name + ') VALUES (';
|
||||
end;
|
||||
for iItems := 0 to FAddedItems.Count - 1 do
|
||||
begin
|
||||
SQLLine := TemplateStr;
|
||||
for iFields := 0 to Fields.Count - 2 do
|
||||
for iFields := 0 to FieldDefs.Count - 2 do
|
||||
SQLLine := SQLLine + (FGetSqlStr[iFields](PDataRecord(FAddedItems[iItems])^.Row[iFields]) + ',');
|
||||
iFields := Fields.Count - 1;
|
||||
iFields := FieldDefs.Count - 1;
|
||||
SQLLine := SQLLine + (FGetSqlStr[iFields](PDataRecord(FAddedItems[iItems])^.Row[iFields]) + ');' );
|
||||
SQLTemp := SQLTemp + SQLLine;
|
||||
Inc(StatementsCounter);
|
||||
|
Loading…
Reference in New Issue
Block a user