Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по @@IDENTITY, MS SQL Server+Borland C++ Bulider 
V
    Опции темы
Кнопа
Дата 7.2.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 1.2.2007
Где: Москва

Репутация: нет
Всего: нет



Всем привет!
Меня интересует вот такая тонкость. При работе в многопользовательском режиме получу ли я корректный id последней вставленной записи, в рамках одной транзакции?
То есть:
Код

 if(DataModule1->ADOConnection1->InTransaction)
 {
  try           {DataModule1->ADOConnection1->CommitTrans();}
  catch(...)    {DataModule1->ADOConnection1->RollbackTrans();}
 }
 DataModule1->ADOConnection1->BeginTrans();
 try
 {
  DataModule1->WriteQuery->ExecSQL(); //вставляет запись в таблицу "insert into additions (...) values (...)"
  DataModule1->IdentyQuery->Open(); //выбирает идентификатор последней записи "select @@identity from additions"
  DataModule1->ADOConnection1->CommitTrans();

 }
 catch(...)
 {
  DataModule1->ADOConnection1->RollbackTrans();
  DataModule1->WriteQuery->Close();
  DataModule1->IdentyQuery->Close();
  Application->MessageBoxA("Ошибка записи в базу данных!", "Ошибка", MB_OK+MB_ICONSTOP);
  Abort();
 }


Возможна ли при таком коде ситуация, что между
DataModule1->WriteQuery->ExecSQL();
и
DataModule1->IdentyQuery->Open(); 

Другой пользователь вставит запись в additions, и я получу некорректный id, или пока  не сработает 
DataModule1->ADOConnection1->CommitTrans(); 
состояние базы, видимое моему текущему пользователю, остается неизменным?

Это сообщение отредактировал(а) Кнопа - 7.2.2007, 11:41
PM MAIL   Вверх
Anikmar
Дата 7.2.2007, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 59



В рамках транзакции все будет правильно.
PM MAIL ICQ   Вверх
Кнопа
Дата 7.2.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 1.2.2007
Где: Москва

Репутация: нет
Всего: нет



Anikmar
Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0680 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.