Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.017 c
1-27595
Fasy
2003-09-27 05:56
2003.10.09
размер папки


1-27594
daaap
2003-09-29 09:49
2003.10.09
Создание компонент


1-27463
evgeniy33
2003-09-26 10:43
2003.10.09
Удаление каталога


1-27470
shyko
2003-09-27 04:50
2003.10.09
Интерфейс как в Delphi


1-27475
Сергей Ж.
2003-09-27 00:02
2003.10.09
Random элементов массива.




   Наверх