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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2014, 11:25   #1
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию Обновление MemTable из базы данных

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

Имеется: FireBird, клиент, который при запуске загружает таблицу из базы в MemTable рисует её в DBGrid. Дальше работа происходит с загруженной таблицей.

Как сделать, чтобы при обновлении информации в базе(например, вставка, изменение, удаление записи) происходило обновление в MemTable? Я пробовал сделать через триггеры в базе и EventAlerter, но у меня не вышло.
Brabus вне форума Ответить с цитированием
Старый 11.10.2014, 13:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не оч. понял о каком обновлении идет речь, но я бы на твоем месте сделал второе подключение, по которому данные будут только писаться или удаляться но не выбираться. И это подключение в потоке и на сервер.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.10.2014, 00:02   #3
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Я пробовал сделать через триггеры
Вы книга не пробовали пролистать если бы не почитать просто перелистайте --> "Бондарь А.Г. - Interbase и Firebird практическое руководство для умных пользователей и начинающих разработчиков - 2012.pdf"
xxbesoxx вне форума Ответить с цитированием
Старый 12.10.2014, 19:24   #4
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию

Есть программа-клиент и есть база данных Firebird. При запуске программы из базы считывается таблица и заносится в MemTable. Мне нужно сделать чтобы при изменении(добавлении, удалении) записей в этой таблице на сервере изменившиеся(добавленные, удаленные) записи в программе-клиенте также изменялись(добавлялись, удалялись). Проще говоря в клиенте всегда должна быть актуальная база данных. И надо это сделать так, чтобы не запрашивать всю базу, а только изменившиеся записи.
Brabus вне форума Ответить с цитированием
Старый 12.10.2014, 19:48   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Обычно пользователь сам и актуализирует данные, кнопочкой например. Но если сильно-сильно хочется, то механизм событий FireBird и сильное усложнение

http://www.firebirdsql.org/file/docu...ird_events.pdf
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.10.2014, 20:15   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
При запуске программы из базы считывается таблица и заносится в MemTable.
О-о-о! Дай угадаю: Есть сервак. На нем база. Есть клиент. На нем нет базы. Ты заставляешь клиента считать всю (все) таблицу (таблицы) целиком с сервака чтоб работать с ними локально, а потом хочешь обратно на сервак запиндюрить?
А если я скажу тебе из своего горького опыта эксплуатации такого ПО, писанного некими... ну не важно кем, что это фуфло станет ользователю поперек горла, ты меня пошлешь или поверишь и одумаешься так делать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.10.2014, 20:53   #7
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию

Аватар, я как раз это пытаюсь сделать. Пока безрезультатно.

Stilet, да, всё именно так. А как тогда сделать чтобы таблицу в клиенте актуальную держать? Постоянно полностью запрашивать все записи с сервера?
Brabus вне форума Ответить с цитированием
Старый 15.10.2014, 11:36   #8
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Если честно не совсем понял вашу задумку. Ну вопервых для транзакции нужно указать уровень защищёности.

Потом не нужно держать всю базу в памяти!!! Нужно по необходимости тянуть нужные данные...
Dozent вне форума Ответить с цитированием
Старый 15.10.2014, 12:16   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А как тогда сделать чтобы таблицу в клиенте актуальную держать?
А зачем на клиенте держать актуалку? Скорость сети что-ли подводит? Или какие причины такой репликации?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление только одной строки из базы 11shepard11 Помощь студентам 2 25.03.2012 10:33
как организовать автоматическое обновление базы lildare C# (си шарп) 0 06.10.2011 10:34
Builder 6.0 обновление базы 6AZblJlb Помощь студентам 1 29.05.2011 16:43
Обновление Базы Данных Владимир123421 Microsoft Office Access 1 22.04.2011 15:18
append и memtable AK BULLETS Общие вопросы Delphi 0 23.03.2010 17:06