Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновить в гриде только изменённые записи, мечты сбываются 
:(
    Опции темы
Akella
Дата 7.12.2010, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Недавно выпустили новую версию компонентов FibPlus  - FibPlus 7. 

Прочитал там одну замечательную новость:

Цитата

15. Добавлен новый компонент pFIBTableChangeReader. Компонент позволяет получить информацию об изменениях данных для указанной таблицы. В сочетании с методом TpFIBDataSet.RefreshFromDataSet компонент может использоваться для интеллектуального обновления данных в открытых датасетах. 

 smile 

Раньше, чтобы обновить данные в гриде, нужно было полностью переоткрыть набор данных.
На сколько я понял, то в фибах седьмой версии для этого не нужно будет полностью переоткрывать запрос.  smile  smile  smile 
PM MAIL   Вверх
Данкинг
Дата 7.12.2010, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



smile  smile  smile 
Akella,  я как название топика прочитал, подумал, что ты спрашиваешь, как это сделать. Зачем же так пугать. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
superVad
Дата 7.12.2010, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



Akella, а как оно работает? по времени изменения записи как то ориентируется?
PM MAIL   Вверх
Akella
Дата 7.12.2010, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Я без понятия. Скачайте и посмотрите примеры, справку почитайте.
Я утром заказал себе 7ю версию, но у фибов сейчас на столько медленная техподдержка... что ужас просто.

Добавлено через 47 секунд
Цитата(superVad @  7.12.2010,  19:53 Найти цитируемый пост)
Akella, а как оно работает? по времени изменения записи как то ориентируется? 


Цитата(Akella @  7.12.2010,  14:47 Найти цитируемый пост)
В сочетании с методом TpFIBDataSet.RefreshFromDataSet


сам вызывай этот метод хоть по времени хоть по событию ;)
PM MAIL   Вверх
superVad
Дата 8.12.2010, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



Имелось ввиду - откуда RefreshFromDataSet знает какие записи изменились и их надо обновить.
PM MAIL   Вверх
Akella
Дата 8.12.2010, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(superVad @  8.12.2010,  10:37 Найти цитируемый пост)
 откуда RefreshFromDataSet знает какие записи изменились и их надо обновить. 


читай первое сообщение:
Добавлен новый компонент pFIBTableChangeReader. Компонент позволяет получить информацию об изменениях данных для указанной таблицы.
PM MAIL   Вверх
Deniz
Дата 8.12.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(Akella @  8.12.2010,  14:00 Найти цитируемый пост)
Добавлен новый компонент pFIBTableChangeReader. Компонент позволяет получить информацию об изменениях данных для указанной таблицы.
Есть только 2 способа узнать, что данные изменились.
1. Сравнить текущие значения на клиенте со значениями на сервере.
2. Дополнительный признак в БД, который идентифицирует изменения. Это может быть поле/поля в таблице или какие-то другие признаки.
По первому все понятно, а вот по второму есть несколько мыслей, но ... будет время/желание посмотрю исходники


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Akella
Дата 8.12.2010, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Deniz @  8.12.2010,  12:42 Найти цитируемый пост)
1. Сравнить текущие значения на клиенте со значениями на сервере.

Ну а чем плох этот вариант? 
PM MAIL   Вверх
superVad
Дата 8.12.2010, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



Цитата(Akella @  8.12.2010,  13:54 Найти цитируемый пост)
Ну а чем плох этот вариант? 

Да собственно, чем этот вариант лучше переоткрытия датасета. Что бы сравнить надо вытащить все данные сюда, или затащить туда...

Разве, что не фетчить записи лишний раз. Сомнительное преимущество.

Это сообщение отредактировал(а) superVad - 8.12.2010, 18:11
PM MAIL   Вверх
Deniz
Дата 9.12.2010, 06:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(Akella @  8.12.2010,  15:54 Найти цитируемый пост)
Ну а чем плох этот вариант?
а я и не говорил что он плох.
Просто для меня вариант с переоткрытием датасета более предпочтительный.
Если примерно представить кол-во действий по первому варианту, то выигрыш весьма сомнителен (если не таскать на клиента млн записей по очень тонкому каналу)


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Vas
Дата 9.12.2010, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Мне кажется этот компонент просто хранит id всех измененных записей, а потом только их и обновляет с сервера.
+ будет огромный, даже если показывается пользователю 25 записей, а он обновил только 2. Во-первых, не тянуть все 25, а это уже выигрыш. Во вторых, по уникальному ключу выборка быстрее происходит, чем по условиям разным. 

PS А как это разработчики фибов реализовали хз.


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Akella
Дата 9.12.2010, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(superVad @  8.12.2010,  18:10 Найти цитируемый пост)
Да собственно, чем этот вариант лучше переоткрытия датасета.

а если в наборе данных 15 тыщ записей, а изменилось только5?
PM MAIL   Вверх
Deniz
Дата 9.12.2010, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(Vas @  9.12.2010,  12:13 Найти цитируемый пост)
+ будет огромный, даже если показывается пользователю 25 записей, а он обновил только 2.
Цитата(Akella @  9.12.2010,  16:24 Найти цитируемый пост)
если в наборе данных 15 тыщ записей, а изменилось только5?
А как вы узнаете что изменились только 2 или 5 записей? Или имеется ввиду изменения только локальные?
Давайте например так:
Таблица ID name type
1 Name1 0
2 Name2 0
3 Name3 1
В программе сделали изменение 
Код
update tbl set type = 1 where id = 1

Сколько записей изменилось на сервере?
А если в другой программе в тоже время сделали 
Код
update tbl set type = 3 where id = 2

А теперь сколько записей изменилось?
Чтобы это узнать нужно ... я уже говорил про это немного выше.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
superVad
Дата 9.12.2010, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



Цитата(Akella @  9.12.2010,  14:24 Найти цитируемый пост)
а если в наборе данных 15 тыщ записей, а изменилось только5?


Ты шутишь? Тебе уже несколько человек написало - что бы сравнить записи надо вытащить их все сначала. Где же тут экономия...

Это сообщение отредактировал(а) superVad - 9.12.2010, 16:46
PM MAIL   Вверх
Vas
Дата 9.12.2010, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Deniz, с одной стороны ты прав, с другой стороны компонент  как они пишут интеллектуально обновляет данные, не факт что обновит все, а то может просто обновит строку которую сам пользователь изменил, чтобы например в гриде она по путю отображалась, а хочешь посмотреть изменения произведенные другими пользователями, переоткрывай датасет.
Цитата(Akella @  7.12.2010,  14:47 Найти цитируемый пост)
15. Добавлен новый компонент pFIBTableChangeReader. Компонент позволяет получить информацию об изменениях данных для указанной таблицы. В сочетании с методом TpFIBDataSet.RefreshFromDataSet компонент может использоваться для интеллектуального обновления данных в открытых датасетах. 

С другой стороны под вопросом умеет ли он работать с составными запросами. И может он интеллектуально использует события БД и на их основании обновляет записи.


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0587 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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