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

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

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

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

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

Не совсем верно. Метод Refresh может работать в соответствии с любым скриптом, который можно прописать в UpdateSQL
...
Рейтинг: 0 / 0
01.09.2003, 16:11
    #32252885
Alex_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
видимость обновленых данных после транзакции (delphi)
была такая проблема, но после того как всем 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
02.09.2003, 09:28
    #32253270
_DmG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
видимость обновленых данных после транзакции (delphi)
На самом деле решение следующее:
для 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
03.09.2003, 19:33
    #32255220
cloner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
видимость обновленых данных после транзакции (delphi)
нашел!!!!!!!!

Database не трогаем!

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

read_committed
rec_version
nowait

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

теперь надо будет к ibevent привязку сделать
как сделать чтоб вызывающая изменения прога не раегировала на события, то есть чтоб сама не делала открытие и закрытие тэйблов и query-ей
...
Рейтинг: 0 / 0
04.09.2003, 08:16
    #32255371
arni
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
видимость обновленых данных после транзакции (delphi)
Для интереса, какие параметры там у тебя стояли?
...
Рейтинг: 0 / 0
04.09.2003, 16:34
    #32256142
cloner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
видимость обновленых данных после транзакции (delphi)
да я долго искал какие нада!,
...
Рейтинг: 0 / 0
19.09.2003, 14:07
    #32270312
Cheboor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
видимость обновленых данных после транзакции (delphi)
помоему проще всего делать так:
какая либо таблица изменилась, на сервере сработал триггер, послал всем сообщение (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
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / видимость обновленых данных после транзакции (delphi) / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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