добавлние записей в гриде при наличии identity поля и cachedupdates= true

Обсуждение возникших проблем, предложений и ошибок SDAC компонентов
Ответить
maratsh
Сообщения: 2
Зарегистрирован: Пн 21 янв 2013 11:00

добавлние записей в гриде при наличии identity поля и cachedupdates= true

Сообщение maratsh » Пн 21 янв 2013 11:10

Использую компонент TMSQuery для редактирования таблицы. Записи на сервер отправляю после ввода нескольких записей, т.е. CachedUpdates = True
Таблица имеет поле Identity. Запросы встави/изменения/удланиея отлично генерируются, все работает.
Проблема в том, что при добавлени новых записей в гриде, грид не может отличить друг от друга новые записи, т.к. их автоинкрементное поле еще не заполнено.
Можно конечно создавать костыли типа дополнтельного поля с вычисляемым значением, и его в гриде указать как ключ.
Есть ли какое-либо другое, стандартное для TMCQuery, решение? Неужели архитектура этих компонентов не прорабатывалась на такой случай использования?

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: добавлние записей в гриде при наличии identity поля и cachedupdates= true

Сообщение Alexp » Пн 21 янв 2013 13:11

Добрый день,

Технология CachedUpdates предназначена для локальной работы с данными без постоянных обращений к серверу. Технология автоинкрементных полей в SQL Server сделана таким образом, что новое значение автоинкрементного поля получается только при реальном вызове операции insert на сервере, поэтому получить новые значения для автоинкрементных полей в режиме CachedUpdates не получится.
В качестве замены режима CachedUpdates вы можете использовать механизм транзакций, в этом случае автоинкрементные поля будут корректно заполняться при добавлении каждой новой записи, а непосредственное сохранение данных на сервере будет происходить только после явного вызова метода Commit транзакции.
Такое поведение обусловлено спецификой самого SQL Server и мы не можем поменять это поведение на уровне наших компонент.

maratsh
Сообщения: 2
Зарегистрирован: Пн 21 янв 2013 11:00

Re: добавлние записей в гриде при наличии identity поля и cachedupdates= true

Сообщение maratsh » Пн 21 янв 2013 15:08

Спасибо большое за ответ.
Я предполагал, что можно было бы использовать какой-то внутренние скрытые идентификаторы созданных на клиенте записей, но отличных от идентификаторов уже скачанных с сервера записей.
В принципе оказалось очень просто, я очистил у компонета TMSQuery свойство KeyFields, и у грида такое же свойство, и грид теперь четко отличает записи, видиомо по подобному внутреннему идентификатору.

Ответить