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

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

Транзакции [D6, IB6.x]


Страницы:   1 2

Jaxtor ©   (2003-04-24 10:22:00) 

Добрый день! Вот делаю я команду INSERT INTO () VALUES () из хранимой процедуры
в цикле клиентской программы, транзакцию не подтверждаю, хотелось бы увидеть вставленные записи в DBGrid, не подтверждая эту транзакцию. Как это сделать?


Jaxtor   (2003-04-25 17:25:00) [1]

Через IBQuery все работает:)) Проблема решена.


Zacho   (2003-04-25 17:22:00) [2]


> Jaxtor © (25.04.03 17:13)

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


Jaxtor   (2003-04-25 17:13:00) [3]

>Zacho У меня к IBDataSet"u привязана хранимая процедура.
Собственно можно попробовать использовать другие компоненты,
IBQuery, IBSQL...


Zacho   (2003-04-25 17:06:00) [4]


> Jaxtor © (25.04.03 16:36)


Ну вот такой пример:
Одна TIBTransaction, TIBDataSet и TIBSQL. Естественно,к IBDataSet и IBSQL подключен один и тот же IBTransaction. В IBSQL.SQL - "INSERT INTO MY_TABLE(ID,NAME) VALUES(GEN_ID(MY_GEN,1),"Тра-ля-ля")
IBDataSet.SelectSQL - "SELECT * FROM MY_TABLE"
Итак:
IBTransaction.StartTransaction;
IBSQL.ExecQuery;
IBDataSet.Open;
И в IBDataSet видим запись, вставленную IBSQL.

Если ничего не получится - опиши все подробнее - запросы, св-ва IBDataSet и IBTransaction и т.п., и кусок кода, в котором ты запускаешь ХП и делаешь селект.


Jaxtor   (2003-04-25 16:36:00) [5]

Не получается. Может какой-нибудь Refresh надо делать?


Jaxtor   (2003-04-25 16:34:00) [6]

Ну вот, делаю StartTransaction. Commit, Rollback, CommitRetaining
не делаю нигде.

SELECT у меня вызывается из
набора данных типа TIBDataSet:

select SNAKL_PROC.* from SNAKL_PROC(:NaklID)



Jaxtor   (2003-04-24 16:04:00) [7]

Ладно, попробую еще раз проверить, но мне кажется они в одной
транзакции находятся.


Zacho   (2003-04-24 15:57:00) [8]

Еще раз: выполнение ХП и SELECT должны быть в однойтранзакции.


Jaxtor   (2003-04-24 15:51:00) [9]

SELECTне работает....


Jaxtor   (2003-04-24 15:08:00) [10]

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


Orlan Master   (2003-04-24 11:10:00) [11]

Категорически согласен. Сам иду по пути отыскивания алтернатив с минимизации глюкавости. Но по крайней мере ADO BatchUpdate работает корректно. И легко управляется. Но уже не помню как это было для IB cachedupdates. Возился я с этим около трех лет назад.


Zacho   (2003-04-24 11:06:00) [12]


> Orlan Master (24.04.03 10:57)

Смысл может быть в том, что CachedUpdates довольно глюкав. Правда это зависит от компонент доступа и, естественно, ручек программера :-)


Orlan Master   (2003-04-24 10:57:00) [13]

>Про это пишут в книгах...:) Рекомендую почитать на досуге...
Да я их уже перечитал столько... К тому же в моем опыте построение корпоративной распределенной инф. системы. Причем построенной мною в одиночку. И все замечательно работает.
Я про транзакции спросил приминительно к контексту разговора. Каков реальный смысл городить огород с транзакцией, а не использовать альтернативный, и на мой взгляд более выгодный способ решения задачи?


Johnmen   (2003-04-24 10:52:00) [14]

>Orlan Master (24.04.03 10:47)
>Тогда каков смысл транзакции ваще?

Про это пишут в книгах...:) Рекомендую почитать на досуге...



Zacho   (2003-04-24 10:52:00) [15]


> Orlan Master (24.04.03 10:47)

В IB нет никакого ReadUncommited. И ничего не нарушится. И кто сказал, что "читать промежуточный результат вы будете в другой транзакции" ? Пойми, IB - версионник, и работа с транзакциями в нем сильно отличается от, например, MSSQL


Orlan Master   (2003-04-24 10:47:00) [16]

А в это время кто-то другой залез и использует неподтвержденные данные под себя, пока вы оцениваете их достовеность. Уважаемые, нарушается концептуальное правило неделимости транзакции. К тому же, если вы используете блокируюущую транзакцию, то другие, в том числе и вы не получите выборки, ведь читать промежуточный результат вы будете в другой транзакции. А она не отдаст результата, если предыдущая транзакция не завершена. Правда, если не используется уровень изоляции ReadUncommited. Тогда каков смысл транзакции ваще?


Соловьев   (2003-04-24 10:41:00) [17]


> сделать селект

я имел в виду, что хочешь посмотреть - кто же тебе мешает? сделай селект посмотри - понравилось - вставляй.


Соловьев   (2003-04-24 10:31:00) [18]


> А транзакция не подтверждена.



> Zacho © (24.04.03 10:28)


Johnmen   (2003-04-24 10:31:00) [19]

>Jaxtor © (24.04.03 10:29)
>А транзакция не подтверждена.

И что ?


Jaxtor   (2003-04-24 10:30:00) [20]

>Zacho Попробую в одной транзакции


Страницы:   1 2

Наверх

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