Re: ODBC выбор только-что добавленной записи
От: shelkovnikov Россия  
Дата: 04.07.07 07:53
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Добавляю в таблицу запись и хочу получить ключевой индекс (счетчик) этой записи.

XC>Раньше пользовался такой конструкцией:
XC>
XC>m_pTable->m_strFilter.Empty();
XC>m_pTable->AddNew();
XC>// заполняю поля m_pTable
XC>m_pTable->m_Name = sName;
XC>m_pTable->m_Code = nCode; 
XC>// etc...
XC>// обновляю таблицу
XC>if(m_pTable->CanUpdate())
XC>    m_pTable->Update();

XC>// выбираю последнюю добавленную запись? 
XC>m_pTable->Requery();
XC>m_pTable->MoveLast();
XC>m_LastIndex = m_pTable->m_Index; // индекс
XC>

XC>Вдруг оказалось что выбирается НЕ ТА запись!
XC>Варианты:
XC>1. я все это время делал переход на последнюю добавленную запись неверно — а как тогда верно?
XC>2. это глюк — как его обойти?

переход на последнюю запись не верен, когда:
1 другие поьзователи (или потоки вашего приложения) паралельно добавли еще записи
2 в запросе не указана сортировка по ключу
3 ключ не растет монотонно
...

если в таблице указано identity и драйвер ODBC поддердживает такое поведение, то после обнволения (m_pTable->Update() рекордсета с серверным динамическим курсором, текущая запись сохраняется и в ее ПК уже правильное значение (то есть не нужны Requery и MoveLast)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.