Здравствуйте, 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)