1- unit uRESTDWDriverBase;
1+ unit uRESTDWDriverBase;
22
33{ $I ..\Includes\uRESTDW.inc}
44
@@ -1310,16 +1310,20 @@ procedure TRESTDWDriverBase.SetUpdateBuffer(var Query: TRESTDWDrvQuery;
13101310 vParam.AsInteger := StrToInt(MassiveReplyValue.NewValue);
13111311 end ;
13121312 end ;
1313-
1314- if (MassiveReplyValue = nil ) and
1315- (not (MassiveDataset.AtualRec.PrimaryValues[X].IsNull)) then begin
1316- if vParam.RESTDWDataTypeParam in [dwftLongWord,dwftLargeint] then
1317- vParam.AsLargeInt := StrToInt64(MassiveDataset.AtualRec.PrimaryValues[X].Value )
1318- else if vParam.DataType = ftSmallInt then
1319- vParam.AsSmallInt := StrToInt(MassiveDataset.AtualRec.PrimaryValues[X].Value )
1320- else
1321- vParam.AsInteger := StrToInt(MassiveDataset.AtualRec.PrimaryValues[X].Value );
1322- end ;
1313+ If vParam.IsNull Then
1314+ Begin
1315+ If (MassiveReplyValue = Nil ) And
1316+ (MassiveDataset.AtualRec.PrimaryValues[X] <> Nil ) And
1317+ (Not (MassiveDataset.AtualRec.PrimaryValues[X].IsNull)) Then
1318+ Begin
1319+ If vParam.RESTDWDataTypeParam in [dwftLongWord,dwftLargeint] Then
1320+ vParam.AsLargeInt := StrToInt64(MassiveDataset.AtualRec.PrimaryValues[X].Value )
1321+ Else If vParam.DataType = ftSmallInt Then
1322+ vParam.AsSmallInt := StrToInt(MassiveDataset.AtualRec.PrimaryValues[X].Value )
1323+ Else
1324+ vParam.AsInteger := StrToInt(MassiveDataset.AtualRec.PrimaryValues[X].Value );
1325+ End ;
1326+ End ;
13231327 end
13241328 else if vParam.RESTDWDataTypeParam in [dwftFloat, dwftCurrency, dwftBCD, dwftFMTBcd, dwftSingle] then begin
13251329 if (not (MassiveDataset.AtualRec.PrimaryValues[X].IsNull)) then
@@ -4030,7 +4034,7 @@ procedure TRESTDWDriverBase.PrepareDataQuery(var Query: TRESTDWDrvQuery;
40304034 else
40314035 vLineSQL := Format(' UPDATE %s ' ,[MassiveDataset.TableName + ' SET %s %s' ]);
40324036 if not MassiveDataset.ReflectChanges then begin
4033- for I := 0 to MassiveDataset.AtualRec.UpdateFieldChanges.Count - 1 do begin
4037+ for I := 0 to MassiveDataset.AtualRec.UpdateFieldChangesCount - 1 do begin
40344038 if Lowercase(MassiveDataset.AtualRec.UpdateFieldChanges[I]) <> Lowercase(RESTDWFieldBookmark) then begin
40354039 if vFields = ' ' then
40364040 vFields := MassiveDataset.AtualRec.UpdateFieldChanges[I] + ' = :' + MassiveDataset.AtualRec.UpdateFieldChanges[I]
@@ -4439,13 +4443,15 @@ procedure TRESTDWDriverBase.BuildDatasetLine(var Query : TRESTDWDrvDataset; Mass
44394443 vStringStream := Nil ;
44404444 If Massivedataset.MassiveMode = mmUpdate Then
44414445 Begin
4442- For I := 0 To Massivedataset.AtualRec.UpdateFieldChanges.Count -1 Do
4446+ For I := 0 To Massivedataset.AtualRec.UpdateFieldChangesCount -1 Do
44434447 Begin
44444448 MassiveField := MassiveDataset.Fields.FieldByName(Massivedataset.AtualRec.UpdateFieldChanges[I]);
4445- If (Lowercase( MassiveField.FieldName) = Lowercase(RESTDWFieldBookmark)) then
4446- Continue;
4447- If (MassiveField <> Nil ) Then
4449+ If MassiveField = Nil Then
4450+ Continue
4451+ Else
44484452 Begin
4453+ If (Lowercase(MassiveField.FieldName) = Lowercase(RESTDWFieldBookmark)) then
4454+ Continue;
44494455 If MassiveField.IsNull Then
44504456 vTempValue := ' '
44514457 Else
@@ -4469,8 +4475,10 @@ procedure TRESTDWDriverBase.BuildDatasetLine(var Query : TRESTDWDrvDataset; Mass
44694475 End ;
44704476 If Not MassiveField.IsNull Then
44714477 vTempValue := MassiveReplyValue.NewValue
4478+ Else If MassiveReplyValue.OldValue <> Null Then
4479+ vTempValue := MassiveReplyValue.OldValue
44724480 Else
4473- vTempValue := MassiveReplyValue.OldValue ;
4481+ vTempValue := ' ' ;
44744482 End
44754483 Else
44764484 Begin
0 commit comments