CSDN博客

img qiubolecn

接口小用

发表于2004/12/29 22:29:00  635人阅读

很多人总是问我,接口怎么用,什么时候用它。猛地被他们一问,只能讲讲以前的应用,发现都不是非常容易理解,今天发现有一个实例,还是非常好讲解的。

我们有一个对数据进行快速下载的函数。
procedure TDataSwitch.DownTable(ASQLStr, ATableName: string);
var
  tmpDataSet: TDataSet;
  tmpDestDataSet: TDataSet;
begin
    SystemSetup.ServerAccess.OpenSQL(ASQLStr, tmpDataSet);
    SystemSetup.ClientAccess.OpenSQL('select * from ' + ATableName + '_temp', tmpDestDataSet);
    try
      .....
      while not tmpDataSet.Eof do
      begin
        NewRecordToTable(tmpDataSet, tmpDestDataSet);
        tmpDataSet.Next;
      end;    // while
    finally
      tmpDataSet.Free;
      tmpDestDataSet.Free;
    end; 
end
//我们想在外部能够知道执行快速发布的进度。一般情况下怎么办呢?
//要么传递一个委托方法进来,要么从这内部发消息到外部去等等。这些办法用起来还真麻烦,而且写代码后让人看着还真是不舒服。我们提供一个Iprocess接口就好了。
  IProcess = Interface
    procedure ProcessChange(AMax, APos: Integer);
  end;

更改代码为
procedure TDataSwitch.DownTable(ASQLStr, ATableName: string; AProcess: IProcess);
var
  tmpDataSet: TDataSet;
  tmpDestDataSet: TDataSet;
begin
    SystemSetup.ServerAccess.OpenSQL(ASQLStr, tmpDataSet);
    SystemSetup.ClientAccess.OpenSQL('select * from ' + ATableName + '_temp', tmpDestDataSet);
    try
      .....
      while not tmpDataSet.Eof do
      begin
        NewRecordToTable(tmpDataSet, tmpDestDataSet);
//新加入的
        if AProcess <> nil then
          AProcess.ProcessChange(tmpDataSet.RecordCount, tmpDataSet.RecNo);

        tmpDataSet.Next;
      end;    // while
    finally
      tmpDataSet.Free;
      tmpDestDataSet.Free;
    end; 
end;
//谁想知道进度,只要实现IProcess接口就好了,我们还可以让窗体来实现。
  TFrm_DataSwtich = class(TForm, IProcess)
   ...
    private
    { Private declarations }
    procedure ProcessChange(AMax, APos: Integer);
   end

procedure TFrm_DataSwtich.ProcessChange(AMax, APos: Integer);
begin
  ProgressBar1.Max := AMax;
  ProgressBar1.Position := APos;
  ProgressBar1.Invalidate;
end;

调用就简单了。
...
DataSwitch.DownTable(ASQLStr, ATableName, self);
...

0 0

相关博文

我的热门文章

img
取 消
img即使是一小步
也想与你分享
打开
img