Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сгенерировать пересчет всех полей, необходимо оптимизировать процедуру 
:(
    Опции темы
Delphist
  Дата 16.9.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



К сожалению, на данный момент я использую компоненты FIBs, это урезанный аналог FIBPlus. Для принудительного пересчета полей я использую процедуру типа:
Код

procedure
  TfmAbstDict.EmulCalcFields(DataSet: TDataSet);
var
  bm: TBookmark;
  PROC_AP: TDataSetNotifyEvent;
begin

  {Эммулируем срабатывания события OnCalcFields}
  if IsDSActiveAndNotEmpty(DataSet) and Assigned(DataSet.OnCalcFields) then
  begin
    PROC_AP := DataSet.AferPost;
    DataSet.AferPost := nil;
    DataSet.DisableControls;
    if DataSet is TFIBDataSet then
      TFIBDataSet(DataSet).DisableScrollEvents;   
    bm := DataSet.GetBookmark;
    try
      DataSet.First;
      while not DataSet.Eof do
        DataSet.Next;
    finally
     if DataSet.BookmarkValid(bm) then
     begin
       DataSet.GotoBookmark(bm);
       DataSet.FreeBookmark(bm);
     end;
     if DataSet is TFIBDataSet then
       TFIBDataSet(DataSet).EnableScrollEvents;
     DataSet.EnableControls;
    end;
  end;
end;

Вопрос - можно ли оптимизировать (ускорить работу) данной процедуры или может есть какой другой способ эмулирвание пересчета всех полей? 


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Frees
Дата 16.9.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Цитата(Delphist @  16.9.2008,  15:42 Найти цитируемый пост)
К сожалению, на данный момент я использую компоненты FIBs, это урезанный аналог FIBPlus

про FIBs не слыхал дай ссылку на их доку поглядать

в FIBPlus
RefreshClientFields выглядит так

Код

procedure TFIBCustomDataSet.RefreshClientFields(ForceCalc:boolean=True);
var 
  b:  TBookMarkStr;
  CurEof:boolean;
begin
   if IsEmpty then
   begin
     First;
     Exit;
   end;

   b:=Bookmark;
   CurEof:=Eof;
   DisableControls;
   DisableScrollEvents;
   if ForceCalc then
    Include(RunState,drsInRefreshClientFields);
   try
    Bookmark:=b;
    if CurEof then
     Next; // Restore Eof Flag only
   finally
    if ForceCalc then
     Exclude(RunState,drsInRefreshClientFields);
    EnableScrollEvents;
    EnableControls
   end;
end;



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Delphist
Дата 16.9.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(Frees @  16.9.2008,  14:47 Найти цитируемый пост)
в FIBPlus
RefreshClientFields выглядит так


FIBPlus у меня есть, я знаю, что эти компоненты хорошие, но пока использовать их в проекте я не могу по ряду причин.
На счет RefreshClientFields я в курсе но впиндюрить его код в FIBс так просто не получиться.
Прикрепляю мои FIBс

Это сообщение отредактировал(а) Delphist - 16.9.2008, 14:24

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  fibc.rar 182,98 Kb


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Frees
Дата 16.9.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Цитата(Delphist @  16.9.2008,  16:08 Найти цитируемый пост)
На счет RefreshClientFields я в курсе но впиндюрить его код в FIBс так просто не получиться.

ну ты же пишеш процедуру  EmulCalcFields(DataSet: TDataSet); вот и сделай ее как у фибов

Код

procedure TfmAbstDict.EmulCalcFields(DataSet: TFIBCustomDataSet; ForceCalc:boolean=True);
var 
  b:  TBookMarkStr;
  CurEof:boolean;
  
begin
with DataSet do begin 
 if IsEmpty then
   begin
     First;
     Exit;
   end;

   b:=Bookmark;
   CurEof:=Eof;
   DisableControls;
   DisableScrollEvents;
   if ForceCalc then
    Include(RunState,drsInRefreshClientFields);
   try
    Bookmark:=b;
    if CurEof then
     Next; // Restore Eof Flag only
   finally
    if ForceCalc then
     Exclude(RunState,drsInRefreshClientFields);
    EnableScrollEvents;
    EnableControls
   end;
 end;
end;



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Delphist
  Дата 16.9.2008, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(Frees @  16.9.2008,  15:14 Найти цитируемый пост)
ну ты же пишеш процедуру  EmulCalcFields(DataSet: TDataSet); вот и сделай ее как у фибов

Я же говорю не так-то легко всунуть этот код т.к. архитектура fibc и fibplus отличается, например, нет RunState и т.д.

Это сообщение отредактировал(а) Delphist - 16.9.2008, 14:28


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0743 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.