Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить измемнение набора записей? ADOQuery,DBGridEh 
V
    Опции темы
Lunatikus
Дата 24.7.2009, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

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



Здравствуйте.  Помогите, пожалуйста.
Пытался сделать это через:
Код

ADOQuery.Open;
DataSetOld:=DBGridEh.DataSource.DataSet;

//и в функции ADOQuery.AfterOpen проверяю равны ли новый и старый датасеты
If DataSetOld<>DataSet Then...


Однако, они всегда не равны, даже если набор данных в источнике(база MS SQL 2005) не изменился.
Каким способом можно поймать момент изменения данных(да хотя бы не в самом источнике, а в DBGridEh)?Среди событий грида подходящих не увидел.
Через сохранение записей в массив и сравнение массивов знаю как, но хотелось бы более простой и удобный способ.

Это сообщение отредактировал(а) Lunatikus - 24.7.2009, 08:25


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Romikgy
Дата 24.7.2009, 11:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 4
Всего: 146



все классы в дельфи это указатели !
Цитата(Lunatikus @  24.7.2009,  07:24 Найти цитируемый пост)
DataSetOld<>DataSet 

это сравнение указателей т.к. у тя два разных датасета тогда и указатели разные .....
если надо сравнить датасеты имхо их надо сравнивать пробегая по ним и сверяя друг с другом ,
или как то исхитрится это организовать через запрос ,
а вообще не понятна сама цель зачем сравнивать датасеты?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Lunatikus
Дата 24.7.2009, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

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



черт,действительно, указатели. совсем я с 1С заработался.

Датасеты, потому что это первое, что пришло в голову для сравнения данных до и после обновления.Потому и спрашиваю, что тогда еще сравнивать, если не датасеты?
Пока организовал сохранение полученных через ADOquery данных в массив. После обновления новые данные в новый массив и сравниваю эти два массива. Но если будет более простой вариант - будет хорошо.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Romikgy
Дата 24.7.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 4
Всего: 146



а кто делает обновления? и еще раз повторюсь зачем сравнивать ?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Lunatikus
Дата 24.7.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

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



ADoquery.Open
обновляет он.

Сравнивать, чтобы при изменении данных выдавать звуковой сигнал, например.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
former
Дата 24.7.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


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

Репутация: 7
Всего: 17



Цитата(Lunatikus @  24.7.2009,  12:27 Найти цитируемый пост)
Сравнивать, чтобы при изменении данных выдавать звуковой сигнал, например. 

ИХМО: не рационально, особенно при большом числе записей.
Как вариант:
- добавить в таблицу поле типа integer bigint (версия записи). 
- сделать его автоинкрементным
- сравнивать версии записей при открытии + проверять наличие новых записей.




--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Lunatikus
Дата 24.7.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

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



я могу только считывать данные.изменять таблицу мне не по правам.

а набор записей будет очень небольшим: строк 20-40


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Romikgy
Дата 24.7.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 4
Всего: 146



тогда запоминай при последнем обращении значение поля у которого автоинкримент и при повторном обращении сравнивай максимальный ид с тем что в памяти , если не одинаковые тогда есть изменения ,
(это если изменения типа инсерт )
а вот с изменениями типа апдейт имхо сложнее , было бы проще добавить какое то поле типа дата+время , и что бы оно автоматом добавлялось к каждой записи при изменении , ну что  то типа тригера прицепить .... и потом по времени отслеживать любые изменения....


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Lunatikus
Дата 24.7.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

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



да
но только изменения важно отследить именно апдейтные, а не инсертные)

в общем, я пока так и осталю. Благо,записей немного и их считывание/сравнение почти не заметно глазу.

спасибо за поддержку


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Romikgy
Дата 24.7.2009, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 4
Всего: 146



Цитата(Lunatikus @  24.7.2009,  14:42 Найти цитируемый пост)
отследить именно апдейтные

а бд заведуешь ты ? тогда тригеры добавь ))


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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


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

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