亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dbsumlst.pas

?? delphi控件類
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
{*******************************************************}
{                                                       }
{                       EhLib v2.0                      }
{                   TDBSumList component                }
{                                                       }
{   Copyright (c) 1998, 2001 by Dmitry V. Bolshakov     }
{                                                       }
{*******************************************************}

{$I EhLib.Inc}

unit DBSumLst;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DB,
{$IFDEF EH_LIB_6} Variants, {$ENDIF}
  TypInfo {,dbugintf} ;

type
  TGroupOperation = (goSum,goAvg,goCount);

  TDBSum = class(TCollectionItem)
  private
    procedure SetGroupOperation(const Value: TGroupOperation);
    procedure SetFieldName(const Value: String);
  protected
    FFieldName:String;
    FGroupOperation:TGroupOperation;
    Value:Currency;
    // For Average
    FNotNullRecordCount:Integer;
    FSumValueAsSum:Currency;
    VarValue:Variant;
  public
    SumValue:Currency;
    procedure Assign(Source: TPersistent); override;
  published
    property FieldName:String read FFieldName write SetFieldName;
    property GroupOperation:TGroupOperation read FGroupOperation write SetGroupOperation;
  end;

  TDBSumCollection = class(TCollection)
  protected
    FOwner:TPersistent;
    function GetItem(Index: Integer): TDBSum;
    function GetOwner:TPersistent; override;
    procedure SetItem(Index: Integer; Value: TDBSum);
    procedure Update(Item: TCollectionItem); override;
  public
    function GetSumByOpAndFName(AGroupOperation: TGroupOperation; AFieldName:String):TDBSum;
    property Items[Index: Integer]: TDBSum read GetItem write SetItem; default;
  end;

  TDBSumListProducer = class(TPersistent)
  private
    FVirtualRecords: Boolean;
    function GetRecNo: Integer;
    procedure SetRecNo(const Value: Integer);
    procedure SetVirtualRecords(const Value: Boolean);
  protected
    Changing:Boolean;
    FActive: Boolean;
    FDataSet:TDataSet;
    FDesignTimeWork:Boolean;
    FEventsOverloaded: Boolean;
    FExternalRecalc: Boolean;
    Filter:String;
    Filtered:Boolean;
    FMasterDataset:TDataset;
    FMasterPropInfo: PPropInfo;
    FOldRecNo:Integer;
    FOnRecalcAll: TNotifyEvent;
    FOwner:TComponent;
    FSumCollection:TDBSumCollection;
    FSumListChanged:TNotifyEvent;
    FTryedInsert:Boolean;
    FVirtualRecList: TList;
    OldAfterCancel:TDataSetNotifyEvent;
    OldAfterClose :TDataSetNotifyEvent;
    OldAfterEdit :TDataSetNotifyEvent;
    OldAfterInsert :TDataSetNotifyEvent;
    OldAfterOpen :TDataSetNotifyEvent;
    OldAfterPost :TDataSetNotifyEvent;
    OldAfterScroll :TDataSetNotifyEvent;
    OldBeforeDelete :TDataSetNotifyEvent;
    OldMasterAfterScroll :TDataSetNotifyEvent;
    function FindVirtualRecord(Bookmark:TBookmark):Integer; virtual;
    function GetMasterDataSet(APropInfo:PPropInfo): TDataSet;
    function GetOwner: TPersistent; override;
    procedure DataSetAfterCancel(DataSet: TDataSet);
    procedure DataSetAfterClose(DataSet: TDataSet);
    procedure DataSetAfterEdit(DataSet: TDataSet);
    procedure DataSetAfterInsert(DataSet: TDataSet);
    procedure DataSetAfterOpen(DataSet: TDataSet);
    procedure DataSetAfterPost(DataSet: TDataSet);
    procedure DataSetAfterScroll(DataSet: TDataSet);
    procedure DataSetBeforeDelete(DataSet: TDataSet);
    procedure DoSumListChanged;
    procedure Loaded;
    procedure MasterDataSetAfterScroll(DataSet: TDataSet);
    procedure ResetMasterInfo;
    procedure ReturnEvents; virtual;
    procedure SetActive(const Value: Boolean);
    procedure SetDataSet(Value:TDataSet);
    procedure SetExternalRecalc(const Value: Boolean);
    procedure SetSumCollection(const Value: TDBSumCollection);
    procedure Update;
  public
    constructor Create(AOwner:TComponent);
    destructor Destroy; override;
    function IsSequenced: Boolean;
    function RecordCount : Integer;
    procedure Activate(ARecalcAll: Boolean);
    procedure Assign(Source: TPersistent); override;
    procedure ClearSumValues; virtual;
    procedure Deactivate(AClearSumValues: Boolean);
    procedure RecalcAll; virtual;
    procedure SetDataSetEvents; virtual;
    property Active: Boolean read FActive write SetActive default True;
    property DataSet: TDataSet read FDataSet write SetDataSet;
    property ExternalRecalc: Boolean read FExternalRecalc write SetExternalRecalc;
    property RecNo : Integer read GetRecNo write SetRecNo;
    property SumCollection:TDBSumCollection read FSumCollection write SetSumCollection;
    property VirtualRecords: Boolean read FVirtualRecords write SetVirtualRecords;
    property SumListChanged: TNotifyEvent read FSumListChanged write FSumListChanged;
    property OnRecalcAll: TNotifyEvent read FOnRecalcAll write FOnRecalcAll;
  end;

  TDBSumList = class(TComponent)
  private
    function GetActive: Boolean;
    function GetDataSet: TDataSet;
    function GetExternalRecalc: Boolean;
    function GetOnRecalcAll: TNotifyEvent;
    function GetRecNo: Integer;
    function GetSumCollection: TDBSumCollection;
    function GetSumListChanged: TNotifyEvent;
    function GetVirtualRecords: Boolean;
    procedure SetOnRecalcAll(const Value: TNotifyEvent);
    procedure SetRecNo(const Value: Integer);
    procedure SetSumListChanged(const Value: TNotifyEvent);
    procedure SetVirtualRecords(const Value: Boolean);
  protected
    FSumListProducer: TDBSumListProducer;
    procedure DataSetAfterClose(DataSet: TDataSet);
    procedure DataSetAfterEdit(DataSet: TDataSet);
    procedure DataSetAfterInsert(DataSet: TDataSet);
    procedure DataSetAfterOpen(DataSet: TDataSet);
    procedure DataSetAfterPost(DataSet: TDataSet);
    procedure DataSetAfterScroll(DataSet: TDataSet);
    procedure DataSetBeforeDelete(DataSet: TDataSet);
    procedure DoSumListChanged;
    procedure Loaded; override;
    procedure MasterDataSetAfterScroll(DataSet: TDataSet);
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    procedure SetActive(const Value: Boolean);
    procedure SetDataSet(Value:TDataSet);
    procedure SetExternalRecalc(const Value: Boolean);
    procedure SetSumCollection(const Value: TDBSumCollection);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function IsSequenced: Boolean;
    function RecordCount: Integer;
    procedure Activate(ARecalcAll: Boolean);
    procedure ClearSumValues; virtual;
    procedure Deactivate(AClearSumValues: Boolean);
    procedure RecalcAll; virtual;
    procedure SetDataSetEvents;
    property RecNo : Integer read GetRecNo write SetRecNo;
  published
    property Active: Boolean read GetActive write SetActive default True;
    property DataSet: TDataSet read GetDataSet write SetDataSet;
    property ExternalRecalc: Boolean read GetExternalRecalc write SetExternalRecalc;
    property SumCollection:TDBSumCollection read GetSumCollection write SetSumCollection;
    property VirtualRecords: Boolean read GetVirtualRecords write SetVirtualRecords;
    property SumListChanged: TNotifyEvent read GetSumListChanged write SetSumListChanged;
    property OnRecalcAll: TNotifyEvent read GetOnRecalcAll write SetOnRecalcAll;
  end;

implementation

{ TDBSumListProducer }

constructor TDBSumListProducer.Create(AOwner:TComponent);
begin
  inherited Create;
{$ifdef eval}
  {$INCLUDE eval}
{$endif}
  FDesignTimeWork := False;
  FOwner := AOwner;
  FSumCollection := TDBSumCollection.Create(TDBSum);
  FSumCollection.FOwner := Self;
  FActive := True;
  FVirtualRecList := TList.Create;
end;

destructor TDBSumListProducer.Destroy;
begin
  Deactivate(False);
  FVirtualRecList.Free;
  FSumCollection.Free;
  inherited;
end;


procedure TDBSumListProducer.Assign(Source: TPersistent);
begin
  if Source is TDBSumListProducer then
  begin
    Active := TDBSumListProducer(Source).Active;
    ExternalRecalc := TDBSumListProducer(Source).ExternalRecalc;
    SumCollection.Assign(TDBSumListProducer(Source).SumCollection);
    DataSet := TDBSumListProducer(Source).DataSet;
    SumListChanged := TDBSumListProducer(Source).SumListChanged;
    OnRecalcAll := TDBSumListProducer(Source).OnRecalcAll;
  end
  else inherited Assign(Source);
end;

{ obsolete
function GetMasterSource(ADataSet:TDataSet): TDataSet;
var PropInfo: PPropInfo;
    PropValue: TDataSource;
begin
  Result := nil;
  PropValue := nil;
  PropInfo := GetPropInfo(ADataSet.ClassInfo, 'MasterSource');
  if (PropInfo <> nil) then begin
    if PropInfo^.PropType^.Kind = tkClass then
      try
        PropValue := (TObject(GetOrdProp(ADataSet, PropInfo)) as TDataSource);
      except // if PropInfo is not TDataSource or not inherited of
      end;
  end;
  if (PropValue <> nil) then Result := PropValue.DataSet;
end;
}

function TDBSumListProducer.GetMasterDataSet(APropInfo:PPropInfo): TDataSet;
var  PropValue: TDataSource;
begin
  Result := nil;
  PropValue := nil;
  if (APropInfo <> nil) then
  begin
    if APropInfo^.PropType^.Kind = tkClass then
      try
        PropValue := (TObject(GetOrdProp(FDataSet, APropInfo)) as TDataSource);
      except // if PropInfo is not TDataSource or not inherited of
      end;
  end;
  if (PropValue <> nil)
    then Result := PropValue.DataSet;
end;

procedure TDBSumListProducer.ResetMasterInfo;
begin
  //if (AMasterSource = FMasterDataSet) then Exit;
  if Assigned(FMasterDataSet) then
  begin
      FMasterDataSet.AfterScroll := OldMasterAfterScroll;
  end;
  OldMasterAfterScroll := nil;
  FMasterPropInfo := GetPropInfo(FDataSet.ClassInfo, 'MasterSource');
  FMasterDataSet := GetMasterDataSet(FMasterPropInfo);
  if Assigned(FMasterDataSet)
    then OldMasterAfterScroll := FMasterDataSet.AfterScroll;
  if Assigned(FMasterDataSet)
    then FMasterDataSet.AfterScroll := MasterDataSetAfterScroll;
end;

procedure TDBSumListProducer.SetDataSetEvents;
begin
  if Assigned(FDataSet) and (FEventsOverloaded = False) then // Set new events
  begin

    FMasterPropInfo := GetPropInfo(FDataSet.ClassInfo, 'MasterSource');
    FMasterDataSet := GetMasterDataSet(FMasterPropInfo);

    OldAfterEdit := FDataSet.AfterEdit;
    OldAfterInsert := FDataSet.AfterInsert;
    OldAfterOpen := FDataSet.AfterOpen;
    OldAfterPost := FDataSet.AfterPost;
    OldAfterScroll := FDataSet.AfterScroll;
    OldBeforeDelete := FDataSet.BeforeDelete;
    OldAfterClose := FDataSet.AfterClose;
    OldAfterCancel := FDataSet.AfterCancel;
    if Assigned(FMasterDataSet)
      then OldMasterAfterScroll := FMasterDataSet.AfterScroll;

    FDataSet.AfterEdit := DataSetAfterEdit;
    FDataSet.AfterInsert := DataSetAfterInsert;
    FDataSet.AfterOpen := DataSetAfterOpen;
    FDataSet.AfterPost := DataSetAfterPost;
    FDataSet.AfterScroll := DataSetAfterScroll;
    FDataSet.BeforeDelete := DataSetBeforeDelete;
    FDataSet.AfterClose := DataSetAfterClose;
    FDataSet.AfterCancel := DataSetAfterCancel;
    if Assigned(FMasterDataSet)
      then FMasterDataSet.AfterScroll := MasterDataSetAfterScroll;

    FEventsOverloaded := True;

  end;
end;

procedure TDBSumListProducer.ReturnEvents;
var i: Integer;
begin
  if Assigned(FDataSet) and (FEventsOverloaded = True) then
  begin // Return old events
    FDataSet.AfterEdit := OldAfterEdit;
    FDataSet.AfterInsert := OldAfterInsert;
    FDataSet.AfterOpen := OldAfterOpen;
    FDataSet.AfterPost := OldAfterPost;
    FDataSet.AfterScroll := OldAfterScroll;
    FDataSet.BeforeDelete := OldBeforeDelete;
    FDataSet.AfterClose := OldAfterClose;
    FDataSet.AfterCancel := OldAfterCancel;
    if Assigned(FMasterDataSet) then begin
        FMasterDataSet.AfterScroll := OldMasterAfterScroll;
    end;

    OldMasterAfterScroll := nil;
    OldAfterEdit := nil;
    OldAfterInsert := nil;
    OldAfterOpen := nil;
    OldAfterPost := nil;
    OldAfterScroll := nil;
    OldBeforeDelete := nil;
    OldAfterClose := nil;
    OldAfterCancel := nil;

    FMasterPropInfo := nil;
    FMasterDataSet := nil;

    FEventsOverloaded := False;
    for i := 0 to FVirtualRecList.Count-1
      do FDataSet.FreeBookmark(FVirtualRecList[i]);
    FVirtualRecList.Clear;
  end;
end;

procedure TDBSumListProducer.SetDataSet(Value:TDataSet);
var OldActive:Boolean;
begin
  if (FDataSet = Value) then Exit;
  if not (csLoading in FOwner.ComponentState) and
      (FDesignTimeWork or not (csDesigning in FOwner.ComponentState)) then
  begin
    OldActive := Active;
    Deactivate(True);
    FDataSet := Value;
    if OldActive then Activate(True);
  end else
    FDataSet := Value;
end;

procedure TDBSumListProducer.Loaded;
begin
//  inherited;
  if Assigned(FDataSet) and Active then begin
    Activate(True);
  end;
end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品视频一区二区三区| 欧美日韩一区二区三区视频 | 国产精品久久久一区麻豆最新章节| 色噜噜狠狠成人中文综合| 久久成人免费网站| 亚洲精品中文在线影院| 久久久久久麻豆| 欧美日韩和欧美的一区二区| 成人在线综合网站| 麻豆精品国产91久久久久久| 亚洲成人自拍一区| 中文字幕在线一区| 精品国产乱码久久久久久久| 欧美色国产精品| 一本一道波多野结衣一区二区| 国产成人高清在线| 久久成人精品无人区| 天堂va蜜桃一区二区三区 | 精品在线亚洲视频| 天天操天天色综合| 亚洲一区在线看| 亚洲美女偷拍久久| 国产欧美日韩一区二区三区在线观看| 日韩一区二区中文字幕| 51精品久久久久久久蜜臀| 欧美系列在线观看| 色哟哟一区二区三区| 97久久精品人人澡人人爽| 成人h动漫精品| 成人久久视频在线观看| 国产精品一品视频| 国产高清亚洲一区| 国内精品写真在线观看| 国内成人免费视频| 国产九九视频一区二区三区| 国产一区二区三区| 国产高清不卡一区| 高清不卡一区二区| 懂色av中文字幕一区二区三区| 国产精品一区二区不卡| 国产成人精品综合在线观看| 国产一区二区三区av电影| 国产传媒日韩欧美成人| 国产黑丝在线一区二区三区| 国产一区欧美一区| 国产99久久久国产精品| 99久久国产综合精品色伊| 91色在线porny| 欧美日韩一区在线观看| 在线不卡免费av| 日韩视频永久免费| 精品成人在线观看| 日本一区二区视频在线| 亚洲丝袜制服诱惑| 亚洲.国产.中文慕字在线| 日欧美一区二区| 久久99精品久久只有精品| 国产精品系列在线观看| 99国产精品久久| 欧美色综合网站| 日韩欧美中文字幕一区| 久久久久国产免费免费| 最新高清无码专区| 日日夜夜一区二区| 久久99精品久久久久久久久久久久| 国产毛片一区二区| 色综合久久天天| 9191国产精品| 国产日韩欧美亚洲| 亚洲最色的网站| 美女脱光内衣内裤视频久久网站 | 久久精品一区二区三区不卡牛牛| 国产精品久久久久9999吃药| 一区二区三区四区激情| 美女网站一区二区| 91无套直看片红桃| 91精品国产免费| 中文字幕精品在线不卡| 五月开心婷婷久久| 国产成人综合在线| 欧美三级三级三级| 久久精品亚洲一区二区三区浴池| 亚洲欧美电影院| 精品一二三四区| 在线观看网站黄不卡| 精品成人免费观看| 一区二区三区加勒比av| 国产一区二区不卡| 欧美日韩高清一区二区| 欧美国产精品中文字幕| 五月天中文字幕一区二区| 成人晚上爱看视频| 欧美一区三区二区| 亚洲天堂精品在线观看| 国模少妇一区二区三区| 在线观看国产精品网站| 久久欧美一区二区| 日产国产高清一区二区三区| 成人av电影在线网| 久久亚洲一区二区三区四区| 亚洲成人资源网| 97se狠狠狠综合亚洲狠狠| 久久综合国产精品| 石原莉奈在线亚洲二区| 色成年激情久久综合| 国产精品亲子乱子伦xxxx裸| 久久精品国内一区二区三区| 欧美亚洲高清一区二区三区不卡| 国产日本亚洲高清| 韩国中文字幕2020精品| 5566中文字幕一区二区电影| 亚洲伦理在线免费看| 国产成人日日夜夜| 精品乱码亚洲一区二区不卡| 亚洲国产精品久久久久婷婷884| 成人黄色在线看| 国产日本亚洲高清| 国产精品1区二区.| 精品久久99ma| 免费人成网站在线观看欧美高清| 欧美日韩久久一区| 一区二区三区中文字幕电影 | aaa亚洲精品| 国产喷白浆一区二区三区| 久久99精品国产麻豆婷婷| 91精品在线一区二区| 婷婷中文字幕综合| 欧美日韩精品三区| 亚洲国产你懂的| 欧美日韩精品一二三区| 亚洲国产毛片aaaaa无费看| 欧美午夜精品一区| 亚洲在线观看免费| 欧美色图激情小说| 性做久久久久久免费观看欧美| 欧美亚洲综合久久| 亚洲va国产天堂va久久en| 欧美日韩日本视频| 天天影视色香欲综合网老头| 51精品视频一区二区三区| 日韩电影在线观看一区| 日韩欧美三级在线| 九九视频精品免费| 国产欧美日韩不卡| 99r精品视频| 亚洲亚洲精品在线观看| 欧美巨大另类极品videosbest| 三级在线观看一区二区| 精品日韩av一区二区| 国产福利一区二区三区视频| 国产精品免费视频一区| 91蝌蚪porny| 亚洲大片一区二区三区| 欧美成人一区二区三区在线观看| 狠狠色丁香久久婷婷综合_中 | 精品入口麻豆88视频| 久久99国产精品尤物| 国产午夜亚洲精品理论片色戒| 不卡区在线中文字幕| 亚洲一区二区高清| 日韩一区二区三区视频在线| 国精产品一区一区三区mba桃花| 中文字幕精品在线不卡| 欧美在线免费播放| 激情综合色丁香一区二区| 中文字幕欧美区| 欧美少妇一区二区| 久草在线在线精品观看| 国产精品二三区| 欧美疯狂做受xxxx富婆| 国产另类ts人妖一区二区| 成人欧美一区二区三区白人 | 亚洲午夜私人影院| 日韩精品一区二区三区在线观看 | 成人白浆超碰人人人人| 亚洲五月六月丁香激情| 久久综合久久久久88| 色综合天天天天做夜夜夜夜做| 日本中文一区二区三区| 国产午夜亚洲精品羞羞网站| 欧美日韩另类一区| 成人免费视频视频| 日韩高清不卡一区二区三区| 中文字幕一区二区三区四区不卡| 欧美日韩精品久久久| 粉嫩久久99精品久久久久久夜| 性做久久久久久免费观看| 欧美国产亚洲另类动漫| 在线成人高清不卡| www.欧美精品一二区| 六月丁香婷婷色狠狠久久| 亚洲精品一卡二卡| 久久久综合精品| 91 com成人网| 91碰在线视频| 成人午夜又粗又硬又大| 另类成人小视频在线| 亚洲成精国产精品女| 亚洲天堂免费看| 国产精品网曝门|