Главная страница
    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.45 MB
Время: 0.008 c
1-27586
Roden
2003-09-29 11:40
2003.10.09
Button в StringGrid


14-27679
kaif
2003-09-09 11:31
2003.10.09
Кони в сенате


1-27542
Viktor Kushnir
2003-09-28 16:39
2003.10.09
Размер надписи.


1-27595
Fasy
2003-09-27 05:56
2003.10.09
размер папки


1-27467
meirman
2003-09-24 17:31
2003.10.09
Schema Object Model





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский