Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.19;
Скачать: CL | DM;

Вниз

Транзакции   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.013 c
3-59593
Arkady
2003-04-28 08:23
2003.05.19
Вставка большого файла в базу Access


3-59538
SergeyNew
2003-04-28 17:05
2003.05.19
FB


7-59957
Bartov
2003-03-20 05:55
2003.05.19
Метки дисков


3-59551
Dimaz-z
2003-04-25 21:20
2003.05.19
Как скопировать записи из одной базы данных в другую?


14-59927
русский
2003-04-29 21:36
2003.05.19
Письмо Борланду