21.04.2005, 14:23 | #1 |
Administrator
|
Чтение данных из SQL Server через ODBC. Не работает в 3-х звенке
Всем здравствуйте! Имеется следующая проблема (Ax 3.0SP3):
Хочется считать поле типа дата из скуля через ODBC (варианты Connection, UserConnection или ADO я и так знаю, вопрос конкретно про ODBC). Так вот - из под двухуровневой конфигурации приведенный ниже Job работает нормально. А вот из-под 3-х уровневой - Axapta рушится при вызове оператора getDate. PHP код:
ODBC 'ODBCSQL' настроена на скуль, аутенфикация виндовая (со скульной те же траблы); указана конкретная база на серваке. Скуль сам локальный, прав хватает :-) Вопрос - сталкивался ли кто с подобной проблемой ? Дебаггер показывает что все объекты создаются на клиенте - т.е. фактически 3-шка ничем не должна по идее отличаться от двушки |
|
21.04.2005, 14:27 | #2 |
Administrator
|
ODBC локальная.
Я полагаю, что такая ситуация могла бы возникнуть - если бы AOS стал бы пытаться достучаться до локального SQL, не смог.. а разработчики ядра не удосужились бы в этом месте сделать лишнюю проверку. Axapta рушится - с предложением отправить отчет в Microsoft :-)...(Уж можно было бы сразу в MBS :-)) |
|
30.05.2005, 16:42 | #3 |
Участник
|
Нарвался абсолютно на те же самые грабли.
Ситуация 1 в 1, за исключением того, что аутентификация сиквельная. Именно на ODBCConnection, именно на АОСе и падает именно на getDate (после чтения любого поля типа дата из любой таблицы). Что интересно, getString, getInt и getReal в такой же ситуации проходят на ура... Таки никто не решал такую проблему?
__________________
Здесь могла быть Ваша реклама! |
|
30.05.2005, 17:08 | #4 |
Administrator
|
проблема была обойдена
следующий код разрешил неразрешимое PHP код:
|
|
30.05.2005, 17:09 | #5 |
Administrator
|
нельзя сказать что решение идеальное - но внутренние нужды оно удовлетворило
|
|
30.05.2005, 17:14 | #6 |
Участник
|
Не знаю, что там в 3.0, но в 2.5 - никаких проблем. Правда я подключался не через DSN, а напрямую строку соединения загонял, что-то вроде
LP.setOther("DRIVER=SQL Server;SERVER=MyServer;DataBase=MyBase;Trusted_Connection=Yes"); Возможно, проблема с региональными настройками. Либо в DSN, либо в самом Windows. |
|
30.05.2005, 17:24 | #7 |
Administrator
|
Тот факт, что проблема с датой однозначно указывает на корни проблемы - региональные настройки. Однако, очень часто у пользователей стоит русский Windows (в моем случае в т.ч. Access), а тот же SQL Server однако может быть не совсем русский
Предложенный способ (кстати там опечатка - odbcGetInfoStr - это не функция, а метод класса OdbcConnection) - не претендует на универсальность, однако помогает избегать проблем с региональными настройками. Более того, я даже считаю, что разобравшись правильно с региональными настройками, эту проблему скорее всего можно избежать, однако в качестве "быстрого" решения - сия заплатка была придумана, т.к. сия проблема не стоит того, чтобы с ней возиться весь день |
|
30.05.2005, 17:52 | #8 |
Участник
|
Предложенный способ - это вообще не решение! Это способ по быстрому обойти проблему не особо с ней разбираясь. Это что же, в каждом запросе надо делать конвертацию даты в строку?
То, что стоит у пользователя, вряд ли имеет принципиальное значение. Надо смотреть настройки DSN и настройки СЕРВЕРА. Проверь, не стоит ли в настройках DSN "птичка" в пункте Use regional settings when outputting currency, numbers, dates, and times. Кстати, если установить связь не через DSN, а через строку подключения глюк остается? |
|
|
|