Страница 1 из 1

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

Добавлено: 30 май 2006, 11:50
}{unter
В базе на 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)
Почему такие глюки происходят? Может кто сталкивался или подскажет путное, а то дело не терпит надо что-то делать. Причем попробовал создать новую таблицу в этой же базе. И в этой таблице всё без проблем добавляется, редактируется,...

Добавлено: 30 май 2006, 12:48
kdv
www.ibase.ru/devinfo/ibrusfaq.htm

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

Добавлено: 30 май 2006, 15:29
}{unter
kdv писал(а):www.ibase.ru/devinfo/ibrusfaq.htm

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

Добавлено: 31 май 2006, 12:00
}{unter
В продолжении темы. Требуется изменить длину поля 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;
Или я совсем неправильно делаю?

Добавлено: 31 май 2006, 12:57
dimitr
воткни коммит после каждого альтера