powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Функция с датой и OleDB
22 сообщений из 22, страница 1 из 1
Функция с датой и OleDB
    #32638006
MkSim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возник ряд траблов при переходе с dblib на OleDB. Мы работаем на MSSQL2000 SP3a & PowerBuilder 9. После вынужденного перехода на OleDb повылазили некоторые неприятные углы, коих раньше не было.
Через SQL Profiler мы определили, что все datetime параметры процедур и функций при пересылки с клиента на сервер конвертируются.
Было
Код: plaintext
@dt = '20040805'
Cтало
Код: plaintext
@dt = {ts '2004-08-05 00:00'}

Если такой параметр передается в хранимую процедуру, то сервер все проглатывает. Но если параметр передается (как у нас) в пользовательскую функцию возвращающую таблицу, то возникает ошибка компиляции типа: Incorrect syntax near '{'.

Подскажите какие выставить сеттинги коннекта, или что еще сделать чтобы даты не конвертировались в этот странный вид, а передавались как есть, как их написали разработчики?
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #32638441
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой OLEDB provider? SQLOLEDB ?
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #32643760
MkSim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Провайдер OLE стандартный, тот что шел с инсталляшкой PB9.0.1 7171 + MSSQL2000 8.00.760 + MDAC2.8
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #32643801
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а точнее можно сказать?
там их несколько и все стандартные.
Судя по всему вы используете OLE DB Provider for ODBC (MSDASQL)
а надо OLE DB Provider for SQL Server (SQLOLEDB)
тогда и даты не будут конвертироваться и с номерами процедур проблем не будет.
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #32644228
MkSim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используем точно OLE DB Provider for SQL Server

Вот параметры для коннекта:
"PROVIDER='SQLOLEDB',DATASOURCE='WORK',PROVIDERSTRING='WORKDB'"
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #32715154
Guest_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так никто и не победил проблему?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Функция с датой и OleDB
    #33541525
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
И уменя теже грабли :-{

PB10.2.1
MSSQL 2000 - 8.00.2040

SQLCA.DBMS = "OLE DB"
SQLCA.DBParm = "PROVIDER='SQLOLEDB'"

Люди добрые, подмогните кто чем знает!
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33541845
Oleg1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guest_1Так никто и не победил проблему?
Такой проблемы нет. Для начала надо установить язык пользователю us_english, если не поможет, то пробовать в DBParm установить формат даты и времени.
С MSSQL в этом плане больше всего проблем, он как-то часто себя умником мнит. :) Мы жестко устанавливаем на сессию форматы.
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33543093
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
Oleg1Такой проблемы нет.
Установил язык в логине English. На всякий случай после коннекта сделал:
Код: plaintext
1.
2.
ls= 'SET LANGUAGE us_english'
EXECUTE IMMEDIATE :ls;
Результат тот же Incorrect syntax near '{'.

Попробовал добавить формат даты
Код: plaintext
SQLCA.DBParm += "DateTimeFormat='yyyymmdd',DateFormat='yyyymmdd' "

Ошибка: Arithmetic overflow error converting expression to data type smalldatetime.

Профайлером установлено, что даты действиельно в формате yyyymmdd, но без апострофов!!!

Какой надо указать формат, чтобы дата передавалась с апострофами?
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33543760
Oleg1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rhs
Какой надо указать формат, чтобы дата передавалась с апострофами?
Мы все свели к каноническому виду, т.е yyyy-mm-dd. Для MSSQL надо выставить очередность частей даты, точно не помню как пишется. Тогда зависимости от языка не будет.
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33544349
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
Вот это да!
Из Query Analizer выполняю
Код: plaintext
select * from ... where dat=  2005 - 01 - 01 

Ошибок нет!
Результаов нет!

Хотя
Код: plaintext
select * from ... where dat= '2005-01-01'
работает

Из PB тоже не работает.

2Oleg1
Какой у вас драйвер MSSQL?
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33544702
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rhsВот это да!
Из Query Analizer выполняю
Код: plaintext
select * from ... where dat=  2005 - 01 - 01 

Ошибок нет!
Результаов нет!

Может потому, что 2005-01-01 дает 2003 ?
:)
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33544750
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
Anatoly MoskovskyМожет потому, что 2005-01-01 дает 2003 ?
:)

Да, действительно! Это Вы здорово подметили.

Хотя почему нет ошибки преобразования данных?
Ведь dat- smalldatetime
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33544797
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rhsХотя почему нет ошибки преобразования данных?
Ведь dat- smalldatetime
Наверное, отсутствующие части даты заменяются на некие значения по умолчанию. Например из текущего timestamp как в Oracle.
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33544801
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, не, я вспомнил в Оракле не так. Сорри.
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33549811
Oleg1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rhsВот это да!
Из Query Analizer выполняю
Код: plaintext
select * from ... where dat=  2005 - 01 - 01 

Ошибок нет!
Результаов нет!

Для понимания достаточно выполнить
Код: plaintext
select cast( 2005 - 01 - 01  as date)

rhs
2Oleg1
Какой у вас драйвер MSSQL?
SQLOLEDB
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33551132
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg1Для понимания достаточно выполнить
Код: plaintext
select cast( 2005 - 01 - 01  as date)

Код: plaintext
select cast( 2005 - 01 - 01  as datetime)
Код: plaintext
 1905 - 06 - 27   00 : 00 : 00 . 000 

Никогда бы не подумал ;)
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33552637
Oleg1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Estets
Код: plaintext
select cast( 2005 - 01 - 01  as datetime)
Код: plaintext
 1905 - 06 - 27   00 : 00 : 00 . 000 

Никогда бы не подумал ;)
Где-то в доках это описано. Можешь дальше пойти:
Код: plaintext
select getdate() +  1 . 5 
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33553051
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем я даже знаю как в MS SQL округлить дату к ближайшей по времени ;)
Код: plaintext
1.
2.
3.
4.
5.
6.
DECLARE @d datetime
SELECT @d = '20050102 10:32'
SELECT @d
-- 2005-01-02 10:32:00.000
SELECT @d = convert(datetime, convert(int, @d))
SELECT @d
--  2005 - 01 - 02   00 : 00 : 00 . 000 

Код: plaintext
1.
2.
3.
4.
5.
6.
DECLARE @d datetime
SELECT @d = '20050102 16:32'
SELECT @d
-- 2005-01-02 10:32:00.000
SELECT @d = convert(datetime, convert(int, @d))
SELECT @d
--  2005 - 01 - 03   00 : 00 : 00 . 000 

Правда не очень себе представляю куда это может пригодиться
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33567459
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
Oleg1 Мы все свели к каноническому виду, т.е yyyy-mm-dd. Для MSSQL надо выставить очередность частей даты, точно не помню как пишется. Тогда зависимости от языка не будет.
Если есть возможность, воспроизведите пожалуйста полностью SQLCA.DBParm и какие SETы делаются после коннекта. Как ни бьюсь никак не работает.
А используется ли в вашем приложении вызов функций, которые возвращают recordset и имеют параметр datetime? Именно с ними основной затык.
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33575160
Oleg1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rhsЕсли есть возможность, воспроизведите пожалуйста полностью SQLCA.DBParmТам ничего существенного нет, кроме сервера и БД

rhs и какие SETы делаются после коннекта. Как ни бьюсь никак не работает.
Код: plaintext
SET DATEFORMAT 'ymd'

rhsА используется ли в вашем приложении вызов функций, которые возвращают recordset и имеют параметр datetime? Именно с ними основной затык.С recordset'ами мы не работаем. Параметры datetime есть, но почти все они переделаны на string еще со времен бодания с dblib.
Кстати, глянув в pbole90.dll, я увидел ссылку на pbodb90.ini, но не проверял, используется он или нет.
...
Рейтинг: 0 / 0
Функция с датой и OleDB
    #33577564
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
Oleg1
С recordset'ами мы не работаем. Параметры datetime есть, но почти все они переделаны на string еще со времен бодания с dblib.

Тогда понятно, что у вас этих проблем нет.
Я решил проблему переходом на АDO.NET
Морока, конечно, устанавливать всем пользователям framework, но вроде работает, тьфу-тьфу-тьфу, тук-тук-тук...

СПАСИБО ВСЕМ!
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Функция с датой и OleDB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]