Не работает обновление полей - выдаётся ошибка!!!

Запросы, планы, оптимизация запросов, ...

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

Ответить
}{unter
Сообщения: 3
Зарегистрирован: 30 май 2006, 11:25

Не работает обновление полей - выдаётся ошибка!!!

Сообщение }{unter » 30 май 2006, 11:50

В базе на FireBird 1.5 есть 30 таблиц. Для примера приведу структуру одной из них:

Код: Выделить всё

SET NAMES WIN1251;

CREATE TABLE SPISANIE (
    SUMMA_ZA_TO  DOUBLE PRECISION,
    SUMMA_POST   DOUBLE PRECISION,
    MONTH_YEAR   VARCHAR(30) NOT NULL COLLATE PXW_CYRL,
    ID_AB        CHAR(12) NOT NULL COLLATE PXW_CYRL,
    ASSS         INTEGER NOT NULL
);
ASSS я добавил для эксперимента.

При попытке исправить значение в ID_AB или в ASSS происходит ошибка:

Error Message:
----------------------------------------
Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
Cannot transliterate character between character sets.


Но добавить новые строки данных можно без проблем!!!
Работаю с базой под SYSDBA в IBExpert v.2006.05.24 (http://www.ibexpert.com/rus)
Почему такие глюки происходят? Может кто сталкивался или подскажет путное, а то дело не терпит надо что-то делать. Причем попробовал создать новую таблицу в этой же базе. И в этой таблице всё без проблем добавляется, редактируется,...

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

Сообщение kdv » 30 май 2006, 12:48

www.ibase.ru/devinfo/ibrusfaq.htm

если короче - укажи IBExpert-у в настройках алиаса БД правильный чарсет (win1251).

}{unter
Сообщения: 3
Зарегистрирован: 30 май 2006, 11:25

Сообщение }{unter » 30 май 2006, 15:29

kdv писал(а):www.ibase.ru/devinfo/ibrusfaq.htm

если короче - укажи IBExpert-у в настройках алиаса БД правильный чарсет (win1251).
Спасибо! Это помогло :)

}{unter
Сообщения: 3
Зарегистрирован: 30 май 2006, 11:25

Сообщение }{unter » 31 май 2006, 12:00

В продолжении темы. Требуется изменить длину поля ID_AB, сохранив данные. Для этого загоняю в делфийский компонент IBScript следующий скрипт:

Код: Выделить всё

ALTER TABLE SPISANIE ADD Temp VARCHAR(11); 
UPDATE SPISANIE SET Temp=ID_AB;
ALTER TABLE SPISANIE DROP ID_AB; 
ALTER TABLE SPISANIE ADD ID_AB CHAR(12); 
UPDATE SPISANIE SET ID_AB=Temp; 
ALTER TABLE SPISANIE DROP Temp;
Но после отработки получаем ID_AB CHAR(12) с потеренными данными. Почему-то не работает строчка UPDATE SPISANIE SET Temp=ID_AB;
Или я совсем неправильно делаю?

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 31 май 2006, 12:57

воткни коммит после каждого альтера

Ответить