Какой тип поля совместим с типом numeric в MS SQL Server

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Какой тип поля совместим с типом numeric в MS SQL Server

Сообщение jsa »

Всем привет.
В селекте из таблицы берется поле типа numeric(20,6)
Какой тип нужно указывать для этого поля при создании объектов полей в объекте TSQLquery ?
Автоматически почему-то предлагается какой-то странный набор полей и приходится их создавать вручную.
Пробовал при создании ставить тип Currency и Float
В обоих случаях при Open возникает ошибка External:SIGSEGV по адресу ....
т.к. поля типа Money при этом совместимы с Currency для полей типа numeric приходится делать cast(FLD as money)
Но это в моем случае точности 4 после запятой, хватает. А какой тип правильно использовать?
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

jsa писал(а):Автоматически почему-то предлагается какой-то странный набор полей

Что именно?
jsa писал(а):Пробовал при создании ставить тип Currency и Float
В обоих случаях при Open возникает ошибка External:SIGSEGV по адресу ....

Скорее всего - так делать нельзя. Сам датасет не может разместить в твоих созданых полях данные от сервера.
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

alexs писал(а):Скорее всего - так делать нельзя. Сам датасет не может разместить в твоих созданых полях данные от сервера.

Вообще нельзя вручную создавать поля?
Почему?
С самого начала использования Lazarus так делать приходится. Т.к. часто из датасета ерунда какая-то подтягивается.
Я просто беру из select именя полей и копипастой их добавляю в новые поля, когда мало через IDE , а когда много и лень, то напрямую в *.lfm

alexs писал(а):Что именно?

вот
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

jsa, обрадовать вас нечем - этот серверный тип очень плохо конвертируется в паскалевские типы данных. :(
Никто это не исправлял, поскольку никому не надо.
Только конвертировать в самом запросе через серверные функции во что-то удобоваримое, как вы и делали.
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

Спс,
буду делать cast(FLD as float) FLD в запросе.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

jsa, читал об этой проблеме еще в делфи, но там тоже ничего не исправили
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Снег Север
Когда-то NUMERIC был самым обычным текстовым полем... ;-)
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Vadim, мне не на чем проверить, но, может, и сейчас оно способно в строку правильно конвертироваться. В любом случае это - какой-то реликт ушедших эпох... :)
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Снег Север
Да, это ещё конец 70-ых начало 80-ых. Овеянные веками пыльных бурь DBF-ки, в которых тогда не было ни целых чисел, ни дробных, а был один этот универсальный формат числа - NUMERIC... :-)
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

В принципе - если очень надо - то попробуйте исправить
Там на самом деле все достаточно просто. Исходники есть- исправлениям команда разработчиков только рада будет.
PS
Я бы и сам взялся - но у меня в принципе MS SQL нет нигде.
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

alexs писал(а):PS
Я бы и сам взялся - но у меня в принципе MS SQL нет нигде.

Поставить MS SQL Server Express бесплатный не проблема,
и под Win https://www.microsoft.com/ru-RU/downloa ... x?id=55994
и под Linux https://docs.microsoft.com/ru-ru/sql/li ... erver-2017

К тому же не обязательно MS SQL, в PostgreSQL тоже есть такой тип
http://postgresql.ru.net/manual/datatype-numeric.html
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

В PostgreSQL всё нормально поддерживается.

Добавлено спустя 42 секунды:
Кстати - попробуй ZEOS - может там проблема уже решена?

Добавлено спустя 10 минут 40 секунд:
По SQLDB смотри файл MSSQLConn:
В функции

Код: Выделить всё

function TMSSQLConnection.LoadField

надо просто правильно обработать этот тип.
Ответить