-
А что, если вообще визуально не отображать DBGrid (Visible:= False), до "отработки" запроса?
-
Господа, я знаю, как работает Eof, я его попробовал, увидел, что не подходит, ищу другой подходящий вариант для моих целей. Набор - TIBQuery.
-
totalCount = select count(*) from table1 fetchedCount = grid.rows.count if (fetchedCount = totalCount) then showmessage('Выбрано все, я гарантирую это')
-
> showmessage('Выбрано все, я гарантирую это') вот и зря... сразу после запроса на количество, могут запись вставить. если конечно не монопольно работаешь. + grid.rows.count это то что я думаю? грид, не дата/рекордсет. тогда каунт вернет только видимое количество записей, например 20 хотя в рекордсете уже 200 например. dbгрид это не стринггрид.
-
> [23] sniknik © (16.05.15 21:05)
ну это псевдокод. идея-то, я думаю, понятна
-
> ложная задача поверь.
+1 А при больших объемах еще и вредная. Нельзя давать пользователю то что он хочет, нужно только необходимое
-
Сделал так, работает, похоже, как нужно:
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;
Всем спасибо, комментарии к коду приветствуются.
-
хотфикс :)
property AllFetched: boolean Read FAllFetched;
-
Еще немного, не всегда срабатывало:
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;
|