Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
 Аватар для Sanprof
96 / 96 / 16
Регистрация: 28.01.2008
Сообщений: 426

Обновились ли данные в DataSet

27.10.2010, 13:33. Показов 4279. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте, вобщем такая проблема у меня возникла. Пишу на Delphi, на форме есть DBGrid и DataSource связанные между собой, создаю динамически Query, прописываю запрос, присваиваю DataSource1.DataSet := FQuery; DBGrid естественно все нормально отображает с этим проблем нет, только вот запрос у меня стоит на таймере и перед тем как присвоить DataSource1.DataSet := FQuery; хотелось бы проверить есть ли изменения, и если есть перерисовать DBGrid.
Если такое возможно хотелось бы услышать ваши мнения.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.10.2010, 13:33
Ответы с готовыми решениями:

Как обновить данные на форме у клиентов, сразу же когда обновились данные в базе
Нужно реализовать мини-чат. Клиент пишет текст в таблицу, и как только текст добавился в таблицу необходимо как-то обновить данные у...

Данные из DataSet в Combobox
Загружаю данные из таблицы бд (Code, name - поля таблицы) в DataSet, потом из него в List<>, и указываю List как источник для autocomplete...

Вытащить данные из DataSet
Есть DataSet в котором храниться 1 строка с двумя колонками (Name и Price). Каким образом значения из этого Dataset передать в 2 разных...

11
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
27.10.2010, 14:04
1. Системно
* Если ADO (т.е. Аксцесс база) - через таймер сканить размер файла ИмяБазы.mdb и если он изменился - обновить ДБГрид

* Если Пардокс (.mdf), то фалов будет тыщамильёнов и это сильно замедлит процесс сканирования.

2. Программно
при каждом изменении данных в БД программа пишет в какой-то временный файл "1". Сканится этот файл тоже по таймеру (раз в 5 секунд - оптимально (зависит от задачи)). Если в файле "1" - обновляет ДБгрид и пишет в файл "0".
0
 Аватар для Sanprof
96 / 96 / 16
Регистрация: 28.01.2008
Сообщений: 426
27.10.2010, 14:59  [ТС]
вобщем решил проблему так (база данных PostgreSql) по сути мне нужно проверять прихождениие в таблицу записи или удаление из нее, т.к. при добавлении записи инкрементируется id, то можно проверять последнюю запись и если id не изменилось значит не перерисовывать DBGrid, а также проверять не изменилось ли количество записей в таблице, и если изменилось, то перерисовать DBGrid. Знаю способ не универсальный, но что ж тут поделаешь.
0
 Аватар для Sergiuz
161 / 159 / 39
Регистрация: 10.10.2010
Сообщений: 461
28.10.2010, 00:07
Sanprof, Опиши Логику вопроса как узнать изменилась база не изменилась в чем состоит трудность рефреша таблицы???
А также Sanprof, Андрей Борисови скажите пожалуйста всеми вашими способами как узнать изменения была запись "хлеб" я сделал апдейт и получил "пиво". Фактически Ваша база изменилась при этом не изменил размер базы данных, не потерял к-во записей, не добавил к-во записей?????
0
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
28.10.2010, 07:24
Цитата Сообщение от Sergiuz Посмотреть сообщение
скажите пожалуйста всеми вашими способами как узнать изменения была запись "хлеб" я сделал апдейт и получил "пиво". Фактически Ваша база изменилась при этом не изменил размер базы данных, не потерял к-во записей, не добавил к-во записей?????
мой второй способ:
вы исправили что-то в базе? - да => записать в temp файл "1"
0
 Аватар для Sergiuz
161 / 159 / 39
Регистрация: 10.10.2010
Сообщений: 461
28.10.2010, 09:34
Андрей Борисови, И все таки не вижу реально поставленной задачи при ктором нужно делать дополнительные движения на проверку изменения бд. Почему просто не делать рефреш грида?
0
 Аватар для Kridan
67 / 67 / 11
Регистрация: 08.10.2010
Сообщений: 138
28.10.2010, 10:52
А если тригер поставить?
SQL
1
2
CREATE TRIGGER insert_table1 AFTER INSERT OR DELETE OR UPDATE ON table1
  INSERT INTO table2 VALUES (NULL, CURRENT_TIMESTAMP);
И проверять вторую таблицу на время в записи с большим id.
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
28.10.2010, 11:24
Первый вопрос, как это можно сделать. В разных БД скорее всего это делается по разному. Так, в FB это просто реализуется на механизме событий (EVENTS). В FB этот механизм встроет в функционал сервераи действует по следующей схеме.
1. Создается некоторое событие как объект БД.
2. В таблицах, измения которых отслеживаются, в соотвеьствующих триггерах эти события инициируются
2. В приложения специально предназначенными для этого компонентами события принимаются и обрабатываются (переоткрываюся необходимые наборы данных)
Не знаю точно, но, думаю, в PostgreSql эти возможности есть.

Второй вопрос надо ли это делать и, если надо, то в каких случаях. Мое мнения, что использовать это можно только тогда, когда ОЧЕНЬ НАДО и осторожно. Представьте себе, что у Вас БД на несколько десятков или более юзеров и значительная часть модифицирует данные. И получите у себя на клиенте сплошное дерганье.
0
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
28.10.2010, 14:11
для чего это может понадобиться?
вот пример:
сетевой телефонный справочник. двух уровневый. Админ и Юзверь.
Юзвери - только смотрят (читают базу). Когда на одном из них входит админ - в базу пишется значение EnterAdmin=true
Раз в 10 секунд прога смотрит это значение и если оно стало true - выводит пользователю надпись: "занято" и картинку с унитазом и "данон".

Добавлено через 18 секунд
База аксцессовская. ADO.
0
 Аватар для Sergiuz
161 / 159 / 39
Регистрация: 10.10.2010
Сообщений: 461
29.10.2010, 08:50
Уже давно придумали сетевые СУБД(Firebird, MySql, MsSql, Oracle, Sybase и т.д.), и делать клиент сервер на Аксесе потом заморачиватся с отловом всяких там админентер, таблица занята и т.д. вроде как уже и не интересно
0
 Аватар для Kridan
67 / 67 / 11
Регистрация: 08.10.2010
Сообщений: 138
29.10.2010, 09:17
Цитата Сообщение от Sanprof Посмотреть сообщение
вобщем решил проблему так (база данных PostgreSql) по сути мне нужно проверять прихождениие в таблицу записи или удаление из нее
У топикстартера Постнрес и она тоже сетевая

Цитата Сообщение от Sanprof Посмотреть сообщение
только вот запрос у меня стоит на таймере и перед тем как присвоить DataSource1.DataSet := FQuery; хотелось бы проверить есть ли изменения, и если есть перерисовать DBGrid.
Видимо ему не хочется очень часто (по таймеру) гонять очень большой запрос, по этому и хочет лёгким запросом проверить изменения.
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
29.10.2010, 11:39
Цитата Сообщение от Sergiuz Посмотреть сообщение
Уже давно придумали сетевые СУБД(Firebird, MySql, MsSql, Oracle, Sybase и т.д.), и делать клиент сервер на Аксесе потом заморачиватся
Прав, присоединяюсь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.10.2010, 11:39
Помогаю со студенческими работами здесь

Из DataSet экспортировать данные в Excel
Из ds = new DataSet() экспортировать данные в Exel файл. На данный момент файл создается и одна колонка, которую я указал в запросе...

Получить данные в DataSet из интернета
Как сделать так, чтобы ДатаСет получал данные из интернета? Например сохранить базу на фтп сервере и обновлять ее через инет.

Как получить данные из DataSet
Тщетно пытаюсь получить данные из подключенного DataSet. Подключил БД через Источники данных, данные успешно добавляются в БД через...

Данные из DataSet->FieldByName() SQL
Добрый день. Возникла ситуация Есть БД SQL Есть таблица например xxx в ней столбец 1. В нем данные вида '1234';'34556';'88888'; и так...

Получить данные из DataSet в ListBox
Требуется вывести данные запроса из базы данных в listbox, но почему то это не получается. С датагридвью все нормально. Но для проекта...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru