Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2010, 13:33   #1
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию Обновились ли данные в DataSet

здравствуйте, вобщем такая проблема у меня возникла. Пишу на Delphi, на форме есть DBGrid и DataSource связанные между собой, создаю динамически Query, прописываю запрос, присваиваю DataSource1.DataSet := FQuery; DBGrid естественно все нормально отображает с этим проблем нет, только вот запрос у меня стоит на таймере и перед тем как присвоить DataSource1.DataSet := FQuery; хотелось бы проверить есть ли изменения, и если есть перерисовать DBGrid.
Если такое возможно хотелось бы услышать ваши мнения.
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 27.10.2010, 14:04   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
проверить есть ли изменения
Наверно, без запроса никак не проверишь. Может стоит делать
DataSource1.DataSet := FQuery; еще до запроса? Тогда DBGrid сам будет перерисовываться.

И у меня аналогичный вопрос (знаю, что одна тема - один вопрос, но ответ здесь будет один).
Например, работаем в одной базе я и другой клиент. Оба видим данные одной и той же таблицы в DBGrid-ах. Клиент сделал изменение в одной из ячеек. (Я об этом получил сообщение по UDP протоколу.). Делаю банальные Close > Open. Таблица обновилась.
Вопрос: как узнать в какой ячейке клиент сделал изменение?
Как я понимаю, надо куда-то запомнить старый DataSet и сравнить его с обновленным... Может есть другой способ?
_SERGEYX_ вне форума Ответить с цитированием
Старый 27.10.2010, 14:59   #3
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

вобщем решил проблему так (база данных PostgreSql) по сути мне нужно проверять прихождениие в таблицу записи или удаление из нее, т.к. при добавлении записи инкрементируется id, то можно проверять последнюю запись и если id не изменилось значит не перерисовывать DBGrid, а также проверять не изменилось ли количество записей в таблице, и если изменилось, то перерисовать DBGrid. Знаю способ не универсальный, но что ж тут поделаешь.
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 27.10.2010, 15:23   #4
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
инкрементируется id, то можно проверять последнюю запись и если id не изменилось значит не перерисовывать DBGrid
Этот способ прокатит
Цитата:
проверять не изменилось ли количество записей в таблице
А этот не прокатит. Если одну запись удалили и одну добавили?

Впрочем, два способа вместе дадут искомое.

Но это все при добавлении - удалении. А при редактировании?

Последний раз редактировалось _SERGEYX_; 27.10.2010 в 15:26.
_SERGEYX_ вне форума Ответить с цитированием
Старый 27.10.2010, 15:26   #5
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
А этот не прокатит. Если одну запись удалили и одну добавили?
если удалили и добавили, то критерием обновления будет изменение последнего id.
Что на счет вашего вопроса, что и менно вы получаете по UDP и в каком виде, а может в пакет запихнуть именно id изменившейся записи, и потом уже работать с ним????
Не забываем говорить спасибо за помощь - это ведь так приятно

Последний раз редактировалось Sanprof; 27.10.2010 в 15:28.
Sanprof вне форума Ответить с цитированием
Старый 27.10.2010, 15:28   #6
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
а может в пакет запихнуть именно id изменившейся записи, и потом уже работать с ним????
ЭВРИКА!!! Снимаю шляпу. Как я сам не догадался? Спасибо.
_SERGEYX_ вне форума Ответить с цитированием
Старый 27.10.2010, 15:29   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Можно добавлять время добавления записи в БД и потом время редактирования сравнивать так же как в случае с id.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 27.10.2010, 15:59   #8
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Почитайте вот этот топик (один из многочисленных на тему "обновлять/не обновлять изменившиеся данные на клиенте" и, если "обновлять, то как").
http://www.sql.ru/forum/actualthread...eb%e5%ed%e8%e8
На этом же форуме можно найти много способов (и для разных СУБД) как узнавать произошли ли обновления в таблицах БД.
Karabash вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из DataSet работающего по циклу в DataSet maroder22 БД в Delphi 1 05.09.2010 23:22
Использование DataSet Zirael Общие вопросы .NET 0 31.10.2009 17:29
dataset sergei64_89 Общие вопросы .NET 1 19.09.2008 20:14
DataSet nimf БД в Delphi 3 28.01.2008 23:03