Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
3-27316
viktor
2003-09-15 19:32
2003.10.09
Удаление записи в справочнике


1-27573
ss300
2003-09-29 14:27
2003.10.09
Вставка смайлика в борду чата


14-27683
Alexia2
2003-09-22 10:40
2003.10.09
Что-то не получается!


3-27329
Navi
2003-09-21 08:29
2003.10.09
Как сносить Interbase?


3-27317
Zhouck
2003-09-17 17:40
2003.10.09
Файл конфигурации - переменное число параметров





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский