Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

MSSQL2008: использование типа date через ADODB


Тимохов Дима ©   (09.10.18 16:39

Приветствую!

1. Всегда пользовался типом smalldatetime. При этом надо было хранить только даты (без времени). В MSSQL2008 наконец появился тип date. Решил перейти на него. Но обнаружились проблемы при получении в Delphi через ADODB значений типа date.

2. Проблема выглядит так, что полученное значение типа date имеет вариантный тип varOleStr (представляет дату в виде '2018-01-01'), а не varDate.

3. Порывшись в интернете, нашел такую фразу:
However, in order to improve portability, the default behaviour of the ADOdb mssqlnative driver is to return the date as a string:
(здесь http://adodb.org/dokuwiki/doku.php?id=v5:database:microsoft_sql_server)

Как совет: задать свойство подключения ReturnDatesAsStrings=false.

Но! В примере используется драйвер mssqlnative.
Я же в ADODB.Connection параметрах передаю строку: Provider=SQLOLEDB...
Не пойму, куда приладить этот mssqlnative.

Для SQLOLEDB параметр ReturnDatesAsStrings игнорируется.

4. Вопрос - как заставить ADODB возвращать поля типа date в виде varDate, а не varOleStr?

Спасибо!


sniknik ©   (09.10.18 18:41[1]

> Не пойму, куда приладить этот mssqlnative.
это вообще не к дельфи относится, это похоже к NET и для "переносимости" - винда vs линух.

> 4. Вопрос - как заставить ADODB возвращать поля типа date в виде varDate, а не varOleStr?
не надо заставлять, всегда он возвращался в типе дататайм, что дата что время что время с датой... начиная с 2000го года и mssql сервера как минимум. как раз когда начал с mssql работать (за 7ку не скажу, слишком мало с ней "общался", просто не помню... хотя с чего ей отличатся?)


sniknik ©   (09.10.18 18:46[2]

вот кстати тема по CONVERT от 2000го года
http://www.sql.ru/forum/685/kak-izmenit-format-daty?hl=convert
а вот таблица совместимости для нее
https://docs.microsoft.com/ru-ru/sql/t-sql/data-types/media/lrdatahd.png?view=sql-server-2017
не менялась с тех пор (проверить - поставить 2000й и посмотреть в его справке)
тип date есть...
с чего решил что только
> В MSSQL2008 наконец появился тип date.
???


Тимохов Дима ©   (09.10.18 19:12[3]


> sniknik ©   (09.10.18 18:46) [2]


1. В MSSQL2000 не было типа date (был datetime и smalldatetime).
Набери в гугле "new data types in mssql 2008" и увидишь, что date - именно *новый* тип.

2. Вот такое код, будучи выполненным через TADOQuery
declare @t table(d date, sdt smalldatetime)
insert @t values(cast('20181020' as date), cast('20181020' as date))
select d, sdt from @t

возвращает в поле "d" строку '2008-10-20', а не вариантное значение типа varDate, тогда как в поле "sdt" возвращается именно varDate.
В этом и вопрос - как заставить ADODB тип date возвращать как varDate.


Тимохов Дима ©   (09.10.18 19:23[4]


> sniknik ©   (09.10.18 18:46) [2]

Так, на всякий случай - проверил, что использую версию AdoDb: 6.1 C:\Program Files (x86)\Common Files\System\ado\msado15.dll
Вроде как это последняя версия.


Тимохов Дима ©   (09.10.18 20:00[5]


> sniknik ©   (09.10.18 18:41) [1]


Интересно... попробовал такую строку подключения

Provider=SQLNCLI11.1;Integrated Security=SSPI;Persist Security Info=False;User ID="""""";Initial Catalog=mytestdb;Data Source=.;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=TIM-10;Initial File Name="";Use Encryption for Data=False;Tag with column collation when possible=False;MARS Connection=False;DataTypeCompatibility=0;Trust Server Certificate=False;Application Intent=READWRITE;

и все ОК - date возвращается как varDate.

Видимо, SQLOLEDB слишком старый, а SQLNCLI11.1 лучше.

Сам каким провайдером пользуешься для SQL2008?


sniknik ©   (10.10.18 08:15[6]

> 1. В MSSQL2000 не было типа date (был datetime и smalldatetime).
возможно... всегда пользовался датетаймом. скорее всего пропустил/было не интересно проигнорировал и забыл новшество.

> Видимо, SQLOLEDB слишком старый, а SQLNCLI11.1 лучше.
SQLOLEDB идет по умолчанию в винде, SQLNCLI11.1 нужно ставить... если первого достаточно (не отключена авторизация "по старому" на сервере) то "лучший" нафиг не нужен.

> Сам каким провайдером пользуешься для SQL2008?
все равно, какой админы настроят в проге, таким и пользуюсь... скорее всего обоими для разных баз. надо смотреть настройки.


Тимохов Дима ©   (10.10.18 11:24[7]


> sniknik ©   (10.10.18 08:15) [6]

Попробовал SQLNCLI11.1. Не все работает - какая-то несовместимость есть по  типу datetime2 и int. Надо разобраться. Но субъективно он чуть шустрее.

Такое ощущение, что весь мир проигнорировал новый тип date (а он все же 3 байта, а не 4 как в smalldatetime). Нигде вопроса про возврат date как varOleStr не видел...


sniknik ©   (10.10.18 14:59[8]

> Такое ощущение, что весь мир проигнорировал новый тип date
ну в общем то да, мне лично всегда хватало обычного datetime, ни за лишний байт, ни за повышенную точность никогда "не боролся". всему миру похоже так же пофиг.


Тимохов Дима ©   (10.10.18 22:47[9]


> sniknik ©   (10.10.18 14:59) [8]

Может знаешь какой-нибудь крутой ресурс по MSSQL+ADODB? Форумы?
Русский, английский - не важно.


sniknik ©   (11.10.18 18:19[10]

если стоит офис(или частично, провайдер мелкософта например... х.з. куда он входит, у меня всегда был) то посмотри справку -
C:\Program Files\Common Files\microsoft shared\OFFICE16\1049\ADO210.CHM
этот файл был самым полезным при изучении ado для меня.


Тимохов Дима ©   (11.10.18 20:55[11]

Нашелся. Спасибо!


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо