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

Вниз

Как отследить ошибку   Найти похожие ветки 

 
dougine   (2003-06-30 13:49) [0]

Предположим, что в простейшей таблице TABLE1, состоящей из ID и NAME, находится 4 записи с ID=1,2,3,4. Пусть клиент (1) выполняет TADOQuery1.Open с запросом SELECT * FROM TABLE1
В DBGrid отображаются 4 записи. Т.е., клиент получил лок. копию с сервера. Другой пользователь (2) выполняет то же самое, после чего выполняет удаление записи, например, с ID=2. Клиент (1) решает запись с ID=2 тоже удалить. Нажимает кнопку, на сервер отсылается команда DELETE TABLE1 WHERE ID=2 Сервер пишет (в SQL Query Analizer видно) что , 0 rows affected и ничего не делает. У клиента 1 производится TADOQuery.Requery и запись исчезает. Все вроде нормально. Но если клиент (1) решит не удалять запись, а отредактировать ее (с ID=2), то он отсылает команду UPDATE TABLE1 SET FIELD_NAME="www" WHERE ID=2. Сервер, естественно, ее не находит, как обычно (0 rows affected), делается Requery, запись исчезает.. Клиент 1 в ступоре - только что нажал "Сохранить" - а запись исчезла.
Вопрос: как это дело отследить. Пробовал все, и типы курсоров менял, и CursorLocation - ничего не помогло.


 
Johnmen ©   (2003-06-30 13:58) [1]

>...нажал "Сохранить" - а запись исчезла.

Вот и отследил...:)

>Клиент 1 в ступоре...

Слишком впечатлительный, однако. Да и забыл, что он не один...

Чем плох анализ rows affected ?


 
dougine   (2003-06-30 14:56) [2]

to Johnmen:
можно немного подробнее про row affected. Где прицепиться и т.д.
в help-е никак не могу разобраться..


 
Johnmen ©   (2003-06-30 15:08) [3]

>dougine (30.06.03 14:56)

ADOQuery1.RowsAffected
сколько записей было удалено/изменено данным запросом.


 
dougine   (2003-06-30 15:27) [4]

>Johnmen. Понятно. Только я использую для выполнения команды UPDATE, DELETE или INSERT компонент TADOCommand один на всех, команда формируется динамически в зависимости от используемой таблицы, а для показа - отдельные TADOQuery. Их очевидно надо как-то связать. Только при выполнении ADOQuery1.Recordset:=ADOCommand.Execute вываливает ошибку, что ADOQuery1 не открыт, хотя он перед выполнением этого оператора был открыт. Где грабли?


 
Johnmen ©   (2003-06-30 15:43) [5]

По-моему, там в хелпе так
ADODataSet1.Recordset := ADOCommand1.Execute;
Улови разницу между просто запросом и надором данных...:)


 
dougine   (2003-06-30 15:47) [6]

>Johnmen.
Согласен, ступил, только еще начал разбираться в SQL. Но все-таки, как выцепить RowAffected у Query, если исполняется Command.



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

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

Наверх




Память: 0.48 MB
Время: 0.013 c
14-78045
Dmitriy O.
2003-07-08 15:57
2003.07.24
Куда лучше прописывать настройки.


3-77785
Котяра
2003-07-01 14:01
2003.07.24
Конвертация даты в строку на SQL сервере


6-78037
MegaVolt
2003-05-14 12:38
2003.07.24
Как закрыть сеанс после работы в локальной сети?


1-77947
Micke
2003-07-10 18:37
2003.07.24
Запуск нескольких копий приложения средствами Delphi


3-77718
Zigs
2003-06-30 12:06
2003.07.24
Проблема с точностью значения на клиенте ...