Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.09;
Скачать: CL | DM;

Вниз

Update после Insert в TClientDataset   Найти похожие ветки 

 
Delf ©   (2003-09-18 12:20) [0]

Есть такая ситуация:База лежит на MS SQL Server
На форме лежит DBGrid она связана с ClientDataset а он посредством DataSetProvider связан с ADODataSet
ADODataSet.CommandText="select * from StoreNeed where GrpID=4556"
Когда юзер вставляет новую запись (Поле GrpID=4556 ) заполняет поля и жмет ClientDataset.ApplyUpdates(-1) то все проходит гладко :
на сервере в таблицу StoreNeed вставляется новая запись.
Но если юзер в таблице(на форме) изменит значения какого-нибуть поля и вызовит ClientDataset.ApplyUpdates(-1) то происходит ошибка "Record not found or change by another user" и соответственно эта запись в таблице на сервере не изменяется
Подскажите как быть в таком случае
P.S Та же программа прекрасно работает на Sybase а при переводе на MSSQL виходит вот такая ерунда


 
Nikolay M. ©   (2003-09-18 12:27) [1]

Тригер на update у таблицы StoreNeed имеется?


 
Delf ©   (2003-09-18 14:01) [2]


> Nikolay M. © (18.09.03 12:27) [1]
> Тригер на update у таблицы StoreNeed имеется?


Нету тригера

Если просто изменить запись в таблице и вызвать ClientDataset.ApplyUpdates(-1) то все работает
А если сначала вставить запись, вызвать ClientDataset.ApplyUpdates(-1), а потом эту же запись изменить и вызвать ClientDataset.ApplyUpdates(-1) то происходит ошибка
"Record not found or change by another user"


 
Nikolay M. ©   (2003-09-18 14:05) [3]

Угу. Небось ключевое поле - Identity? Тогда происходит следующее: ты вставляешь запись, ID генерится MS SQL-ем, но на клиента он не возвращается (пока не будет сделано cds.Active:=False; cds.Active:=True). Естественно, провайдер не может выполнить запрос на изменение
UPDATE StoreNeed SET .... WHERE ID=:ID
Выходов из такой ситации несколько. Самый топорный и самый простой в реализации - переоткрыть CDS после внесения новой записи, но это изврат, конечно.


 
AlexAlex   (2003-09-18 14:14) [4]

Аналогичная ситуация была при работе в связке BDE-Informix. Когда сервер informix перевели с PC на Sun, то в Database Desktop и в сохранившихся от перехода с Paradox TTable-ах перестало работать обновление и удаление в таблицах с данными типа double. Оказалось, что PC и Sun по-разному переводят одно и то-же число с плав. точкой в стоку. Расходжение минимально, но в автоматически генерируемых BDE SQL стоит знак "=". Database Desktop анализирует число обновленных записей (а из-за несоблюдения точного равенства оно равно 0) и выдает сообщение "Record not found or change by another user". Двоичное представление чисел обсолютно одинаково (с учетом различия порядка байт)- проверяли специально. Для разрешения ситуации в TTable поставили вместо UpdateWhereAll UpdateKeyOnly, а редактировать данные стали SQL. Здесь, видимо, то же самое.



Страницы: 1 вся ветка

Текущий архив: 2003.10.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
14-27673
Dark Elf
2003-09-22 13:31
2003.10.09
Открытие Chm-файла


14-27705
Aristarh
2003-09-21 20:32
2003.10.09
Самоучитель по Access


1-27568
Alex Shulg
2003-09-26 18:09
2003.10.09
Отображение Splash-формы!


3-27409
Ann
2003-09-18 11:08
2003.10.09
Paradox


7-27759
Buffoon
2003-07-24 00:04
2003.10.09
Синий экран в windows XP