mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-13 23:59:10 +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;
|
UpdateMasterDetailProperties;
|
||||||
|
|
||||||
// Get PrimaryKeyNo if available
|
// Get PrimaryKeyNo if available
|
||||||
if Fields.FindField(FPrimaryKey) <> nil then
|
if TDefCollection(FieldDefs).Find(FPrimaryKey) <> nil then
|
||||||
FPrimaryKeyNo := Fields.FindField(FPrimaryKey).FieldNo - 1
|
FPrimaryKeyNo := FieldDefs.Find(FPrimaryKey).FieldNo - 1
|
||||||
else
|
else
|
||||||
FPrimaryKeyNo := FAutoIncFieldNo; // -1 if there's no AutoIncField
|
FPrimaryKeyNo := FAutoIncFieldNo; // -1 if there's no AutoIncField
|
||||||
|
|
||||||
@ -1456,7 +1456,7 @@ begin
|
|||||||
begin
|
begin
|
||||||
FReturnCode := SQLITE_OK;
|
FReturnCode := SQLITE_OK;
|
||||||
StatementsCounter := 0;
|
StatementsCounter := 0;
|
||||||
WhereKeyNameEqual := ' WHERE ' + Fields[FPrimaryKeyNo].FieldName + ' = ';
|
WhereKeyNameEqual := ' WHERE ' + FieldDefs[FPrimaryKeyNo].Name + ' = ';
|
||||||
{$ifdef DEBUG_SQLITEDS}
|
{$ifdef DEBUG_SQLITEDS}
|
||||||
WriteLn('##TCustomSqliteDataset.ApplyUpdates##');
|
WriteLn('##TCustomSqliteDataset.ApplyUpdates##');
|
||||||
if FPrimaryKeyNo = FAutoIncFieldNo then
|
if FPrimaryKeyNo = FAutoIncFieldNo then
|
||||||
@ -1492,13 +1492,13 @@ begin
|
|||||||
for iItems := 0 to FUpdatedItems.Count - 1 do
|
for iItems := 0 to FUpdatedItems.Count - 1 do
|
||||||
begin
|
begin
|
||||||
SQLLine := TemplateStr;
|
SQLLine := TemplateStr;
|
||||||
for iFields := 0 to Fields.Count - 2 do
|
for iFields := 0 to FieldDefs.Count - 2 do
|
||||||
begin
|
begin
|
||||||
SQLLine := SQLLine + (Fields[iFields].FieldName + ' = ' +
|
SQLLine := SQLLine + (FieldDefs[iFields].Name + ' = ' +
|
||||||
FGetSqlStr[iFields](PDataRecord(FUpdatedItems[iItems])^.Row[iFields]) + ',');
|
FGetSqlStr[iFields](PDataRecord(FUpdatedItems[iItems])^.Row[iFields]) + ',');
|
||||||
end;
|
end;
|
||||||
iFields := Fields.Count - 1;
|
iFields := FieldDefs.Count - 1;
|
||||||
SQLLine := SQLLine + (Fields[iFields].FieldName + ' = ' +
|
SQLLine := SQLLine + (FieldDefs[iFields].Name + ' = ' +
|
||||||
FGetSqlStr[iFields](PDataRecord(FUpdatedItems[iItems])^.Row[iFields]) +
|
FGetSqlStr[iFields](PDataRecord(FUpdatedItems[iItems])^.Row[iFields]) +
|
||||||
WhereKeyNameEqual +
|
WhereKeyNameEqual +
|
||||||
String(PDataRecord(FUpdatedItems[iItems])^.Row[FPrimaryKeyNo]) + ';');
|
String(PDataRecord(FUpdatedItems[iItems])^.Row[FPrimaryKeyNo]) + ';');
|
||||||
@ -1520,16 +1520,16 @@ begin
|
|||||||
if FAddedItems.Count > 0 then
|
if FAddedItems.Count > 0 then
|
||||||
begin
|
begin
|
||||||
TemplateStr := 'INSERT INTO ' + FTableName + ' (';
|
TemplateStr := 'INSERT INTO ' + FTableName + ' (';
|
||||||
for iFields := 0 to Fields.Count - 2 do
|
for iFields := 0 to FieldDefs.Count - 2 do
|
||||||
TemplateStr := TemplateStr + Fields[iFields].FieldName + ',';
|
TemplateStr := TemplateStr + FieldDefs[iFields].Name + ',';
|
||||||
TemplateStr := TemplateStr + Fields[Fields.Count - 1].FieldName + ') VALUES (';
|
TemplateStr := TemplateStr + FieldDefs[FieldDefs.Count - 1].Name + ') VALUES (';
|
||||||
end;
|
end;
|
||||||
for iItems := 0 to FAddedItems.Count - 1 do
|
for iItems := 0 to FAddedItems.Count - 1 do
|
||||||
begin
|
begin
|
||||||
SQLLine := TemplateStr;
|
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]) + ',');
|
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]) + ');' );
|
SQLLine := SQLLine + (FGetSqlStr[iFields](PDataRecord(FAddedItems[iItems])^.Row[iFields]) + ');' );
|
||||||
SQLTemp := SQLTemp + SQLLine;
|
SQLTemp := SQLTemp + SQLLine;
|
||||||
Inc(StatementsCounter);
|
Inc(StatementsCounter);
|
||||||
|
Loading…
Reference in New Issue
Block a user