* Fixed bug ID #8201

git-svn-id: trunk@30435 -
This commit is contained in:
michael 2015-04-05 10:12:46 +00:00
parent 844cf495f8
commit d63961ce02
3 changed files with 46 additions and 30 deletions

View File

@ -90,38 +90,36 @@ begin
FCalcFieldsSize := 0; FCalcFieldsSize := 0;
FBlobFieldCount := 0; FBlobFieldCount := 0;
for i := 0 to Fields.Count - 1 do for i := 0 to Fields.Count - 1 do
with Fields[i] do begin with Fields[i] do
begin
FFieldDef:=Nil; FFieldDef:=Nil;
if Binding then begin if not Binding then
if FieldKind in [fkCalculated, fkLookup] then begin FFieldNo := 0
else if FieldKind in [fkCalculated, fkLookup] then
begin
FFieldNo := -1; FFieldNo := -1;
FOffset := FCalcFieldsSize; FOffset := FCalcFieldsSize;
Inc(FCalcFieldsSize, DataSize + 1); Inc(FCalcFieldsSize, DataSize + 1);
if FieldKind in [fkLookup] then begin
if ((FLookupDataSet = nil) or (FLookupKeyFields = '') or
(FLookupResultField = '') or (FKeyFields = '')) then
DatabaseErrorFmt(SLookupInfoError, [DisplayName]);
FFields.CheckFieldNames(FKeyFields);
FLookupDataSet.Open;
FLookupDataSet.Fields.CheckFieldNames(FLookupKeyFields);
FLookupDataSet.FieldByName(FLookupResultField);
if FLookupCache then RefreshLookupList;
end end
end else begin else
begin
FFieldDef := nil; FFieldDef := nil;
FieldIndex := FieldDefs.IndexOf(Fields[i].FieldName); FieldIndex := FieldDefs.IndexOf(Fields[i].FieldName);
if FieldIndex <> -1 then begin if FieldIndex <> -1 then
begin
FFieldDef := FieldDefs[FieldIndex]; FFieldDef := FieldDefs[FieldIndex];
FFieldNo := FFieldDef.FieldNo; FFieldNo := FFieldDef.FieldNo;
if FieldDef.InternalCalcField then FInternalCalcFields := True; if FieldDef.InternalCalcField then
if IsBlob then begin FInternalCalcFields := True;
if IsBlob then
begin
FSize := FFieldDef.Size; FSize := FFieldDef.Size;
FOffset := FBlobFieldCount; FOffset := FBlobFieldCount;
Inc(FBlobFieldCount); Inc(FBlobFieldCount);
end; end;
end else FFieldNo := 0; end
end; end;
end else FFieldNo := 0; Bind(Binding);
end; end;
end; end;

View File

@ -322,6 +322,7 @@ type
procedure CheckInactive; procedure CheckInactive;
class procedure CheckTypeSize(AValue: Longint); virtual; class procedure CheckTypeSize(AValue: Longint); virtual;
procedure Change; virtual; procedure Change; virtual;
procedure Bind(Binding: Boolean); virtual;
procedure DataChanged; procedure DataChanged;
procedure FreeBuffers; virtual; procedure FreeBuffers; virtual;
function GetAsBCD: TBCD; virtual; function GetAsBCD: TBCD; virtual;

View File

@ -384,6 +384,23 @@ begin
end; end;
end; end;
procedure TField.Bind(Binding: Boolean);
begin
if Binding and (FieldKind=fkLookup) then
begin
if ((FLookupDataSet = nil) or (FLookupKeyFields = '') or
(FLookupResultField = '') or (FKeyFields = '')) then
DatabaseErrorFmt(SLookupInfoError, [DisplayName]);
FFields.CheckFieldNames(FKeyFields);
FLookupDataSet.Open;
FLookupDataSet.Fields.CheckFieldNames(FLookupKeyFields);
FLookupDataSet.FieldByName(FLookupResultField);
if FLookupCache then
RefreshLookupList;
end;
end;
procedure TField.Change; procedure TField.Change;
begin begin