09.11.2010, 14:30 | #1 |
Участник
|
Как сменить региональные стандарты...
Добрый день всем. Вот такой вопрос у меня. Есть выгрузка в dbf. Там значения типа real должны иметь разделитель целой и дробной части "." (точку)(иначе ошибка и ничего не выгружается). Но если я в региональных стандартах выставляю точку как разделитель целой и дробной части то выгрузка работает но куча отчётов написано на Excel-е перестают работать. Вот стоит задача сменить кратковременно региональные стандарты на машине на время выгрузки в dbf. Давным давно я как то в делфях это проходил, но сейчас мне это не найти. да и может в аксапте есть свои способы.
Заранее всем спасибо за помощь! |
|
09.11.2010, 14:58 | #2 |
Модератор
|
Выгрузка в DBF, пример. Работают оба:
X++: INSERT INTO [FILE.DBF] (NUM, PROD, KOL, SKIDKA, PRICE, PRICE2) VALUES('S10307','QWERTY','2,00','0,00','20,00','20,00') // или так INSERT INTO [FILE.DBF] (NUM, PROD, KOL, SKIDKA, PRICE, PRICE2) VALUES('S10307','QWERTY',2.00,0.00,20.00,20.00)
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
|
За это сообщение автора поблагодарили: raniel (1). |
09.11.2010, 15:10 | #3 |
Участник
|
Poleax вот не поверишь, но когда летом делал выгрузку ...ни в какую не хотело выгружаться с запятой...а сейчас работает.....чудеса... :-)
Хотя всё же если кто знает как добраться до региональных стандартов то напишите. мне это просто уже интересно. Последний раз редактировалось raniel; 09.11.2010 в 15:21. |
|
09.11.2010, 15:49 | #4 |
Модератор
|
Можно получить региональные настройки для RU (Ax2009)
X++: \Classes\WinAPI\getUserLocaleDecimalSeparator_RU \Classes\WinAPI\getUserLocaleThousandSeparator_RU
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
09.11.2010, 15:54 | #5 |
Участник
|
Вы делаете распространенную ошибку путая то, как данные отображаются и то, как данные хранятся.
Так вот, внутри файла DBF при хранении данных должен использоваться только и исключительно символ точки. И никакие региональные настройки на это повлиять не в силах. Но вот когда Вы читаете (просматриваете) содержимое файла DBF, то способ отображения данных может зависеть от региональных настроек. Но может и не зависеть. Смотря чем (какой программой) Вы просматриваете его содержимое. Другими словами, региональные настройки (если они вообще учитываются программой просмотра или редактирования DBF-файлов) влияют на символ-разделитель только внутри этой самой программы. В файл DBF символ-разделитель по любому будет вставлен как точка. Хотя, а что Вы подразумеваете под фразой "выгрузка в DBF"? Какими именно командами это делается? |
|
09.11.2010, 16:01 | #6 |
Участник
|
ну вот Poleax выше показал пример....я именно так и выгружаю...
|
|
09.11.2010, 17:05 | #7 |
Участник
|
Разве Axapta может выгружать в файл DBF напрямую, без обертки в виде ADO или ODBC? Вот я и спрашиваю, как ты формируешь строку для передачи драйверу. Может проблема именно в формировании этой строки?
|
|
09.11.2010, 17:33 | #8 |
Участник
|
Вот както так:
loginProperty.setOther(strfmt("DRIVER=Driver do Microsoft dBase (*.dbf);")); odbcConnection = new OdbcConnection(loginProperty); statement = odbcConnection.createStatement(ResultSetType::ForwardOnly, ResultSetConcurrency::Updatable); |
|
10.11.2010, 12:09 | #9 |
Участник
|
Я не про это.
Чтобы сделать запись в DBF таблицу, предварительно необходимо создать символьную строку X++: strCommand = "INSERT INTO ..."
statement.executeUpdate(strCommand) strFmt(), num2str() StrFmt() и параметр -1 в num2str() используют при преобразовании текущие региональные настройки. Именно это и может приводить к ошибкам. Нужно как-то так X++: strLTrim(num2str(123.456, 20, 18, 1, 0)) |
|
|
За это сообщение автора поблагодарили: raniel (1). |
11.11.2010, 11:29 | #10 |
Участник
|
Согласен видимо в этом и была проблемка...но сейчас всё ок....я передаю real как строку и всё ок.
|
|