Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Вопрос по @@IDENTITY


Автор: Кнопа 7.2.2007, 11:39
Всем привет!
Меня интересует вот такая тонкость. При работе в многопользовательском режиме получу ли я корректный 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(); 
состояние базы, видимое моему текущему пользователю, остается неизменным?

Автор: Anikmar 7.2.2007, 13:58
В рамках транзакции все будет правильно.

Автор: Кнопа 7.2.2007, 14:20
Anikmar, 
Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)