ODBC выбор только-что добавленной записи
От: x-code  
Дата: 04.07.07 07:20
Оценка:
Добавляю в таблицу запись и хочу получить ключевой индекс (счетчик) этой записи.
Раньше пользовался такой конструкцией:
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. это глюк — как его обойти?
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)
Re[2]: ODBC выбор только-что добавленной записи
От: x-code  
Дата: 04.07.07 08:30
Оценка:
Здравствуйте, shelkovnikov, Вы писали:

S>переход на последнюю запись не верен, когда:

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

ключ действительно не растет монотонно. параллельных запросов и сортировки нет.

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


такого поведения нет. после обновления там оказывается тот ключ который был до этого.
про это можно поподробнее?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.