Форум: "Базы";
Текущий архив: 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. Вроде пока все корректно удаляется и редактируется. Завтра с новыми силами за работу. Спасибо еще раз ВСЕМ за помощь. До новых ошибок !
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.006 c