我设置数据查询进度时出现问题只能其中一个数据库查询才出现进度,其他的数据库都不出现,是不是数据库本身的问题呢??!~~

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls, DBCtrls, ComCtrls,
      TFlatProgressBarUnit;type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        Button1: TButton;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        Label1: TLabel;
        Label2: TLabel;
        FlatProgressBar1: TFlatProgressBar;
        procedure Button1Click(Sender: TObject);
        procedure ADOQuery1FetchProgress(DataSet: TCustomADODataSet; Progress,
          MaxProgress: Integer; var EventStatus: TEventStatus);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('select * from MainTable');
      ADOQuery1.Open;
    end;procedure TForm1.ADOQuery1FetchProgress(DataSet: TCustomADODataSet;
      Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
    begin
      FlatProgressBar1.Position := Progress*100 div maxProgress;
      label1.Caption := IntToStr(Progress);
      label2.Caption := IntToStr(maxProgress);
      Application.ProcessMessages;
    end;end.
      

  2.   

    ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('select * from MainTable');
      ADOQuery1.Open;我就换了一个数据库,马上就不行啦但是换过来他就好啦!~~奇怪
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Db, DBTables, Grids, DBGrids, StdCtrls;type
      TForm1 = class(TForm)
        Session1: TSession;         { 属性SessionName填写为S1                 }
        Database1: TDatabase;       { 属性SessionName选择为S1                 }
        Query1: TQuery;{ 属性Database选择为Database1;属性SessionName选择为S1 }
        DataSource1: TDataSource;   { 属性DataSet设置为空                     }
        DBGrid1: TDBGrid;           { 属性DataSource选择为DataSource1         }
        Session2: TSession;         { 属性SessionName填写为S2                 }
        Database2: TDatabase;       { 属性SessionName选择为S2                 }
        Query2: TQuery;{ 属性Database选择为Database2;属性SessionName选择为S2 }
        DataSource2: TDataSource;   { 属性DataSet设置为空                     }
        DBGrid2: TDBGrid;           { 属性DataSource选择为DataSource2         }
        BtnGoPause: TButton;        { 用于执行和挂起线程                      }
        procedure FormCreate(Sender: TObject);      { 创建窗体时创建线程对象  }
        procedure FormDestroy(Sender: TObject);     { 销毁窗体时销毁线程对象  }
        procedure BtnGoPauseClick(Sender: TObject); { 执行线程和挂起线程      }
      private
      public
      end;  TThreadQuery = class(TThread) { 声明线程类 }
      private
        FQuery: TQuery;             { 线程中的查询组件                     }
        FDataSource: TDataSource;   { 与查询组件相关的数据感知组件         }
        procedure ConnectDataSource;{ 连接数据查询组件和数据感知组件的方法 }
      protected
        procedure Execute; override;{ 执行线程的方法                       }
      public
        constructor Create(Query: TQuery;
                           DataSource: TDataSource); virtual; { 线程构造器 }
      end;var
      Form1: TForm1;
      Q1,                   { 线程查询对象1 }
      Q2: TThreadQuery;     { 线程查询对象2 }implementation{$R *.DFM}{ TThreadQuery类的实现 }{ 连接数据查询组件和数据感知组件}
    procedure TThreadQuery.ConnectDataSource;
    begin
      FDataSource.DataSet := FQuery;{ 该方法在查询结束后才调用 }
    end;procedure TThreadQuery.Execute;{ 执行线程的方法 }
    begin
      try
        FQuery.Open;                   { 打开查询 }
        Synchronize(ConnectDataSource);{ 线程同步 }
      except
        ShowMessage('Query Error');    { 线程异常 }
      end;
    end;{ 线程查询类的构造器 }
    constructor TThreadQuery.Create(Query: TQuery; DataSource: TDataSource);
    begin
      FQuery := Query;
      FDataSource := DataSource;
      inherited Create(True);
      FreeOnTerminate := False;
    end;{ 创建窗体时创建线程查询对象 }
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Q1 := TThreadQuery.Create(Query1, DataSource1);
      Q2 := TThreadQuery.Create(Query2, DataSource2);
    end;{ 销毁窗体时销毁线程查询对象 }
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Q1.Terminate; { 销毁之前终止线程执行 }
      Q1.Destroy;
      Q2.Terminate; { 销毁之前终止线程执行 }
      Q2.Destroy;
    end;{ 开始线程、继续执行线程、挂起线程 }
    procedure TForm1.BtnGoPauseClick(Sender: TObject);
    begin
      if Q1.Suspended then Q1.Resume else Q1.Suspend;
      if Q2.Suspended then Q2.Resume else Q2.Suspend;
    end;end.这个对你有帮助的! 试试 用多线程
    将 procedure ADOQuery1FetchProgress(DataSet: TCustomADODataSet;
      Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
    共享  (sender as TADOQuery)来代替执行
      

  4.   

    ADOQuery1.ADOQuery1FetchProgress=ADOQuery1FetchProgress
      

  5.   

    没有 这是以前写的 自己用来 同步查询的如果按照你刚才说的 用不同的数据库 有些可以有些不可以好象就应该不是 这个问题了一般来说 创建一个PROJECT 运行他 VCL就会创建了一条主线程
    在这个PROJECT 中如果有那些处理过程 还在处理的时候
    系统对其他的处理只能挂起
      

  6.   

    数据库都是一样,都是mdb数据库呀!~~~~~~~~