控件是我自己写的分页控件,
安装控件的时候出现下面的错误
cannot load package 'dclusr70' it contains unit 'ADODB' which is also contained in package 'adort70'代码如下:unit Pager;interfaceuses
  Windows, Dialogs, SysUtils, Classes, Controls, StdCtrls, Messages, Buttons, ExtCtrls,
  ADODB;type
  TPager = class(TPanel)
  private
    FFlat: Boolean;
    FbtnFirst: TSpeedButton;   //首页
    FbtnPrev:  TSpeedButton;   //上页
    FbtnNext:  TSpeedButton;   //下页
    FbtnLast:  TSpeedButton;   //尾页
    FbtnTurn:  TSpeedButton;   //跳页
    FEditCurPage: TEdit;
    FPageInfo: TPanel;    FTableName:   String; //表名、视图名
  FIdField:     String; //Id字段名
  FFields:      String; //显示字段
  FCondition:   String; //查询条件
  FOrder:       String; //排序
  FPageSize:    Integer;//每页记录数
  FCurrentPage: Integer;//当前页
  FConnection:  TADOConnection;
    FReturnQuery: TADOQuery;    //私有
    FQuerySql: String;
    FTotalCountSql: String;
    { Private declarations }
  protected
    procedure SetFFlat(const Value: Boolean);
    {===============分页属性==============}
    procedure SetFTableName(const Value: String);
    procedure SetFIdField(const Value: String);
    procedure SetFFields(const Value: String);
    procedure SetFCondition(const Value: String);
    procedure SetFOrder(const Value: String);
    procedure SetFPageSize(const Value: Integer);
    procedure SetFCurrentPage(const Value: Integer);
    procedure SetFConnection(const Value: TADOConnection);
    procedure SetFReturnQuery(const Value: TADOQuery);
    {=====================================}
    procedure WMSize(var Msg: TMessage);message WM_SIZE;
    procedure OnEditKeyPress(Sender: TObject; var Key: Char);
    procedure GetQuerySql;
    procedure GetTotalCountSql;
    procedure GetTotalRecordCount;
    procedure GetTotalPage;
    procedure TurnPage(Page:Integer);    {==============按钮事件=============}
    procedure OnFirstPage(Sender: TObject);
    procedure OnPrevPage(Sender: TObject);
    procedure OnNextPage(Sender: TObject);
    procedure OnLastPage(Sender: TObject);
    procedure OnTurnPage(Sender: TObject);
    {===================================}
    { Protected declarations }
  public
    TotalRecordCount: Integer;
    TotalPage: Integer;
    
    constructor Create(AOwner: TComponent);override;
    destructor Destroy;override;
    procedure Init;
    { Public declarations }
  published
    property Flat: Boolean read FFlat write SetFFlat;
    property TableName: String read FTableName write SetFTableName;
    property IdField: String read FIdField write SetFIdField;
    property Fields: String read FFields write SetFFields;
    property Condition: String read FCondition write SetFCondition;
    property Order: String read FOrder write SetFOrder;
    property PageSize: Integer read FPageSize write SetFPageSize;
    property CurrentPage: Integer read FCurrentPage write SetFCurrentPage;
    property Connection: TADOConnection read FConnection write SetFConnection;
    property PageQuery: TADOQuery read FReturnQuery;
    { Published declarations }
  end;procedure Register;implementationprocedure Register;
begin
  RegisterComponents('常规', [TPager]);
end;constructor TPager.Create(AOwner: TComponent);
var
  Padding_Right : Integer;
  Padding_Top   : Integer;
  Ctrls_Padding : Integer; //控件与控件之间的间隔
  Ctrls_Height  : Integer;
  Ctrls_Width   : Integer;
  ChildControlTop: Integer;
begin
  inherited;
  Padding_Right := 3;
  Padding_Top   := 1;
  Ctrls_Padding := 2;
  Ctrls_Height  := 22;
  Ctrls_Width   := 44;
  FFlat := False;
  FbtnFirst := TSpeedButton.Create(Self);   //首页
  FbtnPrev  := TSpeedButton.Create(Self);   //上页
  FbtnNext  := TSpeedButton.Create(Self);   //下页
  FbtnLast  := TSpeedButton.Create(Self);   //尾页
  FbtnTurn  := TSpeedButton.Create(Self);   //跳页
  FEditCurPage := TEdit.Create(Self);
  FPageInfo := TPanel.Create(Self);
  Height := 30;
  Width  := (Ctrls_Width+Ctrls_Padding) * 7;
  ChildControlTop := Round(((Height - Padding_Top*2) - Ctrls_Height)/2);  //跳页按钮
  FbtnTurn .Parent := Self;
  FbtnTurn.Caption:= '转到';
  FbtnTurn.Height := Ctrls_Height;
  FbtnTurn.Width  := Ctrls_Width;
  FbtnTurn.Left   := Width - Padding_Right - FbtnTurn.Width;
  FbtnTurn.Top    := ChildControlTop;
  FbtnTurn.Anchors:= [akTop, akRight];
  FbtnTurn.Flat   := FFlat;
  FbtnTurn.OnClick:= OnTurnPage;  //当前页文本框
  FEditCurPage.Parent := Self;
  FEditCurPage.Height := Ctrls_Height;
  FEditCurPage.Width  := 30;
  FEditCurPage.Left   := FbtnTurn.Left - FEditCurPage.Width - Ctrls_Padding;
  FEditCurPage.Top    := ChildControlTop;
  FEditCurPage.Anchors:= [akTop, akRight];
  FEditCurPage.OnKeyPress := OnEditKeyPress;
  FEditCurPage.Ctl3D  := FFlat;  //尾页按钮
  FbtnLast.Parent := Self;
  FbtnLast.Caption:= '尾页';
  FbtnLast.Height := Ctrls_Height;
  FbtnLast.Width  := Ctrls_Width;
  FbtnLast.Left   := FEditCurPage.Left - Ctrls_Width - Ctrls_Padding;
  FbtnLast.Top    := ChildControlTop;
  FbtnLast.Anchors:= [akTop, akRight];
  FbtnLast.Flat   := FFlat;
  FbtnLast.OnClick:= OnLastPage;  //下页按钮
  FbtnNext.Parent := Self;
  FbtnNext.Caption:= '下页';
  FbtnNext.Height := Ctrls_Height;
  FbtnNext.Width  := Ctrls_Width;
  FbtnNext.Left   := FbtnLast.Left - Ctrls_Width - Ctrls_Padding;
  FbtnNext.Top    := ChildControlTop;
  FbtnNext.Anchors:= [akTop, akRight];
  FbtnNext.Flat   := FFlat;
  FbtnNext.OnClick:= OnNextPage;  //上页按钮
  FbtnPrev.Parent := Self;
  FbtnPrev.Caption:= '上页';
  FbtnPrev.Height := Ctrls_Height;
  FbtnPrev.Width  := Ctrls_Width;
  FbtnPrev.Left   := FbtnNext.Left - Ctrls_Width - Ctrls_Padding;
  FbtnPrev.Top    := ChildControlTop;
  FbtnPrev.Anchors:= [akTop, akRight];
  FbtnPrev.Flat   := FFlat;
  FbtnPrev.OnClick:= OnPrevPage;  //首页按钮
  FbtnFirst.Parent := Self;
  FbtnFirst.Caption:= '首页';
  FbtnFirst.Height := Ctrls_Height;
  FbtnFirst.Width  := Ctrls_Width;
  FbtnFirst.Left   := FbtnPrev.Left - Ctrls_Width - Ctrls_Padding;
  FbtnFirst.Top    := ChildControlTop;
  FbtnFirst.Anchors:= [akTop, akRight];
  FbtnFirst.Flat   := FFlat;
  FbtnFirst.OnClick:= OnFirstPage;  //分页信息
  FPageInfo.Parent := Self;
  FPageInfo.Caption:= '共 5 页';
  FPageInfo.Height := Ctrls_Height;
  FPageInfo.Left   := FbtnFirst.Left - FPageInfo.Width - Ctrls_Padding - 2;
  FPageInfo.Top    := ChildControlTop;
  FPageInfo.Anchors:= [akTop, akRight];
  FPageInfo.BevelOuter := bvNone;
  FPageInfo.Alignment := taRightJustify;  Fields := '*';
  CurrentPage := 1;
  PageSize := 100;
  FReturnQuery := TADOQuery.Create(nil);
end;

解决方案 »

  1.   


    destructor TPager.Destroy;
    begin
      FbtnFirst.Free;
      FbtnPrev.Free;
      FbtnNext.Free;
      FbtnLast.Free;
      FbtnTurn.Free;
      FEditCurPage.Free;
      FPageInfo.Free;
      inherited;
    end;procedure TPager.WMSize(var Msg: TMessage);
    var
      Padding_Right : Integer;
      Padding_Top   : Integer;
      Ctrls_Padding : Integer; //控件与控件之间的间隔
      Ctrls_Height  : Integer;
      Ctrls_Width   : Integer;
      ChildControlTop: Integer;
    begin
      Padding_Right := 3;
      Padding_Top   := 1;
      Ctrls_Padding := 2;
      Ctrls_Height  := 22;
      Ctrls_Width   := 44;
      ChildControlTop := Round(((Height - Padding_Top*2) - Ctrls_Height)/2);
      FbtnTurn.Left   := Width - Padding_Right - FbtnTurn.Width;
      FbtnTurn.Top    := ChildControlTop;
      FEditCurPage.Left   := FbtnTurn.Left - FEditCurPage.Width - Ctrls_Padding;
      FEditCurPage.Top    := ChildControlTop;
      if FFlat then
        FEditCurPage.Height := 25
      else
        FEditCurPage.Height := 22;
      FbtnLast.Left   := FEditCurPage.Left - Ctrls_Width - Ctrls_Padding;
      FbtnLast.Top    := ChildControlTop;
      FbtnNext.Left   := FbtnLast.Left - Ctrls_Width - Ctrls_Padding;
      FbtnNext.Top    := ChildControlTop;
      FbtnPrev.Left   := FbtnNext.Left - Ctrls_Width - Ctrls_Padding;
      FbtnPrev.Top    := ChildControlTop;
      FbtnFirst.Left  := FbtnPrev.Left - Ctrls_Width - Ctrls_Padding;
      FbtnFirst.Top   := ChildControlTop;
      FPageInfo.Width := FbtnFirst.Left - Ctrls_Padding*2 - 2;
      FPageInfo.Left  := FbtnFirst.Left - FPageInfo.Width - Ctrls_Padding - 2;
      FPageInfo.Top   := ChildControlTop + 1;
    end;procedure TPager.SetFFlat(const Value: Boolean);
    begin
      FFlat := Value;
      FbtnTurn.Flat := FFlat;
      FEditCurPage.Ctl3D := not FFlat;
      FbtnLast.Flat := FFlat;
      FbtnNext.Flat := FFlat;
      FbtnPrev.Flat := FFlat;
      FbtnFirst.Flat:= FFlat;
    end;procedure TPager.OnEditKeyPress(Sender: TObject;var Key: Char);
    begin
      if(FEditCurPage.Text = '0') and (key = '0')then
      begin
        key := #0;
        exit;
      end;  if not (key in ['0'..'9',#8,#13,#27]) then
      begin
        key := #0;
        exit;
      end;
    end;{===============分页属性==============}
    procedure TPager.SetFTableName(const Value: String);
    begin
      FTableName := Value;
    end;
    procedure TPager.SetFIdField(const Value: String);
    begin
      FIdField := Value;
    end;
    procedure TPager.SetFFields(const Value: String);
    begin
      FFields := Value;
    end;
    procedure TPager.SetFCondition(const Value: String);
    begin
      FCondition := Value;
    end;
    procedure TPager.SetFOrder(const Value: String);
    begin
      FOrder := Value;
    end;
    procedure TPager.SetFPageSize(const Value: Integer);
    begin
      FPageSize := Value;
    end;
    procedure TPager.SetFCurrentPage(const Value: Integer);
    begin
      FCurrentPage := Value;
    end;
    procedure TPager.SetFConnection(const Value: TADOConnection);
    begin
      FConnection := Value;
    end;
    procedure TPager.SetFReturnQuery(const Value: TADOQuery);
    begin
      FReturnQuery := Value;
    end;
    {=====================================}procedure TPager.GetQuerySql;
    var
      PrvCount: Integer;
    begin
      PrvCount := FPageSize * (FCurrentPage - 1);
      if PrvCount = 0 then
      begin
        FQuerySql := 'SELECT TOP ' + IntToStr(FPageSize) + ' ' + FFields + ' FROM '
        + FTableName + ' WHERE (' + FCondition + ') ORDER BY ' + FOrder
      end
      else
      begin
        FQuerySql := 'SELECT TOP ' + IntToStr(FPageSize) + ' ' + FFields + ' FROM '
        + FTableName + ' WHERE (' + FCondition + ') AND ' + FIdField + ' NOT IN ('
        + 'SELECT TOP ' + IntToStr(PrvCount) + ' ' + FIdField + ' FROM ' + FTableName + ' '
        + 'WHERE ' + FCondition + ' ORDER BY ' + FOrder + ') ORDER BY ' + FOrder;
      end;
    end;procedure TPager.GetTotalCountSql;
    begin
      FTotalCountSql := 'SELECT COUNT(' + FIdField + ') AS Counter FROM ' + FTableName
      + ' WHERE ' + FCondition;
    end;procedure TPager.GetTotalRecordCount;
    var
      TempQuery: TADOQuery;
    begin
      TotalRecordCount := 0;
      GetTotalCountSql;
      TempQuery := TADOQuery.Create(nil);
      try
        TempQuery.Connection := FConnection;
        TempQuery.SQL.Clear;
        TempQuery.SQL.Add(FTotalCountSql);
        TempQuery.Open;
        TotalRecordCount := TempQuery.FieldByName('Counter').AsInteger;
      finally
        TempQuery.Close;
        TempQuery.Free;
      end;
    end;procedure TPager.GetTotalPage;
    begin
      GetTotalRecordCount;
      if TotalRecordCount <> 0 then
      begin
        if TotalRecordCount mod FPageSize = 0 then
          TotalPage := Trunc(TotalRecordCount / FPageSize)
        else
          TotalPage := Trunc(TotalRecordCount / FPageSize) + 1;
      end
      else
        TotalPage := 0;
    end;procedure TPager.TurnPage(Page:Integer);
    begin
      GetTotalPage;
      GetQuerySql;
      if Page > TotalPage then Page := TotalPage;
      if Page < 1 then Page := 1;
      FCurrentPage := Page;
      FReturnQuery.Connection := FConnection;
      FReturnQuery.SQL.Clear;
      FReturnQuery.SQL.Add(FQuerySql);
      FReturnQuery.Open;
      FPageInfo.Caption := '第 ' + IntToStr(FCurrentPage) + '/' + IntToStr(TotalPage) + ' 页';
      FEditCurPage.Text := IntToStr(FCurrentPage);
    end;{==============按钮事件=============}
    procedure TPager.OnFirstPage(Sender: TObject);
    begin
      FCurrentPage := 1;
      TurnPage(FCurrentPage);
    end;
    procedure TPager.OnPrevPage(Sender: TObject);
    begin
      if FCurrentPage - 1 < 1 then
        FCurrentPage := 1
      else
        FCurrentPage := FCurrentPage - 1;
      TurnPage(FCurrentPage);
    end;
    procedure TPager.OnNextPage(Sender: TObject);
    begin
      GetTotalPage;
      if FCurrentPage + 1 > TotalPage then
        FCurrentPage := TotalPage
      else
        FCurrentPage := FCurrentPage + 1;
      TurnPage(FCurrentPage);
    end;
    procedure TPager.OnLastPage(Sender: TObject);
    begin
      GetTotalPage;
      TurnPage(TotalPage);
    end;
    procedure TPager.OnTurnPage(Sender: TObject);
    var
      teCurPage: Integer;
      ErrorMessage: String;
    begin
      GetTotalPage;
      teCurPage := 1;
      try
        teCurPage := StrToInt(FEditCurPage.Text);
      except
        MessageDlg('无效的页码', mtError, [mbOK],0);
        exit;
      end;
      ErrorMessage := '页码只能在1-' + IntToStr(TotalPage) + '之间';
      if (teCurPage > TotalPage) or (teCurPage < 1) then
      begin
        MessageDlg(ErrorMessage, mtError, [mbOK],0);
        exit;
      end;
      TurnPage(teCurPage);
    end;
    {===================================}procedure TPager.Init;
    begin
      TurnPage(1);
    end;end.
      

  2.   

    cannot   load   package   'dclusr70'   it   contains   unit   'ADODB'   which   is   also   contained   in   package   'adort70' 
    错误信息:不能加载'dclusr70’包,因为它所包含的‘ADODB’单元已经在'adort70' 包中加载了。解决方法:打开adort70.bpl,删除其中的'ADODB'单元,然后加载'dclusr70' .