Конференция "Базы" » Как узнать - выбрался ли весь набор?
 
  • TDBGrid (16.05.15 12:31) [20]
    А что, если вообще визуально не отображать DBGrid (Visible:= False), до "отработки" запроса?
  • Дмитрий Белькевич © (16.05.15 14:19) [21]
    Господа, я знаю, как работает Eof, я его попробовал, увидел, что не подходит, ищу другой подходящий вариант для моих целей. Набор - TIBQuery.
  • junglecat © (16.05.15 16:03) [22]
    totalCount = select count(*) from table1
    fetchedCount = grid.rows.count
    if (fetchedCount = totalCount) then
     showmessage('Выбрано все, я гарантирую это')
  • sniknik © (16.05.15 21:05) [23]
    > showmessage('Выбрано все, я гарантирую это')
    вот и зря... сразу после запроса на количество, могут запись вставить. если конечно не монопольно работаешь.
    +
    grid.rows.count
    это то что я думаю? грид, не дата/рекордсет. тогда каунт вернет только видимое количество записей, например 20 хотя в рекордсете уже 200 например. dbгрид  это не стринггрид.
  • junglecat © (16.05.15 21:21) [24]
    > [23] sniknik ©   (16.05.15 21:05)

    ну это псевдокод. идея-то, я думаю, понятна
  • Денис Комаров © (17.05.15 21:51) [25]

    > ложная задача поверь.

    +1
    А при больших объемах еще и вредная.
    Нельзя давать пользователю то что он хочет, нужно только необходимое
  • Дмитрий Белькевич © (19.05.15 11:17) [26]
    Сделал так, работает, похоже, как нужно:


    type
    TMakhIBQuery = class(TIBQuery)
    private
     FAllFetched: boolean;
    protected
     function GetRecord(Buffer: TRecordBuffer; GetMode: TGetMode; DoCheck: boolean): TGetResult;
      override;
     procedure InternalOpen; override;
    public
     property AllFetched: boolean Read FAllFetched Write FAllFetched;
    end;

    function TMakhIBQuery.GetRecord(Buffer: TRecordBuffer; GetMode: TGetMode; DoCheck: boolean): TGetResult;
    begin
    Result := inherited;
    if Result = grEOF then
     FAllFetched := True;
    end;

    procedure TMakhIBQuery.InternalOpen;
    begin
    inherited;
    FAllFetched := False;
    end;



    Всем спасибо, комментарии к коду приветствуются.
  • Дмитрий Белькевич © (19.05.15 11:19) [27]
    хотфикс :)


     property AllFetched: boolean Read FAllFetched;
  • Дмитрий Белькевич © (08.06.15 11:44) [28]
    Еще немного, не всегда срабатывало:


    type
    TMakhIBQuery = class(TIBQuery)
    private
     FAllFetched: boolean;
    protected
     function GetRecord(Buffer: TRecordBuffer; GetMode: TGetMode; DoCheck: boolean): TGetResult;
      override;
     procedure InternalOpen; override;
     procedure InternalLast; override;
    public
     property AllFetched: boolean Read FAllFetched;
    end;

    { TMakhIBQuery }

    function TMakhIBQuery.GetRecord(Buffer: TRecordBuffer; GetMode: TGetMode; DoCheck: boolean): TGetResult;
    begin
    Result := inherited;
    if Result = grEOF then
     FAllFetched := True;
    end;

    procedure TMakhIBQuery.InternalLast;
    begin
    inherited;
    FAllFetched := True;
    end;

    procedure TMakhIBQuery.InternalOpen;
    begin
    inherited;
    FAllFetched := False;
    end;

 
Конференция "Базы" » Как узнать - выбрался ли весь набор?
Есть новые Нет новых   [118656   +19][b:0][p:0]