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

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


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

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


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

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

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

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

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

и т.д.
...
Рейтинг: 0 / 0
15.01.2016, 15:16
    #39148303
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
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
15.01.2016, 15:41
    #39148319
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Различия значений RDB$FIELDS.RDB$FIELD_TYPE и XSQLVAR.sqltype
kdvу него уже есть IBX

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

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

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

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

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


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