powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
15 сообщений из 15, страница 1 из 1
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39143518
rstrelba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно сабж.
Делаю экспорт из firebird в sqlite. Firebird 2.5, Delphi6
Экспорт результата запроса в таблицу sqlite.
В цикле прохожу все результирующие колонки запроса (IBSQL), в xsqlvar наблюдаю поле sqltype
Например для поля BIGINT sqltype=580 вместо 16
Где копать?
...
Рейтинг: 0 / 0
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39143528
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, для начала, задайся вопросом почему ты вообще решил, что эти значения обязаны совпадать...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39143626
rstrelba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНу, для начала, задайся вопросом почему ты вообще решил, что эти значения обязаны совпадать...

Хорошо, если не обязаны где-то эти значения документированы?
...
Рейтинг: 0 / 0
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39143628
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstrelbaгде-то эти значения документированы?
RDB$TYPES, ЕМНИП.
И наверняка в ibase.h blr_* константы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39143637
rstrelba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovrstrelbaгде-то эти значения документированы?
RDB$TYPES, ЕМНИП.
И наверняка в ibase.h blr_* константы.


RDB$TYPES - нету
ibase.h - нашел дефайны
...
Рейтинг: 0 / 0
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39143640
rstrelba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstrelbaDimitry Sibiryakovпропущено...

RDB$TYPES, ЕМНИП.
И наверняка в ibase.h blr_* константы.


RDB$TYPES - нету
ibase.h - нашел дефайны

Если поле в выдаче NULL то младший бит sqltype = 1
Мда, квест еще тот ))
...
Рейтинг: 0 / 0
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39143642
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstrelbaМда, квест еще тот ))
Ну, для тех, кто не любит квесты, всегда есть гайды... Но настоящие приключенцы же не ищут
лёгких путей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39143643
rstrelba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovrstrelbaМда, квест еще тот ))
Ну, для тех, кто не любит квесты, всегда есть гайды... Но настоящие приключенцы же не ищут
лёгких путей.

Я ленивый толстый 42-х летний программер и я не люблю квесты. Дай плз. ссылку на гайды тогда.
...
Рейтинг: 0 / 0
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39143653
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39143659
rstrelba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39148286
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rstrelba,

возьми какую-нибудь "тонкую" библиоткеу для своего языка, там готовый разбор этих значений со всеми определениями есть

IBPP для С++
UIB для Delphi

и т.д.
...
Рейтинг: 0 / 0
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39148303
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

у него уже есть IBX (IBSQL). Зачем лезть в sqltype - не знаю. Мне понадобилось типы данных выводить в виде строк (структуры).
Вышло примерно так (забористо):

Сначала запрос.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
    Q.SQL.Add('select R.RDB$RELATION_NAME, R.RDB$FIELD_POSITION, R.RDB$FIELD_NAME, ');
    Q.SQL.Add('F.RDB$FIELD_LENGTH, F.RDB$FIELD_TYPE, F.RDB$FIELD_SCALE, F.RDB$FIELD_SUB_TYPE ');
    if dbinfo.ODSMajor >= 10 then   // !!!
      Q.SQL.Add(', F.RDB$FIELD_PRECISION ');
    Q.SQL.Add('from RDB$FIELDS F, RDB$RELATION_FIELDS R ');
    Q.SQL.Add('where F.RDB$FIELD_NAME = R.RDB$FIELD_SOURCE and R.RDB$SYSTEM_FLAG = 0 ');
    Q.SQL.Add('and r.RDB$RELATION_NAME NOT STARTING WITH ''RDB$''');
    Q.SQL.Add('order by R.RDB$RELATION_NAME, R.RDB$FIELD_POSITION');
    Q.ExecQuery;



потом разбор этого дела
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
           rec.FieldName:=Trim(Q.Current.ByName['RDB$FIELD_NAME'].AsString);
           rec.Length:=Q.Current.ByName['RDB$FIELD_LENGTH'].AsInteger;
           rec.DataType:=Q.Current.ByName['RDB$FIELD_TYPE'].AsInteger;
           rec.Scale:=Q.Current.ByName['RDB$FIELD_SCALE'].AsInteger;
           rec.Precision:=0;
           if dbinfo.ODSMajor >= 10 then
             rec.Precision:=Q.Current.ByName['RDB$FIELD_PRECISION'].AsInteger
           else
             if rec.Scale <> 0 then
               case rec.Length of
                 2 : rec.Precision:=5;
                 4 : rec.Precision:=9;
                 8 : rec.Precision:=15;
               end;

           rec.Scale:=Q.Current.ByName['RDB$FIELD_SCALE'].AsInteger;
           rec.SubType:=Q.Current.ByName['RDB$FIELD_SUB_TYPE'].AsInteger;
           if (rec.DataType = 16) and (rec.Scale <> 0) and (rec.Precision = 0) then
             rec.Precision:=18;



А уже потом - вывод (ниже f. это то же что и rec., но это мой класс).
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
      case f.DataType of
        7  : begin
               if f.Precision = 0 then
                 s:=s+'SMALLINT'#13#10
               else
                 s:=s+'NUMERIC('+IntToStr(f.Precision)+','+IntToStr(-f.Scale)+')'#13#10;
             end;
        8  : begin
               if f.Precision = 0 then
                 s:=s+'INTEGER'#13#10
               else
                 s:=s+'NUMERIC('+IntToStr(f.Precision)+','+IntToStr(-f.Scale)+')'#13#10;
             end;

        9  : s:=s+'TIMESTAMP'#13#10;
        10 : s:=s+'FLOAT'#13#10;



Почему так - точно уже не помню. Судя по всему, IBX и прочие компоненты "проглатывают" детали, которые мне нужны были при выводе.
...
Рейтинг: 0 / 0
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39148319
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvу него уже есть IBX

...у которого совместимость Interbase 6 = Firebird 1.0

общие старые типы там посмотреть можно, но новые -уже нет, для этого нужна библиотека с поддержкой последних версий FB
...
Рейтинг: 0 / 0
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39148415
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

мой код не завязан на IBX. в иллюстрируемой части при переводе на FIBPlus вообще ничего не пришлось переделывать :-)
...
Рейтинг: 0 / 0
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
    #39148418
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

я имел в виду не код интерпретации системных таблиц, а xsqlvar и

rstrelbaгде-то эти значения документированы?
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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