Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Bool -> ? / 24 сообщений из 24, страница 1 из 1
15.07.2004, 18:17:00
    #32606878
FEV
FEV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
Доброго вечера!
Перетащил базу с Accessа на IBase, только встала проблема что делать с boolевскими полями. Datapump загнал их в varchar(1), но в таком виде с ними работать невозможно. Подскажите как лучше поступить? На крайняк как их попроще в shortinteger перевести?
...
Рейтинг: 0 / 0
15.07.2004, 21:06:59
    #32607085
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
Я вот в БД сделал свои boolean- поля типа shortint, и теперь жалею- все время забываю, что у меня true- 0 или 1. Лучше уж char(1) - "Y"/"N", сразу ясно.
...
Рейтинг: 0 / 0
15.07.2004, 21:18:00
    #32607090
AndriyKo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
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
15.07.2004, 22:29:08
    #32607117
Matt Juntunen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
Smallint + Check Value(0,1) не подойдет?
...
Рейтинг: 0 / 0
15.07.2004, 23:04:22
    #32607138
Лкшы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
Если с FIBPlus работаешь, то он тип Integer может понимать как Bool-ево
да и в Блядере или Дельфях 0 - false , все иное - true
тобишь
i=0
if(i) - нафиг

i=1
if(i) - окей!
ShortInt - FIB тупит, или я не знаю настроек. но в грид он мне его как Bool
не дает.
а с Var или просто Char - понятнее в базе, но сложнее в обработке
...
Рейтинг: 0 / 0
16.07.2004, 09:52:41
    #32607379
FEV
FEV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
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
16.07.2004, 10:07:01
    #32607413
FEV
FEV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
Возможно ли поменять тип поля с varchar(1) на integer без создания нового поля? (поле содержит только "1" и "0")?
...
Рейтинг: 0 / 0
16.07.2004, 10:16:34
    #32607433
VF
VF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
так он у тебя на COLLATE ругается, скрипт изменения типа может покажешь?
и вообще, что за COLLATE для типа Boolean, разве он там может быть?
...
Рейтинг: 0 / 0
16.07.2004, 10:17:23
    #32607436
VF
VF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
но всё та4ки экспериментировать лучше на експерементальной БД...
...
Рейтинг: 0 / 0
16.07.2004, 10:28:22
    #32607458
FEV
FEV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
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
16.07.2004, 12:42:49
    #32607869
VF
VF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
я работаю с FB1.5 там нет булевых полей, поэтому не могу ничего сказать толкового, но если устроит вариант с созданием промежуточного поля, то можно и так...
...
Рейтинг: 0 / 0
16.07.2004, 12:48:57
    #32607889
FEV
FEV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
авторя работаю с FB1.5 там нет булевых полей, поэтому не могу ничего сказать толкового, но если устроит вариант с созданием промежуточного поля, то можно и так...
Только тогда встаёт другой вопрос: как потом это промежуточное поле переименовать в прежнее?
...
Рейтинг: 0 / 0
16.07.2004, 12:52:05
    #32607902
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
Легко. Прочитав документацию.
...
Рейтинг: 0 / 0
16.07.2004, 13:20:53
    #32608002
FEV
FEV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
авторЛегко. Прочитав документацию.
Мимопроходящий , может подскажете команду переименования поля в таблице, а то я что-то не припомню такой в SQL.
...
Рейтинг: 0 / 0
16.07.2004, 13:27:51
    #32608030
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
Я сноб. Мне в западло. Доку читай.
...
Рейтинг: 0 / 0
16.07.2004, 14:43:28
    #32608285
d'Evil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
Эх-эх, держи пример.
alter table users_mailbox alter column stamp to timemarker
users_mailbox - имя таблицы
stamp - старое имя поля
timemarker - новое имя поля
разумеется на это поле таблицы не должно быть нигде ссылок (см. Dependencies) если есть - убери, потом сделаешь на новое имя
...
Рейтинг: 0 / 0
16.07.2004, 14:45:16
    #32608290
d'Evil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
в принципе можно и ручками в ситемных таблицах, но если не знаешь как то минимум - не получится, максимум - запорешь БД.
...
Рейтинг: 0 / 0
16.07.2004, 14:48:19
    #32608304
FEV
FEV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
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
16.07.2004, 15:04:59
    #32608352
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
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
16.07.2004, 15:14:05
    #32608392
FEV
FEV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
2 Мимопроходящий
А иначе он символьный тип в boolean не может преобразовать. Только числовой.
...
Рейтинг: 0 / 0
16.07.2004, 15:28:38
    #32608454
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
То что ты делаешь путём подсовывания RDB$FIELD_SOURCE - грязный хак.
Пусть даже возведённый автором IBExpert'a в ранг "законных". Но хак.
Можно же сделать по человечески. Как тебе советовали.
...
Рейтинг: 0 / 0
16.07.2004, 15:42:14
    #32608503
FEV
FEV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
авторМожно же сделать по человечески. Как тебе советовали.
А как мне советовали? Уйти от bool к другому типу поля? Мне придётся прогу заново переписать, а это не раз плюнуть. А больше советов и не было...
Я не пойму чем вас не устраивает моё решение? Хак или нет, но это работает.
...
Рейтинг: 0 / 0
16.07.2004, 15:51:44
    #32608540
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
FEVА как мне советовали? Уйти от bool к другому типу поля? Мне придётся прогу заново переписать, а это не раз плюнуть. А больше советов и не было... Тебе советовали создать промежуточное поле, перелить в него данные (с конвертацией), потом старое дропнуть, а новое переименовать.
FEVЯ не пойму чем вас не устраивает моё решение? Хак или нет, но это работает.
Да нам-то пофигу. Тебе жить.
Ковыряние в системных таблицах - способ умереть молодым.
...
Рейтинг: 0 / 0
16.07.2004, 18:35:15
    #32608972
AndriyKo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bool -> ?
FEVА как мне советовали? Уйти от bool к другому типу поля? Мне придётся прогу заново переписать, а это не раз плюнуть. А больше советов и не было...
Я не пойму чем вас не устраивает моё решение? Хак или нет, но это работает.


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

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

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


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