ОПЕРАТИВНОЕ ОТОБРАЖЕНИЕ ИЗМЕНЕНИЙ В ТАБЛИЦЕ

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

ОПЕРАТИВНОЕ ОТОБРАЖЕНИЕ ИЗМЕНЕНИЙ В ТАБЛИЦЕ

Сообщение Luxor » 17.04.2013 11:35:37

База данных Firebird 2.5
Приложение использует компоненты SQLdb
На форме компоненты IBConnection, SQLQuery, SQLTransaction

В программе работают два пользователя. Когда один пользователь вносит изменения в базу данных, то второй пользователь увидит изменения в базе если:
- перезайдет в базу по новой
- после того как выполнит модификацию записей в таблице

Если просто закрыть SQLQuery и потом открыть его, то изменений не отображается.

Отображение происходит с помощью SQLQuery.

Вставка записей или модификация происходит в процедуре

Код: Выделить всё
procedure InsertRecord
begin
  with TSqlquery.Create(Self) do
  begin
  DataBase:=IBConnection;
  SQL.Text:=insert into Table1 (Field1, Field2) Values (:Field1, :Field2);
  try
   ExecSQL;
   SQLTransaction.Commit;
  except
   SQLTransaction.Roollback;
  end;
  end;
end;


Как сделать чтобы у второго пользователя происходило обновление записей в базе данных, т.е. чтобы он оперативно видел изменения?
Luxor
новенький
 
Сообщения: 72
Зарегистрирован: 10.06.2010 19:30:43

Re: ОПЕРАТИВНОЕ ОТОБРАЖЕНИЕ ИЗМЕНЕНИЙ В ТАБЛИЦЕ

Сообщение hovadur » 17.04.2013 11:57:51

Я бы поставил бы одинарные кавычки после "SQL.Text := ", потом поставил бы в начало "SQLTransaction.StartTransaction", потом поставил бы "raise;" после Rollback, чтобы видеть возникающую ошибку, потом проверил бы что действительно добавляются записи в базу каким-нибудь менеджером, вроде flamerobin.
hovadur
постоялец
 
Сообщения: 116
Зарегистрирован: 31.01.2013 15:50:41

Re: ОПЕРАТИВНОЕ ОТОБРАЖЕНИЕ ИЗМЕНЕНИЙ В ТАБЛИЦЕ

Сообщение Brainenjii » 17.04.2013 12:10:33

Скорее всего Вам помогут firebird events
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: ОПЕРАТИВНОЕ ОТОБРАЖЕНИЕ ИЗМЕНЕНИЙ В ТАБЛИЦЕ

Сообщение svk12 » 17.04.2013 12:12:53

Можно использовать компонент TZIbEventAlerter из ZeosDbo.
svk12
постоялец
 
Сообщения: 409
Зарегистрирован: 09.06.2008 18:42:47

Re: ОПЕРАТИВНОЕ ОТОБРАЖЕНИЕ ИЗМЕНЕНИЙ В ТАБЛИЦЕ

Сообщение Luxor » 17.04.2013 12:19:41

Brainenjii писал(а):Скорее всего Вам помогут firebird events

Можно чуть подробнее?
Не работал с этим...
Luxor
новенький
 
Сообщения: 72
Зарегистрирован: 10.06.2010 19:30:43

Re: ОПЕРАТИВНОЕ ОТОБРАЖЕНИЕ ИЗМЕНЕНИЙ В ТАБЛИЦЕ

Сообщение alexs » 17.04.2013 12:27:03

Luxor
Конкретно по твоей задаче - тебе нужны event-ы.
Работать с ними очень просто
В триггере делаешь post_event "Твоё событие"
На форме размещаешь компоненту - приёмник события от event-а. В UIB и ZEOS они есть. А в обработчике события делаешь refresh на данные.

А вот на практике - оно не нужно.
Мне тоже не однократно юзеры доказывали - что оно очень нужно. А потом - сами говорили - убери нафиг, мельтишит, отвелкает.
Достаточно сделать кнопку "Обновить".
Всё в итоге всегда сводится к тому, что пользователи делят свою работу на два логических, почти не персекающихся куска. И им же потом легче самих себя контролировать.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: ОПЕРАТИВНОЕ ОТОБРАЖЕНИЕ ИЗМЕНЕНИЙ В ТАБЛИЦЕ

Сообщение Luxor » 17.04.2013 12:31:10

Вот я тоже думал сделать кнопку для обновления. В принципе и пользователи не перенапрягуться. Нажмут, когда надо.

Добавлено спустя 3 часа 6 минут 40 секунд:
может вопрос туповат, но как обновить правильно данные на втором клиенте?
SQLQuery Close/Open - не помогает
SQLQuery.ACTIVE True/False так же не катит...
Luxor
новенький
 
Сообщения: 72
Зарегистрирован: 10.06.2010 19:30:43

Re: ОПЕРАТИВНОЕ ОТОБРАЖЕНИЕ ИЗМЕНЕНИЙ В ТАБЛИЦЕ

Сообщение alexs » 17.04.2013 16:35:58

Luxor писал(а):SQLQuery Close/Open - не помогает

Это должно работать.
Если не помогает - смотрите с какими параметрами стартовали транзакцию. Такое поведение обычно для транзакций-снимков (snapshot).
Либо на изменяющем клиенте транзакция не подтверждена.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: ОПЕРАТИВНОЕ ОТОБРАЖЕНИЕ ИЗМЕНЕНИЙ В ТАБЛИЦЕ

Сообщение Luxor » 02.06.2013 23:08:02

alexs писал(а):
Luxor писал(а):SQLQuery Close/Open - не помогает

Это должно работать.
Если не помогает - смотрите с какими параметрами стартовали транзакцию. Такое поведение обычно для транзакций-снимков (snapshot).
Либо на изменяющем клиенте транзакция не подтверждена.


Как задавать параметры транзакции при использовании стандартного IBConnection (Как правильно записывать параметры?)
Если можно, приведите пример.
Про параметры читал, вроде все понятно.
Я так понимаю можно в свойстве PARAMS компонента SQLTransaction и при SQLTransaction.Active:=True эти параметры будут приняты.
Luxor
новенький
 
Сообщения: 72
Зарегистрирован: 10.06.2010 19:30:43

Re: ОПЕРАТИВНОЕ ОТОБРАЖЕНИЕ ИЗМЕНЕНИЙ В ТАБЛИЦЕ

Сообщение alexs » 02.06.2013 23:40:51

http://www.ibase.ru/devinfo/ibtrans.htm
Тут расписано.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 242

Рейтинг@Mail.ru