Проблема записи в SQL таблицу

Интегрованная среда разработки (IDE) промышленных приложений.

Проблема записи в SQL таблицу

Сообщение flipback » Вт авг 21, 2007 3:59 pm

Здравствуйте.
Я использую объект SQLData для записи в SQL таблицу. Проблемы начинаются, когда я пытаюсь записывать значения типа float. Как я понял проблема, в разделителях '.' и ','. Я попробывал сменить в винде региональные и языковые настройки, но это не помогло :(. В IAS все равно разделитель запятая, а SQL Server хочет точку. Если кто нибудь сталкивался с этой проблемой, буду благодаен за помощь.
flipback
 
Сообщения: 5
Зарегистрирован: Вт авг 21, 2007 3:42 pm

Сообщение Admin » Чт авг 23, 2007 1:09 pm

Уважаемый flipback,

На Вашем месте я не использовал бы данных типа float c SQL.
А использовал бы string или отдельно целую и дробную часть.

Например Вы хотите видеть такую таблицу в SQL

char[4] | float
---------------
pi |3.1415926
exp |2.718281828

Поскольку это не получается предлагаю варианты

char[4] | char[12]
---------------
pi |3.1415926
exp |2.718281828

Или

char[4] | int | int
---------------------------
pi |3 | 1415926
exp |2 | 71828182

Это не самое красивое решение, но почему бы и нет.
Admin
Site Admin
 
Сообщения: 294
Зарегистрирован: Пт май 04, 2007 7:32 pm

Сообщение flipback » Чт авг 23, 2007 3:58 pm

Я думал об этом. Дело в том, что полей типа float будет сотни, а то и тысячи. Если их хранить таким образом, они займут как минимум в 2 раза больше места. И к тому же нужна будет программная обработка для преобразования в строку и получится очень много лишнего кода. Я бы хотел спросить, у вас в Object Viewer значения float через точку или через запятую?
flipback
 
Сообщения: 5
Зарегистрирован: Вт авг 21, 2007 3:42 pm

Сообщение Admin » Чт авг 23, 2007 5:49 pm

Уважаемый flipback, я правильно понимаю что Object Viewer - это Window Viewer, да ?

Так вот, напишу #.# - будет через точку, а напишу #,# % будет в десятых долях процента.
Но если написать просто # будет видна только целая часть.

Надеюсь это Вам поможет, хотя я не совсем понимаю какая разница
между точкой и запятой - она ведь возникает при отображении,
а в памяти компьютера float и есть float.
Admin
Site Admin
 
Сообщения: 294
Зарегистрирован: Пт май 04, 2007 7:32 pm

Сообщение flipback » Пн авг 27, 2007 2:52 pm

Admin писал(а):Уважаемый flipback, я правильно понимаю что Object Viewer - это Window Viewer, да ?

Нет, я имею в виду "просмоторщик" объектов ArchestrA. Я пишу о проблеме объекта $SQLData http://archestra.biz/objects/objectlist.aspx?category=2 . Я Intach здесь не использую.

Admin писал(а): Надеюсь это Вам поможет, хотя я не совсем понимаю какая разница
между точкой и запятой - она ведь возникает при отображении,
а в памяти компьютера float и есть float.


Есть, запрос к базе это строка. Поэтому Float приводится к строке для ввода его в запрос, при этом используются функции которые преобразуют в соответствии с интернационнальными настройками Windows (точно верно для .NET, если в ручную не указывать). Т.е. если у меня русские настройки в винде, то SQL-запросы будут не верны из-за ошибки синтаксиса(формат float у него через точку, а запятая это разделитель)
Теперь самое интересное, я изминил настройки винды на английские. И не чего не получилось. При создании галактики, в логе пишется, что язык приложения - 'ru', все флоаты через , и запись не возможна :(
Вот.
flipback
 
Сообщения: 5
Зарегистрирован: Вт авг 21, 2007 3:42 pm

Сообщение Admin » Пн авг 27, 2007 4:55 pm

Уважаемый flipback,

Я понял теперь Вашу проблему, сначала думал Вы используете InTouch.
Беда с этими русскими кодировками конечно )
У меня float через точку. Спасибо за ссылку я зарегился, буду разбираться..
Не уверен что быстро дам ответ, а вообще SQLData может и не поддерживать ru?
На крайний случай можно попробовать скрипт написать,
но это плохо потому что он будет вызываться каждый раз
Admin
Site Admin
 
Сообщения: 294
Зарегистрирован: Пт май 04, 2007 7:32 pm

Сообщение Admin » Вт авг 28, 2007 12:18 pm

Уважаемый flipBack,
Здравствуйте. Попробуйте ка вот что:
•Там где IAS установить английские региональные настройки.
•Сделать экспорт всех объектов Galaxy.
•Удалить Galaxy (убедитесь что в MSSQL, база удалилась)
•Посмотрите в MSSQL - collation cp1251_General (см. скриншот)
•создать Galaxy и импортировать все объекты.
Должно помочь!
Admin
Site Admin
 
Сообщения: 294
Зарегистрирован: Пт май 04, 2007 7:32 pm

Сообщение flipback » Вт авг 28, 2007 4:23 pm

К сожелению мне это не помогло :(. Хотя может это и не так страшно. Я для записи данных, стал использовать InSql, который нормально все записывает. Правда он должен находитя на другой машине, где не установлены объекты арчестры. Но для моего проекта это подходит.
flipback
 
Сообщения: 5
Зарегистрирован: Вт авг 21, 2007 3:42 pm


Вернуться в Development Studio & FactorySuite A²

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3