powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Bool -> ?
24 сообщений из 24, страница 1 из 1
Bool -> ?
    #32606878
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго вечера!
Перетащил базу с Accessа на IBase, только встала проблема что делать с boolевскими полями. Datapump загнал их в varchar(1), но в таком виде с ними работать невозможно. Подскажите как лучше поступить? На крайняк как их попроще в shortinteger перевести?
...
Рейтинг: 0 / 0
Bool -> ?
    #32607085
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот в БД сделал свои boolean- поля типа shortint, и теперь жалею- все время забываю, что у меня true- 0 или 1. Лучше уж char(1) - "Y"/"N", сразу ясно.
...
Рейтинг: 0 / 0
Bool -> ?
    #32607090
Фотография AndriyKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FEVДоброго вечера!
Перетащил базу с Accessа на IBase, только встала проблема что делать с boolевскими полями. Datapump загнал их в varchar(1), но в таком виде с ними работать невозможно. Подскажите как лучше поступить?

Уточни версию Interbase. В семерке появился тип поля Boolean.

Код: plaintext
На крайняк как их попроще в shortinteger перевести?

А в каком виде они сейчас в varchar(1) стали выглядеть ? Если, например "0" и "1",
а версия InterBase<7.0, тогда :

Create Domain BooleanD As Integer Default 0 Check (Value In (0,1));
Alter Table SomeTable Add BooleanColumn BooleanD;
Update SomeTable Set BooleanColumn=VarcharColumn;
Alter Table SomeTable Drop VarcharColumn;
...
Рейтинг: 0 / 0
Bool -> ?
    #32607117
Matt Juntunen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Smallint + Check Value(0,1) не подойдет?
...
Рейтинг: 0 / 0
Bool -> ?
    #32607138
Лкшы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если с FIBPlus работаешь, то он тип Integer может понимать как Bool-ево
да и в Блядере или Дельфях 0 - false , все иное - true
тобишь
i=0
if(i) - нафиг

i=1
if(i) - окей!
ShortInt - FIB тупит, или я не знаю настроек. но в грид он мне его как Bool
не дает.
а с Var или просто Char - понятнее в базе, но сложнее в обработке
...
Рейтинг: 0 / 0
Bool -> ?
    #32607379
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBase 7.1

авторА в каком виде они сейчас в varchar(1) стали выглядеть ? Если, например "0" и "1"
В виде "F" и "T". IBase Manager на попытку смены типа поля на boolean даёт ошибку:
Код: plaintext
1.
2.
3.
4.
5.
fmCompile.quCompile:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 5, char -1.
COLLATE.
а SQL Explorer предупреждает, что таблица будет recreate и все данные будут утеряны, чего допустить нельзя.
...
Рейтинг: 0 / 0
Bool -> ?
    #32607413
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно ли поменять тип поля с varchar(1) на integer без создания нового поля? (поле содержит только "1" и "0")?
...
Рейтинг: 0 / 0
Bool -> ?
    #32607433
Фотография VF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так он у тебя на COLLATE ругается, скрипт изменения типа может покажешь?
и вообще, что за COLLATE для типа Boolean, разве он там может быть?
...
Рейтинг: 0 / 0
Bool -> ?
    #32607436
Фотография VF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но всё та4ки экспериментировать лучше на експерементальной БД...
...
Рейтинг: 0 / 0
Bool -> ?
    #32607458
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBase manager генерит такой скрипт:
Код: plaintext
1.
2.
3.
4.
ALTER TABLE AGREGAT
ALTER COLUMN ZAMENA
TYPE
BOOLEAN
COLLATE
Без COLLATE ошибка:
This operation is not defined for system tables.
unsuccessful metadata update.
Cannot change datatype for column ZAMENA from a character type to a non-character type.

Короче, как я понял, вариант только один:
Код: plaintext
1.
2.
Alter Table Agregat Add BooleanColumn BooleanD;
Update Agregat Set BooleanColumn=Zamena;
Alter Table Agregat Drop Zamena;
Или всё-таки можно без создания нового поля?
...
Рейтинг: 0 / 0
Bool -> ?
    #32607869
Фотография VF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я работаю с FB1.5 там нет булевых полей, поэтому не могу ничего сказать толкового, но если устроит вариант с созданием промежуточного поля, то можно и так...
...
Рейтинг: 0 / 0
Bool -> ?
    #32607889
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторя работаю с FB1.5 там нет булевых полей, поэтому не могу ничего сказать толкового, но если устроит вариант с созданием промежуточного поля, то можно и так...
Только тогда встаёт другой вопрос: как потом это промежуточное поле переименовать в прежнее?
...
Рейтинг: 0 / 0
Bool -> ?
    #32607902
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Легко. Прочитав документацию.
...
Рейтинг: 0 / 0
Bool -> ?
    #32608002
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЛегко. Прочитав документацию.
Мимопроходящий , может подскажете команду переименования поля в таблице, а то я что-то не припомню такой в SQL.
...
Рейтинг: 0 / 0
Bool -> ?
    #32608030
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сноб. Мне в западло. Доку читай.
...
Рейтинг: 0 / 0
Bool -> ?
    #32608285
d'Evil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эх-эх, держи пример.
alter table users_mailbox alter column stamp to timemarker
users_mailbox - имя таблицы
stamp - старое имя поля
timemarker - новое имя поля
разумеется на это поле таблицы не должно быть нигде ссылок (см. Dependencies) если есть - убери, потом сделаешь на новое имя
...
Рейтинг: 0 / 0
Bool -> ?
    #32608290
d'Evil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в принципе можно и ручками в ситемных таблицах, но если не знаешь как то минимум - не получится, максимум - запорешь БД.
...
Рейтинг: 0 / 0
Bool -> ?
    #32608304
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 d'Evil
Спасибо. Буду знать.
Но я всё-таки решил воспользоваться преимуществами версии 7.1 и сделал так:
Код: plaintext
1.
2.
3.
4.
update Tbl set Fld = '1' where Fld = 'T';
update Tbl set Fld = '0' where Fld = 'F';
update RDB$RELATION_FIELDS set RDB$FIELD_SOURCE = 'RDB$SYSTEM_FLAG' 
  where (RDB$FIELD_NAME = 'Fld') and (RDB$RELATION_NAME = 'Tbl');
alter table Tbl alter column Fld type boolean;
...
Рейтинг: 0 / 0
Bool -> ?
    #32608352
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FEVupdate RDB$RELATION_FIELDS set RDB$FIELD_SOURCE = 'RDB$SYSTEM_FLAG'
where (RDB$FIELD_NAME = 'Fld') and (RDB$RELATION_NAME = 'Tbl');
А нахрена? Тем болеЕ, что потом делаешь:
Код: plaintext
alter table Tbl alter column Fld type boolean;
...
Рейтинг: 0 / 0
Bool -> ?
    #32608392
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Мимопроходящий
А иначе он символьный тип в boolean не может преобразовать. Только числовой.
...
Рейтинг: 0 / 0
Bool -> ?
    #32608454
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То что ты делаешь путём подсовывания RDB$FIELD_SOURCE - грязный хак.
Пусть даже возведённый автором IBExpert'a в ранг "законных". Но хак.
Можно же сделать по человечески. Как тебе советовали.
...
Рейтинг: 0 / 0
Bool -> ?
    #32608503
FEV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМожно же сделать по человечески. Как тебе советовали.
А как мне советовали? Уйти от bool к другому типу поля? Мне придётся прогу заново переписать, а это не раз плюнуть. А больше советов и не было...
Я не пойму чем вас не устраивает моё решение? Хак или нет, но это работает.
...
Рейтинг: 0 / 0
Bool -> ?
    #32608540
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FEVА как мне советовали? Уйти от bool к другому типу поля? Мне придётся прогу заново переписать, а это не раз плюнуть. А больше советов и не было... Тебе советовали создать промежуточное поле, перелить в него данные (с конвертацией), потом старое дропнуть, а новое переименовать.
FEVЯ не пойму чем вас не устраивает моё решение? Хак или нет, но это работает.
Да нам-то пофигу. Тебе жить.
Ковыряние в системных таблицах - способ умереть молодым.
...
Рейтинг: 0 / 0
Bool -> ?
    #32608972
Фотография AndriyKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FEVА как мне советовали? Уйти от bool к другому типу поля? Мне придётся прогу заново переписать, а это не раз плюнуть. А больше советов и не было...
Я не пойму чем вас не устраивает моё решение? Хак или нет, но это работает.


Что ж ты, али не слушаешь ? Я ж тебе сразу сказал

Уточни версию Interbase. В семерке появился тип поля Boolean.

Вот и пользуй.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Bool -> ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]