From: | Dmitry Kruglov <info(at)midisa(dot)org> |
---|---|
To: | taras(at)logicland(dot)com(dot)ua, pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: DateStyle не могу понять проблему. |
Date: | 2012-01-24 08:11:25 |
Message-ID: | 4F1E67AD.6010108@midisa.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-ru-general |
Всем спасибо за помощь ... Ошибка пропала так же неожиданно как и
появилась.... Стал вызывать функции Windows API, чтобы посмотреть что
там вообще происходит и увидел что ошибка исчезла.
До этого менял в SQL запросе местами день и месяц, 'dd/mm/yyyy'
работало отлично. Как только делал такой формат 'mm/dd/yyyy' (на сервере
именно так), появлялась ошибка.
Сейчас ошибка исчезла и работает хорошо, но не факт, что она снова не
появится.
Гуляют настройки в винде или в драйвере, как обуздать не понятно.
то так формирует дату: 'dd/mm/yyyy'
то так 'mm/dd/yyyy'
А думаю, что проблема не в винде, а в ODBC драйвере, который не понятно
как инициализировать нужно.
Как я понимаю драйвер должен получить настройки формата даты где? С
сервера или где то на локальной машине?
Ошибка происходит в момент записи даты в базу. И при отображении
сообщения об ошибке, показывает правильный формат даты, который
определен на сервере.
Из этого следует ... нет согласованности ODBC драйвера и сервера.
Что означает: "биндить" типизированные параметры ?
Как это выглядит?
Заранее спасибо.
24.01.2012 14:51, Viacheslav N Tararin пишет:
> Добрый день.
> Чтобы не зависеть от настроек действительно лучше формировать такую
> строку:
>
> insert into "sprPartiy" ("IDUSER","DATAOFORMLEN","TYPESKLADA") values
> (1,to_date('2012-01-23', 'yyyy-mm-dd'),1)
>
> Гарантировано дожна работать и такая
>
> insert into "sprPartiy" ("IDUSER","DATAOFORMLEN","TYPESKLADA") values
> (1,'2012-01-23'::date,1)
>
> у меня никогда не было проблем и с такой (независимо от настроек)
>
> insert into "sprPartiy" ("IDUSER","DATAOFORMLEN","TYPESKLADA") values
> (1,'2012-01-23',1)
>
>
> Хотя правильней всего не клеить строки, а "биндить" типизированные
> параметры, это тянет больше переработок, но избавляет от кучи проблем.
> .
>
> 23.01.2012 18:30, Dmitry Kruglov пишет:
>> Добрый день Вячеслав.
>>
>> Вношу корректировку к последнему письму.
>> В одной винде работает нормально с DateStyle, в другой не работает
>> вообще никак. С DateStyle и без него не работает.
>>
>> Открыл программу под отладчиком, посмотрел что там формируется.
>> вот такая строка:
>> insert into "sprPartiy" ("IDUSER","DATAOFORMLEN","TYPESKLADA") values
>> (1,'1/23/2012',1)
>>
>> Пытаюсь выполнить запрос, говорит (не на русском языке), что '1/23/2012'
>> выходит за пределы диапазона. Не могу выполнить. Хотя на сервере четко
>> сказано SQL,MDY.
>>
>> Эта же программа на другой машине отлично выполняется.
>>
>> Поставил последние драйверы ODBC все равно та же история.
>>
>> Не могу понять где нужно посмотреть....
>>
>> Вы имеете ввиду нужно написать запрос так?
>>
>> insert into "sprPartiy" ("IDUSER","DATAOFORMLEN","TYPESKLADA") values
>> (1,to_date('2012-01-23', 'yyyy-mm-dd'),1)
>
>>
>> Если даже так сработает .... то сильно много мест в программе нужно
>> будет менять т.к. программу пишу 8 лет. В ней десятки тысяч строк
>> программного кода ....
>>
>> Может будут другие предложения?
>>
>>
>> 23.01.2012 22:42, Viacheslav N Tararin пишет:
>>> Добрый день.
>>> Со всех ОС которые у нас есть корректно работает строка формата
>>> 'yyyy-mm-dd'.
>>> Для верности рекомендую явно приводить с указанием формата
>>> to_date('2012-12-21', 'yyyy-mm-dd') и ни от чего не зависиш.
>>>
>>>
>>> 23.01.2012 17:00, Dmitry Kruglov пишет:
>>>> Добрый вечер уважаемые программисты.
>>>>
>>>> Есть две винды XP SP3 (дистрибутивы совершенно одинаковые).
>>>>
>>>> На каждой винде стоят одинаковые драйверы для работы с сервером.
>>>> Вот эти дрова ставлю:
>>>> ftp://ftp.midisa.net/man2/psqlodbc.msi
>>>>
>>>> Сервер установлен на Linux Ubuntu. На сервере в базе данных прописано
>>>> *DateStyle **SQL,MDY.*
>>>> В программе формирую строку 'm/d/y' (показываю схематично), делаю
>>>> запрос.
>>>>
>>>> Подключение идет через: PostgreSQL Unicode версия драйвера 8.04.02.00
>>>>
>>>> В одной винде работает без ошибок, в другой ругается на формат даты.
>>>>
>>>> Если с сервака удаляю DateStyle то в той в которой было отлично,
>>>> появляется ошибка формата даты, а в другой в которой не работала
>>>> начинает работать.
>>>>
>>>> Подскажите пожалуйста, в чем может быть проблема?
>>>>
>>>> Может где то еще в винде какие то настройки дополнительные есть?
>>>>
>>>> Или может нужно программу как то хитро инициализировать?
>>>>
>>>> Инициализирую программу как обычно:
>>>> _tsetlocale(LC_TIME, _T(""));
>>>> _tsetlocale(LC_CTYPE, _T(""));
>>>>
>>>> Пишу на MFC.
>>>> Программа одна и та же.
>>>>
>>>> Буду очень признателен за Вашу помощь.
>>>> Спасибо.
>>>>
>>>>
>>>
>>
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Dmitry E. Oboukhov | 2012-01-28 08:52:03 | Как сделать правильно ALTER TABLE? |
Previous Message | Dmitry Kruglov | 2012-01-23 16:30:05 | Re: DateStyle не могу понять проблему. |