|
@@ -1966,7 +1966,7 @@ begin
|
|
fillchar(Nullmask^,FNullmaskSize,0);
|
|
fillchar(Nullmask^,FNullmaskSize,0);
|
|
inc(buffer,FNullmaskSize);
|
|
inc(buffer,FNullmaskSize);
|
|
|
|
|
|
- for x := 0 to FieldDefs.count-1 do
|
|
|
|
|
|
+ for x := 0 to FieldDefs.Count-1 do
|
|
begin
|
|
begin
|
|
if not LoadField(FieldDefs[x],buffer,CreateBlobField) then
|
|
if not LoadField(FieldDefs[x],buffer,CreateBlobField) then
|
|
SetFieldIsNull(NullMask,x)
|
|
SetFieldIsNull(NullMask,x)
|
|
@@ -1983,9 +1983,11 @@ end;
|
|
|
|
|
|
function TCustomBufDataset.GetCurrentBuffer: TRecordBuffer;
|
|
function TCustomBufDataset.GetCurrentBuffer: TRecordBuffer;
|
|
begin
|
|
begin
|
|
- if State = dsFilter then Result := FFilterBuffer
|
|
|
|
- else if State = dsCalcFields then Result := CalcBuffer
|
|
|
|
- else Result := ActiveBuffer;
|
|
|
|
|
|
+ case State of
|
|
|
|
+ dsFilter: Result := FFilterBuffer;
|
|
|
|
+ dsCalcFields: Result := CalcBuffer;
|
|
|
|
+ else Result := ActiveBuffer;
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
@@ -2017,7 +2019,7 @@ begin
|
|
|
|
|
|
if not assigned(CurrBuff) then Exit;
|
|
if not assigned(CurrBuff) then Exit;
|
|
|
|
|
|
- If Field.Fieldno > 0 then // If = 0, then calculated field or something similar
|
|
|
|
|
|
+ If Field.FieldNo > 0 then // If =-1, then calculated/lookup field or =0 unbound field
|
|
begin
|
|
begin
|
|
if GetFieldIsNull(pbyte(CurrBuff),Field.FieldNo-1) then
|
|
if GetFieldIsNull(pbyte(CurrBuff),Field.FieldNo-1) then
|
|
Exit;
|
|
Exit;
|
|
@@ -2035,7 +2037,7 @@ begin
|
|
if result and assigned(Buffer) then
|
|
if result and assigned(Buffer) then
|
|
begin
|
|
begin
|
|
inc(CurrBuff);
|
|
inc(CurrBuff);
|
|
- Move(CurrBuff^, Buffer^, Field.Datasize);
|
|
|
|
|
|
+ Move(CurrBuff^, Buffer^, Field.DataSize);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
@@ -2055,7 +2057,7 @@ begin
|
|
if not (State in dsWriteModes) then
|
|
if not (State in dsWriteModes) then
|
|
DatabaseError(SNotEditing, Self);
|
|
DatabaseError(SNotEditing, Self);
|
|
CurrBuff := GetCurrentBuffer;
|
|
CurrBuff := GetCurrentBuffer;
|
|
- If Field.Fieldno > 0 then // If = 0, then calculated field or something
|
|
|
|
|
|
+ If Field.FieldNo > 0 then // If =-1, then calculated/lookup field or =0 unbound field
|
|
begin
|
|
begin
|
|
if Field.ReadOnly and not (State in [dsSetKey, dsFilter]) then
|
|
if Field.ReadOnly and not (State in [dsSetKey, dsFilter]) then
|
|
DatabaseErrorFmt(SReadOnlyField, [Field.DisplayName]);
|
|
DatabaseErrorFmt(SReadOnlyField, [Field.DisplayName]);
|
|
@@ -2078,7 +2080,7 @@ begin
|
|
Boolean(CurrBuff^) := Buffer <> nil;
|
|
Boolean(CurrBuff^) := Buffer <> nil;
|
|
inc(CurrBuff);
|
|
inc(CurrBuff);
|
|
if assigned(Buffer) then
|
|
if assigned(Buffer) then
|
|
- Move(Buffer^, CurrBuff^, Field.Datasize);
|
|
|
|
|
|
+ Move(Buffer^, CurrBuff^, Field.DataSize);
|
|
end;
|
|
end;
|
|
if not (State in [dsCalcFields, dsFilter, dsNewValue]) then
|
|
if not (State in [dsCalcFields, dsFilter, dsNewValue]) then
|
|
DataEvent(deFieldChange, Ptrint(Field));
|
|
DataEvent(deFieldChange, Ptrint(Field));
|
|
@@ -2446,7 +2448,7 @@ procedure TCustomBufDataset.CalcRecordSize;
|
|
var x : longint;
|
|
var x : longint;
|
|
|
|
|
|
begin
|
|
begin
|
|
- FNullmaskSize := 1+((FieldDefs.count-1) div 8);
|
|
|
|
|
|
+ FNullmaskSize := (FieldDefs.Count+7) div 8;
|
|
{$IFDEF FPC_REQUIRES_PROPER_ALIGNMENT}
|
|
{$IFDEF FPC_REQUIRES_PROPER_ALIGNMENT}
|
|
FNullmaskSize:=Align(FNullmaskSize,4);
|
|
FNullmaskSize:=Align(FNullmaskSize,4);
|
|
{$ENDIF}
|
|
{$ENDIF}
|