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

📄 aceds.pas

📁 suite component ace report
💻 PAS
字号:
unit AceDS;

{ ----------------------------------------------------------------
  Ace Reporter
  Copyright 1995-1998 SCT Associates, Inc.
  Written by Kevin Maher, Steve Tyrakowski
  ---------------------------------------------------------------- }

interface
{$I ace.inc}

uses {$ifdef AceBDE} db, 
         {$ifndef VCL130PLUS} dbtables, {$endif}
     {$endif}    
     classes;

type

TAceDataSource = class(TObject)
private

protected
public
  DataSource: TDataSource;
  CloseDataSource: Boolean;
  UnableToActivate: Boolean;
  constructor Create(DS: TDataSource); virtual;
  destructor Destroy; override;

  procedure CloseSource;
  function OpenSource: Boolean;

end;

TAceDataSourceManager = class(TObject)
private
protected
public
  DSList: TList;
  constructor Create; virtual;
  destructor Destroy; override;
  procedure CloseDataSources;
  function ActivateDataSource(DS: TDataSource): Boolean;

end;

implementation

constructor TAceDataSource.Create(DS: TDataSource);
begin
  DataSource := DS;
  CloseDataSource := False;
  UnableToActivate := False;
end;

destructor TAceDataSource.Destroy;
begin
  CloseSource;
  inherited Destroy;
end;

function TAceDataSource.OpenSource: Boolean;
begin
  Result := False;
  if DataSource <> nil then
  begin
    if DataSource.DataSet <> nil then
    begin
      if Not DataSource.DataSet.Active then
      begin
        try
          DataSource.DataSet.Active := True;
          CloseDataSource := DataSource.DataSet.Active;
          UnableToActivate := Not CloseDataSource;
          Result := CloseDataSource;
        except
          UnableToActivate := True;
        end;
      end else Result := True;
    end;
  end;
end;

procedure TAceDataSource.CloseSource;
begin
  if CloseDataSource then
  begin
    if DataSource <> nil then
    begin
      if DataSource.DataSet <> nil then
      begin
        if DataSource.DataSet.Active then
        begin
          DataSource.DataSet.Active := False;
          CloseDataSource := False;
        end;
      end;
    end;
  end;
  UnableToActivate := False;
end;



constructor TAceDataSourceManager.Create;
begin
  DSList := TList.Create;
end;
destructor TAceDataSourceManager.Destroy;
begin
  CloseDataSources;
  if DSList <> nil then DSList.Free;
  inherited Destroy;
end;
function TAceDataSourceManager.ActivateDataSource(DS: TDataSource): Boolean;
var
  ADS: TAceDataSource;
  Duplicate: Boolean;
  Spot: Integer;
begin
  Result := False;
  if DS <> nil then
  begin
    Spot := 0;
    Duplicate := False;
    While Not Duplicate And ( Spot < DSList.Count) do
    begin
      ADS := DSList.Items[Spot];
      if ADS.DataSource = DS then Duplicate := True;
      Inc(Spot);
    end;

    if Not Duplicate then
    begin
      ADS := TAceDataSource.Create(DS);
      DSList.Add(ADS);
      Result := ADS.OpenSource;
    end else
    begin
      if DS.DataSet <> nil then Result := DS.DataSet.Active;
    end;
  end;
end;
procedure TAceDataSourceManager.CloseDataSources;
var
  ADS: TAceDataSource;
  Spot: Integer;
begin
  for Spot := 0 to DSList.Count - 1 do
  begin
    ADS := DSList.Items[Spot];
    ADS.CloseSource;
    ADS.Free;
  end;
  DSList.Clear;
end;

end.

⌨️ 快捷键说明

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