Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.03.2024, 18:07
syuriy syuriy вне форума
Прохожий
 
Регистрация: 18.03.2024
Сообщения: 4
Версия Delphi: RAD 11
Репутация: 10
По умолчанию Firedac vs DOA

TOracleDataSet при изменении текста запроса держит открытым пред. датасет и позволяет выполнить refresh() не обрывая грид.
TFDQuery (FireDac) сразу закрывает датасет, обновить данные можно только методом Open()
Как настроить TFDQuery. чтобы он не закрывал запрос и позволял выполнить refresh() ?
Ответить с цитированием
  #2  
Старый 18.03.2024, 18:42
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, это внутренняя кухня компонента. Не уверен, что можно это поведение изменить. С другой стороны, можно заблокировать сообщения об обновлении DataSet, сделать свои мзменения, переоткрыть DataSet и потом обратно разрещить сообщения. Тогда это будет выглядеть для пользователя точно так, как ты описал, т.е. грид не будет пропадать. Только часики не забывай "вешать" на всякий случай:
Код:
  FDQuery1.DisableControls;
  Screen.Cursor := crHourGlass;
  FDQuery1.Close;
  Try
    FDQuery1.SQL.Text := 'select new_fields from here';
    FDQuery1.Open;
  Finally
    Screen.Cursor := crDefault;
    FDQuery1.EnableControls;
  End;
Ответить с цитированием
  #3  
Старый 20.03.2024, 12:34
syuriy syuriy вне форума
Прохожий
 
Регистрация: 18.03.2024
Сообщения: 4
Версия Delphi: RAD 11
Репутация: 10
По умолчанию

Огромное спасибо за отклик.
Попробую.
У меня была подобная мысль но я не сообразил как это сделать(пришлось тупо переинициализировать грид).

Желаемая цель - разобраться с TFDQuery. (может всё есть)
Ответить с цитированием
  #4  
Старый 21.03.2024, 23:01
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, если ты так кардинально меняешь запрос (меняешь список полей) и у тебя идет динамическая настройка грида, то его все-равно надо переинициализировать. Тут уж все зависит от твоего кода. Если список полей не меняется, то сам грид трогать вообще смысла нет (например, ты только достраиваешь динамически фильтрацию в запросе).

Кстати, а посмотри код Refresh в DOA. Есть подозрение, что он именно то, что я предложил и делает, т.к. по сути с точки зрения клиент-сервер только так и делается. Т.е. все равно просто исполняется новый запрос.
Ответить с цитированием
  #5  
Старый 28.03.2024, 10:47
syuriy syuriy вне форума
Прохожий
 
Регистрация: 18.03.2024
Сообщения: 4
Версия Delphi: RAD 11
Репутация: 10
По умолчанию ПРоверил

Увы - грид не обманешь, что то ещё надо.

Запрос не меняет поля, только фильтр.
Ответить с цитированием
  #6  
Старый 28.03.2024, 10:53
syuriy syuriy вне форума
Прохожий
 
Регистрация: 18.03.2024
Сообщения: 4
Версия Delphi: RAD 11
Репутация: 10
По умолчанию гриду сказать , чтоб он не слушал?

А как-то можно гриду сказать , чтоб он не слушал?
Ответить с цитированием
  #7  
Старый 28.03.2024, 19:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну вот это же - FDQuery1.DisableControls;
Тут скорее не то, что бы грид "не слушал", а что бы сам источник данных не сообщал об изменениях.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:33.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter