Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];




Вниз

Ошибка при удалении 


VAleksey   (2002-04-03 10:16) [0]

Привет всем. Для доступа к Оркалу использую ODAC. При
удалении записи возникает ошибка :
Update Failed: Found 0 records
С чем это иожет быть связано ?



Lusha   (2002-04-03 10:24) [1]

Я думаю с тем, что критериям в условии WHERE оператора UPDATE не удовлетворяет ни одна запись таблицы...



Johnmen   (2002-04-03 10:30) [2]

>Lusha © : Вообще говоря, это не должно приводить к.-л. ошибке...



VAleksey   (2002-04-03 10:37) [3]

Причем сдесь Update если я говорю про Delete



Lusha   (2002-04-03 10:42) [4]

Ну, извините. Невнимательно прочитал вопрос. Зато очень внимательно прочитал сообщение об ошибке :)



Johnmen   (2002-04-03 10:43) [5]

Надобно бы привести тексту немного... :)



VAleksey   (2002-04-03 10:44) [6]

Я использую ТOraTable в этом случае .
Так почему она может возникнуть ?



Alexandr   (2002-04-03 10:44) [7]

ага, просто запрос послан на сервер, и по результату запроса delete было удалено 0 записей, а не одна, как ты и ODAC думали. О чем тебя и известили.



VAleksey   (2002-04-03 10:45) [8]

Это я как раз понимаю. Из - за чего такая ситуация может возникнуть ????????????????????????



VAleksey   (2002-04-03 10:47) [9]

>Johnmen © Какого текста ?? tbChair.Delete; - это что-ли ?
Или чего нибудь еще ?



Alexandr   (2002-04-03 10:49) [10]

повторяю для тех кто в бронепоезде.

ты серверу через ODAC сказал "удали запись", ODAC послала запрос на удаление на сервер, а сервер ответил, что удалил 0 записей, вот ODAC и подумал "странно все это..."

А возникта такая ситуация из-за тебя :)



Lusha   (2002-04-03 10:53) [11]

Не мешало бы посмотреть запрос, который на сервер приходит. Там и ответ на Ваш вопрос...



Johnmen   (2002-04-03 11:05) [12]

>VAleksey : А про текст я говорил потому, что из твоего вопроса не видно, что же и как же ты удаляешь : запись из НД (и далее происходит...Alexandr © (03.04.02 10:44)) или напрямую DELETE FROM ...



Yuvich   (2002-04-03 11:20) [13]

Все очень просто - фантомная запись.
Т.е. в буфере запись есть и ее ты пытаешься удалить, а в базе ее нет - вот и выдается ошибка.

Лечится - Refresh или RefreshRecord перед удалением, чтобы буфер обновился. Refresh все-таки хуже, т.к. потом оказываешься в начале буфера, а не на удаляемой записи.



VAleksey   (2002-04-03 11:36) [14]

Шишь с маслом. При закрытии таблицы и открытии ее снова эта , так называемая "буферная" запись тутаньки. И никуда не пропадает. Как это сочетается с "фантомной записью" ?

Небольшие комментарии :
Таблица Chairs
Поле NameChair Char(20) Primary Key
FullNameChair Char(80)

На запись, которую я пытаюсь удалить, нет ссылок в дочерних таблицах.



VAleksey   (2002-04-03 11:39) [15]

RefreshRecord не помог



VAleksey   (2002-04-04 06:33) [16]

Ну спасибо. Ну прямо помогли !
>Alexandr © Я не просил перевести текст ошибки которую мне сервер вернул. Я спросил из-за чего эта ситуация возникнуть могла.
>Alexandr © >А возникта такая ситуация из-за тебя :)
Ежу понятно из-за кого. Вопрос-то ведь не в этом. Я так понимаю мы здесь для того и сидим чтобы помогать друг другу, а не говорить что в своих ошибках человек сам виноват.
>Lusha © Как посмотреть запрос который OraTable на сервер отправляет ?



roottim   (2002-04-04 08:55) [17]

а что говорит oratable.isEmpty ?



VAleksey   (2002-04-04 09:19) [18]

false



Johnmen   (2002-04-04 09:36) [19]

>VAleksey : Если ты действительно заинтересован в помощи, а не просто побазарить, приводи подробности : какой НД, как получен, как удаляешь, структура НД и соотв.таблицы и пр.



roottim   (2002-04-04 09:45) [20]

еще раз чтобы ситуация была ясна!
- картеж существует и в кэше и в базе!
- табл соотв не пуста
- текущая запись ни с чем не связана
- и это только на данной таблице (в других такого нет?)

и вот что... как-то наковырял еще сырую версию 3.5 там глюков была куча...
какую используеш ты?



VAleksey   (2002-04-04 10:29) [21]

>roottim ODAC4
> All
НД : TOraTable - положен в модуль данных. Для него созданы компоненты поля. Он отображается в дб гриде, но это не важно так как такая же ошибка возникает при использовании собственного ODAC редактора таблицы.
Соединение настраивается ч/з TOraSession.
Дочерние таблицы вообще ВСЕ пустые !!!!!!!!!!!!!
Структура
NameChair Char(20) Primary Key
FullNameChair Char(80)
всего два поля.
Есть еще такой же глюк в таблице с аналогичной структурой



Johnny Smith   (2002-04-04 10:45) [22]

2VAlexey: а почему бы тебе не попробовать удалять записи с помощью обычного SQL (пользуясь той же ODAC-овской библиотекой)? Слишком примитивно, что-ли? Ну, может быть... Зато сработает гораздо быстрее и ПРАВИЛЬНО. А то КАК удаляет их Table записи, ты точно знаешь? Я думаю, проблема в том, что он генерит запрос типа "DELETE FROM CHAIR WHERE NameChair=""+Column1+"" and FullNameChair=""+Column2+""", где Column1 и Column2 - это значения соответствующих столбцов в удаляемой строке.
НО! Эти значения на этапе первоначального запроса к ORACLE можно получить и как "Вася" и как "Вася " (зависит от того, как реализована соответствующая функция OCI для Table), где пустыми пробелами будет дополнено реальное содержимое столбца в соответствии с его типом (например, Varchar2(20)). И тогда в генерируемый запрос будет ВСТАВЛЕНА СТРОКА С ПРОБЕЛАМИ, и ORACLE, соответственно, не найдя таковой в таблице, вернет означенную ошибку.



Johnmen   (2002-04-04 10:56) [23]

>Johnny Smith © : И что, Оракул действительно выдает ошибку, если при выполнении запроса DELETE ... WHERE ... ни одна запись не удовлетворяет условию ?



roottim   (2002-04-04 10:58) [24]

>VAleksey
прошу прощения... где это вы ODAC 4.0 раздобыли, если последня вышедшая у них версия это 3.60



Johnny Smith   (2002-04-04 11:12) [25]

2Johnmen Пардон, конечно, не Оракл, а ODAC!



Lusha   (2002-04-04 11:16) [26]

>Johnmen ©
Oracle, разумеется, не выдаст ошибки. А вот ODAC сгенерирует... Он же просил удалить ТЕКУЩУЮ запись, а этот долбанный Oracle говорит ему, что таких не записей нет...



VAleksey   (2002-04-04 11:22) [27]

Спасиба Johnny Smith ©. Вразумительное объяснение. Все правильно
опцию TrimFixedChar в false все удаляется. Не подскажешь для CHAR(8) строка "ИУС" будет "ИУС" или "ИУС " ?

> roottim Прошу прощения опечатка (посмотрел на название exe файла )
на самом деле ( к сожалению ) именно 3.50 если можешь вышли на мыло 3.60 или ссылочку кинь плиииз. Или можь к нему заплатки есть ?




VAleksey   (2002-04-04 11:24) [28]

Еще вопрос : RowId присутствует в любой таблице или для него надо поле создавать (попрошу без сарказма. с Оракл просто работаю впервые.)



Johnny Smith   (2002-04-04 11:47) [29]

RowId есть в любой таблице.
Насчет "ИУС" для CHAR(8) однозначно сказать не могу, но ведь тип VarChar и отличается от CHAR тем, что последний имеет фиксированную длину и возможно (сам не пробовал), заполняет свободное место пробелами.



roottim   (2002-04-04 11:54) [30]

это точно!... и лучше использовать varchar2.. так говорит оракл!
а 3.6 я не искал.. да он вроде как под д6... 3.5 пытался использовать... только пошли от него баги.. толи левый он совсем толи сырой просто... сам использую 3.3 ничего плохого не замечал!



XCB   (2002-04-04 12:00) [31]

VAleksey: Rowid он всегда есть... коцни ты запись своим sql...
могу порекомендовать NCOCI не плохо работающие компоненты...



VAleksey   (2002-04-04 12:02) [32]

> roottim Вышли 3.3
Окей всем спасибо за помощь. Особенно тем кто действительно давал дельные советы и внимательно читал вопрос (Johnny Smith © & roottim ).



VAleksey   (2002-04-04 12:16) [33]

Спасибо, что намекнули на VARCHAR2. Вроде пока все корректно удаляется и редактируется. Завтра с новыми силами за работу. Спасибо еще раз ВСЕМ за помощь. До новых ошибок !




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.77 MB
Время: 0.024 c
1-80840           Jaxtor                2002-04-11 11:35  2002.04.25  
Закрытие формы MDIChild программным методом


3-80807           ser_ker               2002-03-04 15:37  2002.04.25  
Как передать IBStoredProc через параметр типа Blob содержимое файла на диске ?


1-80974           volodya_              2002-04-12 12:34  2002.04.25  
PopupMenu


3-80761           alexandervasjuk       2002-04-03 14:29  2002.04.25  
IBDataSet: Редакция в гриде


3-80790           Artem2                2002-04-05 07:59  2002.04.25  
DBLookUpComboBox и свои значения