Re: DateStyle не могу понять проблему.

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.
>>>> Программа одна и та же.
>>>>
>>>> Буду очень признателен за Вашу помощь.
>>>> Спасибо.
>>>>
>>>>
>>>
>>
>
>

In response to

Browse pgsql-ru-general by date

  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 не могу понять проблему.