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

Вниз

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

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

Наверх





Память: 0.45 MB
Время: 0.014 c
1-77865
Checist [root]
2003-07-13 17:53
2003.07.24
DrawGrid


1-77855
Navi
2003-07-12 08:57
2003.07.24
CharSet


6-78035
SkyRanger
2003-05-17 08:07
2003.07.24
Сокеты Win32


3-77798
SkyWalker
2003-07-03 10:01
2003.07.24
IB + ISAPI = проблема


3-77743
Dorosh
2003-07-01 10:04
2003.07.24
Вызов функции из базы Access





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