powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / видимость обновленых данных после транзакции (delphi)
14 сообщений из 14, страница 1 из 1
видимость обновленых данных после транзакции (delphi)
    #32252175
cloner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть дельфи 6 интербейс 6 опен
имеем форму на которой dbgrid, ibdatabase, ibtransaction, ibtable (при ibquery результат тот же), datasource

запускаю две копии программы, в одной (в dbgrid) ввожу изменения, делаю IBTransaction.CommitRetaining;

во второй делаю IbTable.Refresh изменения не вижу

подскажите плиз, не знаю куда кинуться, открывать и закрывать ibdatabase не теоретически не приемлем (но возможно), может есть варианты
...
Рейтинг: 0 / 0
видимость обновленых данных после транзакции (delphi)
    #32252193
Попробуй закрыть/открыть второй table.

У меня похожая проблема: в одной программе есть два окна, которые кроме всего прочего обращаются к одной и той же таблице. Так вот, при простом refresh изменения почему-то не проявляются, а если сделать по очереди в обоих окнах Commit, то все очень хорошо видно. Странно...
...
Рейтинг: 0 / 0
видимость обновленых данных после транзакции (delphi)
    #32252196
cloner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно подробнее, т.е. для двух окон у тебя 2 ibtransaction и по очереди ты делаешь commit?
...
Рейтинг: 0 / 0
видимость обновленых данных после транзакции (delphi)
    #32252247
cloner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да вот прикол получается, допустим если тока одна прога работатет я сделал изменения и сохранил (ни чего не закрывал не открывал) и запускаю вторую прогу, то она видит эти изменения
...
Рейтинг: 0 / 0
видимость обновленых данных после транзакции (delphi)
    #32252257
nester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Было похожее на другом наборе компонент.
Проблема была в Isolation level у транзакции.
При RepeatableRead не виделись изменения, сделанные в других
транзакциях. При Read Commited всё ОК.
...
Рейтинг: 0 / 0
видимость обновленых данных после транзакции (delphi)
    #32252259
VictorKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да надо сделать ReadCommited и почаще во второй проге execut-ить Commit
...
Рейтинг: 0 / 0
видимость обновленых данных после транзакции (delphi)
    #32252283
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет ReadCommited всё верно.
Кроме того надо помнить, что метод Refresh в айбишных компонентах обновляет лишь текущую строку, а не весь датасет. Хотя, если у тебя Table, то это может быть и не так.
...
Рейтинг: 0 / 0
видимость обновленых данных после транзакции (delphi)
    #32252403
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arni
"Кроме того надо помнить, что метод Refresh в айбишных компонентах обновляет лишь текущую строку, а не весь датасет."

Не совсем верно. Метод Refresh может работать в соответствии с любым скриптом, который можно прописать в UpdateSQL
...
Рейтинг: 0 / 0
видимость обновленых данных после транзакции (delphi)
    #32252885
Alex_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
была такая проблема, но после того как всем IBQuery дал по своей IBTransaction в состоянии Active=True, все заработало. можешь ещё и это добавить тоже помогает.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
procedure TOqmListF.IBQuery1BeforeOpen(DataSet: TDataSet); 
begin 
if not IBTransaction1.Active 
then 
IBTransaction1.Active:=True; 

IBTransaction1.Commit; 

end;
...
Рейтинг: 0 / 0
видимость обновленых данных после транзакции (delphi)
    #32253270
_DmG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле решение следующее:
для IBQuery
1. Страртуем транзакцию
2. Делаем Insert, Update, Delete и т.д.
3. Пункт 2 должен быть с try..except. И если все ОК, то делаем Commit, иначе RollBack.
4. В самом конце переоткрываем IBQuery.
5. (вместо пункта 4...) Если есть желание работать с 2 клиентами и более, то организуем триггеры на каждую модификацию таблицы (Insert, Update, Delete) и затем в IBEvents в обработчике получения зарегистрированного события делаем Close - Open у IBQuery.

Удачи.
...
Рейтинг: 0 / 0
видимость обновленых данных после транзакции (delphi)
    #32255220
cloner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нашел!!!!!!!!

Database не трогаем!

в ibtransaction в параметрах указать

read_committed
rec_version
nowait

после этого тока тэйблы открываем закрываем и query и все обновляется

теперь надо будет к ibevent привязку сделать
как сделать чтоб вызывающая изменения прога не раегировала на события, то есть чтоб сама не делала открытие и закрытие тэйблов и query-ей
...
Рейтинг: 0 / 0
видимость обновленых данных после транзакции (delphi)
    #32255371
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для интереса, какие параметры там у тебя стояли?
...
Рейтинг: 0 / 0
видимость обновленых данных после транзакции (delphi)
    #32256142
cloner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да я долго искал какие нада!,
...
Рейтинг: 0 / 0
видимость обновленых данных после транзакции (delphi)
    #32270312
Cheboor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помоему проще всего делать так:
какая либо таблица изменилась, на сервере сработал триггер, послал всем сообщение (event), твоя программа поймала сообщение (event) и сгенерировала сообщение для всех форм (ну или контроллов) приложения (например wm_user+X) а каждая форма приложения будет отлавливать сообщения (wm_user+x) если у нее есть контролы, которые должны отреагировать...
например
пользователь нажал на кнопку...
ibtableTEST.edit;
ibtableTEST.fields.asstring:='TEST';
ibtableTEST.post;
ibtableTEST.transaction.commit;

на сервере сработал триггер (на after_update)
event "TEST_AFTER_UPDATE"

твоя программа поймала этот event и послала всем формам сообщение wm_test_updated

некая форма x поймала сообщение wm_test_updated и выполнила код

ibqueryTEST.transaction.commit;
ibqueryTEST.active:=false;
ibqueryTEST.active:=true;

тоже самое сделала фомрма y,z и другие (если им надо на это реагировать)...
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / видимость обновленых данных после транзакции (delphi)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]