Firebird. При работе по сети не видны изменения.

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

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

Ответить
btsoft
незнакомец
Сообщения: 7
Зарегистрирован: 04.04.2014 06:24:48

Firebird. При работе по сети не видны изменения.

Сообщение btsoft »

Здравствуйте. Разработал СУБД на Firebird. Когда один пользователь - все работает замечательно. Но недавно начал тестировать ее по сети, и выяснил следующую вещь. Если запущено 2 экземпляра программы, то во втором не видны изменения, сделанные в первом. Т.е. заходишь в какой-нибудь документ, меняшь там сумму, записываешь. Смотришь с другого компьютера - а в этом документе сумма старая! Изменения видны только после перезапуска программы. Т.е. данные-то пишутся, но как-то странно.
Плюс, если пытаться со второго компьютера отредактировать только что измененную на первом запись, выдается ошибка Deadlock. Update conflicts with concurrent update.
Конфигурация: Lazarus 1.0.14, Firebird 2.5.2, ZEOS 7.1.2 Stable
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Вам надо изучить механизм транзакций.
В частности - у вас скорее всего snaphot транзакция и не разу не подтверждается во время работы.
Аватара пользователя
*Rik*
постоялец
Сообщения: 453
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал
Контактная информация:

Сообщение *Rik* »

alexs писал(а):Вам надо изучить механизм транзакций.
В частности - у вас скорее всего snaphot транзакция и не разу не подтверждается во время работы.

Кроме этого, могу предложить вам использовать компоненты IBExpress, которые я немного "допилил". В отличие от ZEOS, для создания "живых" запросов, достаточно одной компонены TIBDataSet, в ней изначально предусмотрены SQL запросы для выборки, вставки, редактирования, удаления, обновления данных, UpdataObject не требуется. Вы можете управлять пишущей и читающей транзакцией раздельно, чтобы избежать блокировок и ситуаций подобной вашей, полный контроль над транзакциями. Есть автоформатирование полей (для числовых данных: разделение разрядов, точность после запятой в соответствии с точностью поля заданной при создании этого поля, форматирование дат), можно задавать персональные форматы для отдельных полей и форматы редактирования данных.
Добавлена поддержка выражений RETURNING FIELD в Insert и Update запросах, поддержка возвращаемых значений из EXECUTE PROCEDURE, поддержка выражения EXECUTE BLOCK.
Все бесплатно и кросс-платформенно.
visual-t.ru
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

*Rik*
Ну я точно также погу предложить человеку UIB+FBDataSet. :lol:
Но и в Zeos можно всё настроить.
Zhanat
новенький
Сообщения: 21
Зарегистрирован: 06.09.2013 08:46:40

Сообщение Zhanat »

В TZConnection есть свойство TransactIsolationlevel поставил там tiReadCommitted тогда показывает изменения на другом компьютере только после обновление SQL запроса.
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Zhanat писал(а):изменения на другом компьютере только после обновление SQL запроса.

А как вы хотели? :-)
btsoft
незнакомец
Сообщения: 7
Зарегистрирован: 04.04.2014 06:24:48

Сообщение btsoft »

Спасибо всем за ответы и советы. Помогло в ZConnection поставить TransactIsolationlevel в tiReadCommitted. И также при записи какого-оибо объекта делаю перед началом записи изменений ZConnection.StartTransaction, а после окончания - ZConnection.Commit.
Аватара пользователя
zoltanleo
постоялец
Сообщения: 459
Зарегистрирован: 17.10.2013 10:55:01

Сообщение zoltanleo »

btsoft писал(а):Помогло

alexs прав, вам надо идти на сайт к kdv(ibase.ru) и читать основы работы с БД. Там очень много нюансов, и вы набьете себе еще не одну шишку, пока не почитаете об этом или не познаете на собственном печальном опыте :)
Ответить