控件是我自己写的分页控件,
安装控件的时候出现下面的错误
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;
安装控件的时候出现下面的错误
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;
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.
错误信息:不能加载'dclusr70’包,因为它所包含的‘ADODB’单元已经在'adort70' 包中加载了。解决方法:打开adort70.bpl,删除其中的'ADODB'单元,然后加载'dclusr70' .