Главная страница
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.021 c
7-27748
Novenkij
2003-07-27 16:21
2003.10.09
Как узнать объем оперативной памяти ( MB RAM ) ???


14-27676
Zhouck
2003-09-18 11:24
2003.10.09
ГИС , Делфи , Оракл


8-27616
konstantinov
2003-06-04 02:01
2003.10.09
Анимация мимики человеческой речи


14-27732
Biryk
2003-09-12 03:20
2003.10.09
То что есть в вирусах но ножно для мирных целей...


9-27297
com2003
2003-04-03 20:39
2003.10.09
Чисто геометрия