Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Refresh


IBChaynik ©   (2004-12-16 14:03:00) 

Здравствуйте, мастера. Две программы изменяют таблицу IB, как мне сделать чтобы одна программа нажимая кнопку refresh увидела изменения другой программы?


msguns   (2004-12-16 15:49:00) [1]

>IBChaynik   (16.12.04 15:11) [9]
>А простого кода нет для этого? Первая программа потверждает, второя перечитает, все равно не видно

Простого кода для чего ? Показывающих принцип взаимодействия транзакций ? В коде этого чаще всего и нет, т.к. это прописывается в параметрах соответсвующих компонент доступа.
Если юзаешь TIBTransaction и ничего не указывешь в параметрах
(св-во Params пустое), то дефаултно ставится SNAPSHOT, что как раз и говорит о "слепке". Т.е. пока эту транзакцию (а не НД) не завершишь и не стартанешь заново, никаких изменений не увидишь. Даже сделанных в этом же приложении и даже в контексте этой же транзакции !
Такая опция используется как раз для того, чтобы не видеть, что там кем-то меняется.

Если тебе надо, чтобы изменения, подтвержденные другими запросами (в этом или другом приложении) были видны в текущем датасете и при этом не хочешь перезапускать транзакцию (например, если в рамках этой же транзакции пооткрывал кучу других датасетов и нежедательно их автозакрытие), то используй в редакторе Params соотв.транзакции опцию read_commited или, если пишущая, concurrency


Zacho   (2004-12-16 15:36:00) [2]

IBChaynik   (16.12.04 15:11) [9]

Здесь не очень любят лентяев. Вот если ты прочитаешь статью и что-то в ней не поймёшь - спрашивай, ответим.


IBChaynik   (2004-12-16 15:11:00) [3]

спасибо большое за урл, я обязятельно прочитаю. А простого кода нет для этого? Первая программа потверждает, второя перечитает, все равно не видно


Anatoly Podgoretsky   (2004-12-16 15:11:00) [4]

А пока транзакция не закончена, нет смысла говорить об данных.


DenK_vrtz   (2004-12-16 14:59:00) [5]

>msguns ©   (16.12.04 14:53) [7]
>Не вижу смысла повторяться

лишь бы автор вопроса это усвоил :)


msguns   (2004-12-16 14:53:00) [6]

>DenK_vrtz ©   (16.12.04 14:24) [3]
Для IB недостаточно. И для любых других СУБД, использующих транзакции.
В транзакциях есть такая штука, как уровень изоляции. Вот от этого уровня (в том числе) и зависит "видимость" в НД изменений, выполненных другими запросами к серверу (как со своего компа, так и с других). Хотя переоткрывать НД все равно придется.

А вообще-то Игорь правильно в урл послал. Там достаточно хорошо об этом писано. Не вижу смысла повторяться.


Zacho   (2004-12-16 14:36:00) [7]

IBChaynik   (16.12.04 14:28) [4]

Читать http://www.ibase.ru/devinfo/ibtrans.htmдо полного просветления


stud   (2004-12-16 14:31:00) [8]

для этого первая программа должна подтрведить сделанные изменения, а вторая перечитать данные


IBChaynik   (2004-12-16 14:28:00) [9]

это не работает. Можно
DataBase.Connected:=false;
DataBase.Connected:=true;
но это уж слишком


DenK_vrtz   (2004-12-16 14:24:00) [10]

>Этого недостаточно

Сергей, а чего дальше не продолжить?
Ты всегда популярно объясняешь :)


msguns   (2004-12-16 14:17:00) [11]

>DenK_vrtz ©   (16.12.04 14:07) [1]

Этого недостаточно.


DenK_vrtz   (2004-12-16 14:07:00) [12]

DataSet.close;
DataSet.open;


Наверх

Титульная страница Поиск, карта сайта Написать письмо