Добавляю в таблицу запись и хочу получить ключевой индекс (счетчик) этой записи.
Раньше пользовался такой конструкцией:
m_pTable->m_strFilter.Empty();
m_pTable->AddNew();
// заполняю поля m_pTable
m_pTable->m_Name = sName;
m_pTable->m_Code = nCode;
// etc...
// обновляю таблицу
if(m_pTable->CanUpdate())
m_pTable->Update();
// выбираю последнюю добавленную запись?
m_pTable->Requery();
m_pTable->MoveLast();
m_LastIndex = m_pTable->m_Index; // индекс
Вдруг оказалось что выбирается НЕ ТА запись!
Варианты:
1. я все это время делал переход на последнюю добавленную запись неверно — а как тогда верно?
2. это глюк — как его обойти?
Здравствуйте, 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)
Здравствуйте, shelkovnikov, Вы писали:
S>переход на последнюю запись не верен, когда:
S>1 другие поьзователи (или потоки вашего приложения) паралельно добавли еще записи
S>2 в запросе не указана сортировка по ключу
S>3 ключ не растет монотонно
S>...
ключ действительно не растет монотонно. параллельных запросов и сортировки нет.
S>если в таблице указано identity и драйвер ODBC поддердживает такое поведение, то после обнволения (m_pTable->Update()
рекордсета с серверным динамическим курсором, текущая запись сохраняется и в ее ПК уже правильное значение (то есть не нужны Requery и MoveLast)
такого поведения нет. после обновления там оказывается тот ключ который был до этого.
про это можно поподробнее?