выдает ошибку Update Failed

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Vior
Сообщения: 9
Зарегистрирован: 08 апр 2006, 20:51

выдает ошибку Update Failed

Сообщение Vior » 08 апр 2006, 20:59

При создании новой записи, заполнения полей и потверждения (post), если затем попытаться в этой же транзакции изменить значение какого-либо поля у новой записи, при post сервер выдает Update Failed. Возможно так и должно быть, я раньше не замечал. Сервер Fb 1.5.3, OS - XP SP2, клиент на дельфи. Спасибо

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 09 апр 2006, 01:20

ошибка в приложении. update failed кстати, часто возникает если у таблицы нет первичного ключа - и RowsAffected после операции возвращает число обновленных записей <> 1.
Так что, ищи проблему в программе. Ни сервер, ни "клиент" тут ни при чем.

Vior
Сообщения: 9
Зарегистрирован: 08 апр 2006, 20:51

Сообщение Vior » 09 апр 2006, 20:42

Попробовал тоже самое проделать в IBConsole, результат таков. После создания новой записи и потверждения, я изменяю одно из полей и делаю commit & refresh. ошибки не выдает, но значение в поле заменяется на первоначальное. Пока нашел выход в применении Cashed Updates у IBQuery.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 10 апр 2006, 01:27

домыслы и гадание на кофейной гуще.

Vior
Сообщения: 9
Зарегистрирован: 08 апр 2006, 20:51

Сообщение Vior » 10 апр 2006, 23:55

IBConsole и IBAdmin действуют в данной ситуации одинаково. т.е. я как понял изменении значений новой записи (повторяю потвержеденной) в сеане одной транзакции невозможно, сервер возвращает первоначальное. А кроме как гадать мне пока ничего не остается, раньше с такой проблемой не сталкивался, а в доках толком про такой случай не описано. Кто-нибудь попробуйте у себя, и если не трудно сообщите.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 11 апр 2006, 08:15

Что пробовать? Двойное обновление? Так оно работает.
Твои структуры где? Запросы где? Параметры транзакции где? :evil:
Пока сам не признаешься что ты там у себя накосячил, никто и пальцем не пошевелит. [-(

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 11 апр 2006, 08:25

я как понял изменении значений новой записи (повторяю потвержеденной) в сеане одной транзакции невозможно, сервер возвращает первоначальное.
муть какая-то, что невозможно?
insert
update
commit?
или
insert
commit
update ?

Дмитрий тебе правильно сказал.
а в доках толком про такой случай не описано.
какой, нафиг, случай???
Кто-нибудь попробуйте у себя, и если не трудно сообщите.
что пробовать? испробовались уже, и так и сяк. у нас все работает, а у тебя - нет.

Vior
Сообщения: 9
Зарегистрирован: 08 апр 2006, 20:51

Сообщение Vior » 11 апр 2006, 22:15

Да для примера я брал простой запрос Select * from table_1, а table_1 состоит из 2-х полей ID(int), NAME(Varchar).
Короче делаю
insert into table_1 (ID, NAME)
values (1, "fff")
затем
update table_1
set
NAME = "ddd"
where
ID = 1

затем
commitи при Select * from table_1, получаю значение NAME_1 = "fff".
Теперь надеюсь понятно, а ошибка Update failed вылетает только при запуске проекта в дельфи.
Мне не понятно я кого-то напрягаю своим вопросом? Извините, если я неправильно вопрос поставил, или может проблема в том. что меня неправильно понимают!
Последний раз редактировалось Vior 11 апр 2006, 23:45, всего редактировалось 2 раза.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 11 апр 2006, 22:27

update ДРУГОЙ таблицы, включая обновление ДРУГОГО столбца - это шутка, или описка, или так оно на самом деле?
Мне не понятно я кого-то напрягаю своим вопросом? Извините, если я неправильно вопрос поставил, или может проблема в том. что меня неправильно понимают!
вот этим сообщением надо было "открыть вопрос". а не затеивать тут эпистолярный жанр :)

итак. приведенный запрос update - это лажа, или так он и выглядит на самом деле? Если первое, то исправляйся, если второе - то непонятно в чем вопрос. Запись вставляем в одну таблицу, обновляем запись в другой таблице...

p.s. кроме того, у тебя первый диалект? не советую продолжать обрамлять строковые константы двойными кавычками. Иначе в третий диалект будет тяжело переходить.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 11 апр 2006, 22:42

если TB_VX - это view, то давай его текст, и есть ли на нем триггеры.

Vior
Сообщения: 9
Зарегистрирован: 08 апр 2006, 20:51

Сообщение Vior » 11 апр 2006, 23:43

Я перепутал (копировал текст) не TB_VX, а table_1, уже исправил. Диалект 3 кавычки в тексте только для данного форума, не стоит искать ошибки в моих знаках препинания, не первый год занимаюсь, просто не знаком со стилем общения данного форума. Для меня проблема в том, что сейчас я нахожусь в очень далеке от места где раньше я писал базы, и на новом месте есть комп, на котором я решил написать маленькую базу, но столкнулся с такой ерундой.
Я уже говорил, что пробовал также подобное в не мною написанных прогах, IBconsole (идет в комплекте с InterBase_WI-V6.0.1-server), редактирование записей таблицы(Properties for: table_1), без применения Interactive SQL и также IBAdmin(www.sqlly.com) при тех же условиях.

Vior
Сообщения: 9
Зарегистрирован: 08 апр 2006, 20:51

Сообщение Vior » 11 апр 2006, 23:49

kdv писал(а):если TB_VX - это view, то давай его текст, и есть ли на нем триггеры.
Что-то не понял про триггер на вью, разве он бывает?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 12 апр 2006, 00:21

не стоит искать ошибки в моих знаках препинания, не первый год занимаюсь
с этим поосторожнее.
Что-то не понял про триггер на вью, разве он бывает?
см. предыдущую квоту. триггер на view - бывает. во всех версиях IB/FB.

Фиг с этим, неважно, воспроизвожу твой тест в IBExpert:

insert into x (id, name) values (100, 'fff')
запись вставлена, ibexpert перед insert стартует транзакцию, не завершает ее.
update x
set name = 'ddd'
where id = 100

ibexpert пишет, что 1 запись обновлена. id - первичный ключ.
делаем select * from x - показывается 100, ddd
делаем commit, опять select - показывается 100, ddd.

Теперь про IBConsole. Я, конечно, могу достать ее из дистра IB 6.0. Могу из 6.5, 7.0, 7.1, 7.5.. Только вот ЗАЧЕМ?
Особенно если в исходном вопросе шла речь "про клиента на Delphi".
Тебе и в Дельфях проверить? Я тебе гарантирую - будет тот же самый результат (см. выше).

Не поленился, проверил в IBConsole от 07.06.2001 (версия 1.0.1.334). Тот же самый результат - ошибок нет, после update все меняется, после commit transaction остается то, что было сделано update-ом.
То есть все работает нормально, как положено.
Что будем делать? искать первичный ключ у таблицы TABLE_1 ? разбираться с транзакциями, и откуда ты делаешь update и select?

Vior
Сообщения: 9
Зарегистрирован: 08 апр 2006, 20:51

Сообщение Vior » 12 апр 2006, 06:41

Ну так и я прекрасно понимаю, что должно все сохраняться, ведь никогда раньше не сталкивался, и что проблема в каких-то установках на компьютере. Пробовал ставить IB 6.0, Firebird 1.5.2, Firebird 1.5.3, Firebird 2.0, пробовал устанавливать и на второй имеющийся у меня комп (они копия друг-друга Dell latitude D510). А IBConsole и IBadmin я использовал, так как думал проблема из-за корявого InterbaseExpress, который в дельфи6.
Вот теперь после вашей проверки попробую удалять с компа по очереди программы, может какая-нибудь системная служба мешает, или в конце концов винду переставлю.
Спасибо

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 12 апр 2006, 08:32

В-общем, задействовал я хрустальный шар и вижу: PK назначается на сервере, в приложении используется TIBTable. Поэтому запись вставляется, но PK на клиенте == NULL и последующий UPDATE не проходит.
Вот из-за таких "не первый год занимающихся" и происходят "Жертвы тиража".

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 12 апр 2006, 10:29

Вот теперь после вашей проверки попробую удалять с компа по очереди программы, может какая-нибудь системная служба мешает, или в конце концов винду переставлю.
полная чушь, какая системная служба может МЕШАТЬ в этой ситуации?

Кстати, метаданных (полной структуры таблицы) мы так и не дождались.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 12 апр 2006, 10:56

И не дождешься. Там скорее всего действительно или нет PK вообще или он безусловно назначается триггером в результате чего найти запись впоследствии невозможно.

Vior
Сообщения: 9
Зарегистрирован: 08 апр 2006, 20:51

Сообщение Vior » 12 апр 2006, 22:10

Да я сейчас пробую простую таблицу с двумя полями, с primary key (ID), безвсяких триггеров. В пробной базе только одна таблица.
CREATE TABLE TABLE_1 (
ID INTEGER NOT NULL,
NAME VARCHAR(20) NOT NULL,
CONSTRAINT TABLE_1_PK PRIMARY KEY (ID)
);

Нет проблемы в самой базе, есть проблема в окружающих(т.е. также установленных на компе) сервер программах. Поэтому и придется мне удалять по очереди все программы, а что-бы этого не-делать и спрашиваю на вашем форуме, может у кого-нибудь есть опыт с конфликтами Interbase и сторонних программ. Может перечислить здесь все сервисы? Зря вы про чушь, я перед тем как сюда написать, пробовал, кроме ранее пречисленного, и все(которые можно) процессы диспетчером задач завершать, и службы(которые можно), останавливать.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 апр 2006, 10:14

Да я сейчас пробую простую таблицу
попробовал? каков результат?
есть опыт с конфликтами Interbase и сторонних программ
есть опыт. НИКАКИХ конфликтов такого уровня принципиально НЕТ И БЫТЬ НЕ МОЖЕТ. никакие сервисы не могут повлиять на работу транзакций или sql-операторов. Странно, что приходится это объяснять.

Vior
Сообщения: 9
Зарегистрирован: 08 апр 2006, 20:51

Сообщение Vior » 13 апр 2006, 19:14

Да после первого поста я только об этой таблице писал (простая table_1), все проверки проводились на этой таблице, в базе кроме которой ничего больше нет, база пересоздавалась неонократно, пробовал на двух компах. Клиент был IBAdmin & BConsole. Не моя программа.
Короче ничего путного я не получил, одна критика, хотя теперь уже подробно описана моя ситуация, то наверно есть смысл закрыть тему, Если я найду причину, то сообщу. Всем спасибо, извините если отнял много времени.

Ответить