Форум: "Базы";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];
ВнизТранзакции Найти похожие ветки
← →
Jaxtor (2003-04-24 10:22) [0]Добрый день! Вот делаю я команду INSERT INTO () VALUES () из хранимой процедуры
в цикле клиентской программы, транзакцию не подтверждаю, хотелось бы увидеть вставленные записи в DBGrid, не подтверждая эту транзакцию. Как это сделать?
← →
Соловьев (2003-04-24 10:27) [1]сделать селект
← →
Orlan Master (2003-04-24 10:28) [2]Лучше поменять тактику. Не есть хороший манера подвешивать транзакцию. Лучше попробовать работать на уровне кэшированных обновлений на уровне клиента, и откатывать не транзакцию, а клиентский кэш.
← →
Zacho (2003-04-24 10:28) [3]SELECT и хранимая процедура должны выполняться в одной транзакции
← →
Jaxtor (2003-04-24 10:29) [4]>сделать селект
А транзакция не подтверждена.
← →
Jaxtor (2003-04-24 10:30) [5]>Zacho Попробую в одной транзакции
← →
Johnmen (2003-04-24 10:31) [6]>Jaxtor © (24.04.03 10:29)
>А транзакция не подтверждена.
И что ?
← →
Соловьев (2003-04-24 10:31) [7]
> А транзакция не подтверждена.
> Zacho © (24.04.03 10:28)
← →
Соловьев (2003-04-24 10:41) [8]
> сделать селект
я имел в виду, что хочешь посмотреть - кто же тебе мешает? сделай селект посмотри - понравилось - вставляй.
← →
Orlan Master (2003-04-24 10:47) [9]А в это время кто-то другой залез и использует неподтвержденные данные под себя, пока вы оцениваете их достовеность. Уважаемые, нарушается концептуальное правило неделимости транзакции. К тому же, если вы используете блокируюущую транзакцию, то другие, в том числе и вы не получите выборки, ведь читать промежуточный результат вы будете в другой транзакции. А она не отдаст результата, если предыдущая транзакция не завершена. Правда, если не используется уровень изоляции ReadUncommited. Тогда каков смысл транзакции ваще?
← →
Zacho (2003-04-24 10:52) [10]
> Orlan Master (24.04.03 10:47)
В IB нет никакого ReadUncommited. И ничего не нарушится. И кто сказал, что "читать промежуточный результат вы будете в другой транзакции" ? Пойми, IB - версионник, и работа с транзакциями в нем сильно отличается от, например, MSSQL
← →
Johnmen (2003-04-24 10:52) [11]>Orlan Master (24.04.03 10:47)
>Тогда каков смысл транзакции ваще?
Про это пишут в книгах...:) Рекомендую почитать на досуге...
← →
Orlan Master (2003-04-24 10:57) [12]>Про это пишут в книгах...:) Рекомендую почитать на досуге...
Да я их уже перечитал столько... К тому же в моем опыте построение корпоративной распределенной инф. системы. Причем построенной мною в одиночку. И все замечательно работает.
Я про транзакции спросил приминительно к контексту разговора. Каков реальный смысл городить огород с транзакцией, а не использовать альтернативный, и на мой взгляд более выгодный способ решения задачи?
← →
Zacho (2003-04-24 11:06) [13]
> Orlan Master (24.04.03 10:57)
Смысл может быть в том, что CachedUpdates довольно глюкав. Правда это зависит от компонент доступа и, естественно, ручек программера :-)
← →
Orlan Master (2003-04-24 11:10) [14]Категорически согласен. Сам иду по пути отыскивания алтернатив с минимизации глюкавости. Но по крайней мере ADO BatchUpdate работает корректно. И легко управляется. Но уже не помню как это было для IB cachedupdates. Возился я с этим около трех лет назад.
← →
Jaxtor (2003-04-24 15:08) [15]Ну так какие параметры мне ставить для транзакции, чтобы SELECT
смог прочитать неподтвержденные записи?
← →
Jaxtor (2003-04-24 15:51) [16]SELECT не работает....
← →
Zacho (2003-04-24 15:57) [17]Еще раз: выполнение ХП и SELECT должны быть в одной транзакции.
← →
Jaxtor (2003-04-24 16:04) [18]Ладно, попробую еще раз проверить, но мне кажется они в одной
транзакции находятся.
← →
Jaxtor (2003-04-25 16:34) [19]Ну вот, делаю StartTransaction. Commit, Rollback, CommitRetaining
не делаю нигде.
SELECT у меня вызывается из
набора данных типа TIBDataSet:
select SNAKL_PROC.* from SNAKL_PROC(:NaklID)
← →
Jaxtor (2003-04-25 16:36) [20]Не получается. Может какой-нибудь Refresh надо делать?
← →
Zacho (2003-04-25 17:06) [21]
> 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 17:13) [22]>Zacho У меня к IBDataSet"u привязана хранимая процедура.
Собственно можно попробовать использовать другие компоненты,
IBQuery, IBSQL...
← →
Zacho (2003-04-25 17:22) [23]
> Jaxtor © (25.04.03 17:13)
Да собственно не важно, какие компоненты, то, что я привел - только пример, главное - что бы и вставка записей, и последующая их выборка были в одной транзакции.
← →
Jaxtor (2003-04-25 17:25) [24]Через IBQuery все работает:)) Проблема решена.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c