![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Транзакции [D6, IB6.x]
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 Попробую в одной транзакции