⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sctvar.pas

📁 suite component ace report
💻 PAS
📖 第 1 页 / 共 3 页
字号:
      begin
        if Parent is TSctPage then TSctPage(Parent).RemoveVar(self);
      end;
      inherited SetParent(nil);
    end;
  end;
end;

procedure TSctvar.updatelast;
begin
  DataLast.SetData(DataNow);
end;

procedure TSctvar.ReverseUpdate;
begin
  DataNow.SetData(DataLast);
end;

procedure TSctvar.Initialize;
begin
  if FDataNow <> nil Then FDataNow.Free;
  if FDataLast <> nil Then FDataLast.Free;
  FDataNow := nil;
  FDataLast := nil;

  Initialized := True;

  case DataType of
    dtypeString:
      begin
        FDataNow := TSctString.Create;
        FDataLast := TSctString.Create;
      end;
    dtypeFloat:
      begin
        FDataNow := TSctFloat.Create;
        FDataLast := TSctFloat.Create;
      end;
    dtypeInteger:
      begin
        FDataNow := TSctInteger.Create;
        FDataLast := TSctInteger.Create;
      end;
    dtypeDateTime:
      begin
        FDataNow := TSctDateTime.Create;
        FDataLast := TSctDateTime.Create;
      end;
    dtypeBoolean:
      begin
        FDataNow := TSctBoolean.Create;
        FDataLast := TSctBoolean.Create;
      end;
    dtypeBlob:
      begin
        FDataNow := TSctBlob.Create;
        FDataLast := TSctBlob.Create;
      end;
    dtypeMemo:
      begin
        FDataNow := TSctMemo.Create;
        FDataLast := TSctMemo.Create;
      end;
    dtypeGraphic:
      begin
        FDataNow := TSctGraphic.Create;
        FDataLast := TSctGraphic.Create;
      end;
    dtypeUnknown:
      begin
        FDataNow := TSctUnknown.Create;
        FDataLast := TSctUnknown.Create;
        Initialized := False;
      end;
  end;
  if (csDesigning in ComponentState) And Not Running Then UpdateMode := umNeedUpdate;
end;

procedure TSctvar.UpdateData;
begin
  if UpdateMode = umNeedUpdate Then
  begin
    UpdateMode := umUpdating;
    { updating }
    UpdateMode := umNoUpdate;
  end;
end;

procedure TSctvar.ResetData;
begin
  if UpdateMode = umNeedUpdate Then
  begin
    UpdateMode := umUpdating;
    FDataNow.Reset;
    FDataNow.IsNull := True;
    UpdateMode := umNoUpdate;
  end;
end;

function TSctVar.getIsNull: Boolean;
begin
  result := DataNow.IsNull;
end;
procedure TSctVar.SetIsNull(n: Boolean);
begin
  DataNow.IsNull := n;
end;

function TSctvar.GetDataNow: TSctData;
begin
  if UpdateMode = umNeedUpdate Then UpdateData;
  result := FDataNow;
end;

function TSctvar.GetData: TSctData;
begin
  result := DataNow;
end;

function TSctvar.GetAsString: String;
begin
  result := Data.AsString;
end;

function TSctvar.GetAsInteger: Integer;
begin
  result := Data.AsInteger;
end;

function TSctvar.GetAsFloat: Double;
begin
  result := Data.AsFloat;
end;

function TSctvar.GetAsDateTime: TDateTime;
begin
  result := Data.AsDateTime;
end;

function TSctvar.GetAsBoolean: Boolean;
begin
  result := Data.AsBoolean;
end;

function TSctvar.GetAsStream: TStream;
begin
  result := Data.AsStream;
end;
function TSctvar.GetAsStrings: TStrings;
begin
  result := Data.AsStrings;
end;

procedure TSctvar.SetAsString( value: String);
begin
  DataNow.AsString := value;
end;
procedure TSctvar.SetAsInteger( value: Integer);
begin
  DataNow.AsInteger := value;
end;
procedure TSctvar.SetAsFloat( value: Double);
begin
  DataNow.AsFloat := value;
end;
procedure TSctvar.SetAsDateTime( value: TDateTime);
begin
  DataNow.AsDateTime := value;
end;
procedure TSctvar.SetAsBoolean( value: Boolean);
begin
  DataNow.AsBoolean := Value;
end;
procedure TSctvar.SetAsStream( value: TStream);
begin
  DataNow.AsStream := value;
end;
procedure TSctVar.SetAsStrings( Value: TStrings);
begin
  DataNow.AsStrings := Value;
end;

function TSctvar.GetDataType: TSctDataTypes;
begin
  Result := FDataType;
end;

procedure TSctVar.DefineProperties(Filer: TFiler);
begin
  inherited DefineProperties(Filer);
  Filer.DefineProperty('AutoVar', readautovar, writeautovar, True);
  Filer.DefineProperty('ID', readid, writeid, True);
end;
procedure TSctVar.ReadAutoVar(Reader: TReader);
begin
  FAutoVar := Reader.ReadBoolean;
end;
procedure TSctVar.WriteAutoVar( Writer: TWriter);
begin
  Writer.WriteBoolean(FAutoVar);
end;
procedure TSctVar.ReadID(Reader: TReader);
var
  S: String;
begin

  S := Reader.ReadIDent;
  if CompareText('vidAbstract', S) = 0 then FID := vidAbstract
  else if CompareText('vidDBVar', S) = 0 then FID := vidDBVar
  else if CompareText('vidExprVar', S) = 0 then FID := vidExprVar
  else if CompareText('vidTotalVar', S) = 0 then FID := vidTotalVar
  else if CompareText('vidAutoDataVar', S) = 0 then FID := vidAutoDataVar
  else if CompareText('vidDateTimeVar', S) = 0 then FID := vidDateTimeVar
  else if CompareText('vidPageVar', S) = 0 then FID := vidPageVar
  else raise Exception.Create('Cannot find ' + S + ' in TSctVarId');
end;
procedure TSctVar.WriteID( Writer: TWriter);
var
  S: String;
begin
  case FID of
    vidAbstract: S := 'vidAbstract';
    vidDBVar: S := 'vidDBVar';
    vidExprVar: S := 'vidExprVar';
    vidTotalVar: S := 'vidTotalVar';
    vidAutoDataVar: S := 'vidAutoDataVar';
    vidDateTimeVar: S := 'vidDateTimeVar';
    vidPageVar: S := 'vidPageVar';
  end;
  Writer.WriteIDent(S);
end;

{$ifdef AceBDE}
{ TSctdbvar }
constructor TSctdbvar.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FDataLink := TFieldDataLink.Create;
{  FDataLink.Control := Self;} { Don't know if I need }
  FDataLink.OnActiveChange := ActiveChange;
  Id := vidDBVar;
  FActive := False;
{  FField := nil;}
  FFieldNo := -1;
end;

destructor TSctdbvar.Destroy;
begin
  if FDataLink <> nil then FDataLink.Free;
  FDataLink := nil;
  inherited Destroy;
end;

procedure TSctdbvar.Initialize;
var
  Spot: Integer;
  MyField: TField;
begin
  Active := False;
{  FField := nil;}
  if (DataSource <> nil) And (DataSource.DataSet <> nil) Then
  begin
    try
      if Running then
      begin
        Active := TSctGroupPage(Parent).DataSourceManager.ActivateDataSource(DataSource);
      end else Active := DataSource.DataSet.Active;
      
      if Active then
      begin
        MyField := DataSource.DataSet.FindField(FDataField);
        FFieldNo := -1;
        if MyField <> nil then
        begin
          Spot := 0;
          while Spot < DataSource.DataSet.FieldCount do
          begin
            if DataSource.DataSet.Fields[Spot] = MyField then
            begin
              FFieldNo := Spot;
              Spot := DataSource.DataSet.FieldCount;
            end;
            Inc(Spot);
          end;
        end;
      end;
    except
    end;
  end;
  inherited Initialize;
end;

function TSctDbVar.GetFieldDataType: TFieldType;
var
  fd: TFieldDef;
begin
  result := ftUnknown;
  if Field = nil then
  begin
    if (FDataField <> '') And (DataSource <> nil) And (DataSource.DataSet <> nil) then
    begin
      with DataSource.Dataset do
      begin
        try
          fd := FieldDefs.Find(FDataField);
        except
          fd := nil;
        end;
        if fd <> nil then result := fd.DataType;
      end;
    end;
  end else result := Field.DataType;
end;

procedure TSctdbvar.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Operation = opRemove) and (FDataLink <> nil) and
    (AComponent = DataSource) then DataSource := nil;
end;

function TSctdbvar.GetDataSource: TDataSource;
begin
  Result := FDataLink.DataSource;
end;

procedure TSctdbvar.SetDataSource(Value: TDataSource);
begin
  FDataLink.DataSource := Value;
end;

function TSctdbvar.GetDataField: string;
begin
  Result := FDataField;
end;

procedure TSctdbvar.SetDataField(const Value: string);
begin
  FDataField := Value;
  FDataLink.FieldName := Value;
end;

function TSctdbvar.GetField: TField;
begin
  if FFieldNo = -1 then Result := nil
  else Result := FDataLink.Field;
{  Result := FField;}
end;

procedure TSctdbvar.ActiveChange(Sender: TObject);
begin
  FActive := Not FActive;
  if FActive then Initialize
  else
  begin
    FFieldNo := -1;
    Reset;
  end;
end;
procedure TSctdbvar.UpdateData;
var
  S: String;
  I: LongInt;
  F: Double;
  D: TDateTime;
  B: Boolean;

  dbmemo: TDbMemo;
begin
  if UpdateMode = umNeedUpdate Then
  begin
    UpdateMode := umUpdating;
    if Field = nil then FDataNow.Reset
    else
    begin
      if Field.IsNull And
        Not ((Field.DataSet.ClassName = 'TTable')
             And (GetOrdProp(Field.DataSet,GetPropInfo(Field.DataSet.ClassInfo,'TableType')) = 4{value for ttAscii} ))
      then begin
        FDataNow.Reset;
        FDataNow.IsNull := True;
      end else
      begin
        FDataNow.IsNull := False;
        try
          case Field.DataType of
          ftString {$ifdef VCL120PLUS},ftFixedChar{$endif}:
            begin
              S := Field.AsString;
              FDataNow.SetValue( S );
            end;
          ftInteger, ftSmallInt, ftWord:
            begin
              I := Field.AsInteger;
              FDataNow.SetValue( I );
            end;
          ftFloat, ftCurrency, ftBCD:
            begin
              if Field.IsNull then F := 0.0
              else F := Field.AsFloat;
              FDataNow.AsFloat := F;
            end;
          ftDateTime, ftDate, ftTime:
            begin
              if Field.IsNull then D := 0.0
              else D := Field.AsDateTime;
              FDataNow.AsDateTime := D;
            end;
          ftBoolean:
            begin
              B := Field.AsBoolean;
              FDataNow.SetValue( B );
            end;
          ftBlob, ftMemo, ftGraphic {$ifdef VCL120PLUS},ftWideString{$endif}:
            begin
              FDataNow.Reset;
              if (Field.Datatype = ftMemo)
                {$ifdef VCL120PLUS}or (Field.Datatype = ftWideString) {$endif} then
              begin
                dbmemo := TDBMemo.Create(nil);
                dbMemo.Parent := AceMemoU.GForm;
                dbMemo.Visible := False;
                dbmemo.DataSource := DAtaSource;
                dbmemo.DataField := DataField;
                dbmemo.lines.SAveToStream(FDataNow.AsStream);
                dbmemo.Parent := nil;
                dbmemo.free;
              end else
              begin
                TBlobField(Field).SaveToStream( FDataNow.AsStream );
                end;
              end;
          ftUnknown:
            begin
              FDataNow.Reset;
            end;
        {$ifdef WIN32}

           ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -