Отсутствует свойство SQLConnection в Delphi XE 10

Обсуждение возникших проблем, предложений и ошибок dbExpress драйверов
Ответить
VovaTuf
Сообщения: 5
Зарегистрирован: Чт 18 май 2017 13:28

Отсутствует свойство SQLConnection в Delphi XE 10

Сообщение VovaTuf » Чт 18 май 2017 13:42

День добрый!
Установить опции соединения таким образом:
SQLConnection1.SQLConnection.SetOption(coBCDPrecision, Integer(PChar('14,4')));
теперь не получается, т.к. свойства SQLConnection у компонента TSQLConnection больше нет в версии XE 10.
Какие свойства, каких компонент теперь предлагается использовать для установки опций?

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Отсутствует свойство SQLConnection в Delphi XE 10

Сообщение AndreyZ » Пт 19 май 2017 08:12

В RAD Studio 10 Seattle вы можете задать расширенной опции драйвера BCDPrecision значение 14,4 при помощи такого кода:

Код: Выделить всё

SQLConnection1.Params.Values['BCDPrecision'] := '14,4';

VovaTuf
Сообщения: 5
Зарегистрирован: Чт 18 май 2017 13:28

Re: Отсутствует свойство SQLConnection в Delphi XE 10

Сообщение VovaTuf » Пт 19 май 2017 10:08

Андрей, Спасибо!
Так можно любые опции задавать? Нам не только coBCDPrecision нужно. Мы использовали очень много разных опций.
AndreyZ писал(а):опции драйвера BCDPrecision ... при помощи такого кода
Наверное даже можно вместо строки 'BCDPrecision' использовать константу SBCDPrecision из модуля DriverOptions, да?

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Отсутствует свойство SQLConnection в Delphi XE 10

Сообщение AndreyZ » Пт 19 май 2017 10:33

Начиная с RAD Studio 2007 и более поздних, вы можете задавать расширенные опции dbExpress driver for SQL Server используя свойство соединения TSQLConnection.Params . Более подробно о расширенных опциях драйвера вы можете прочесть в файле Readme.html, который находится в папке, куда был установлен продукт dbExpress driver for SQL Server.

VovaTuf
Сообщения: 5
Зарегистрирован: Чт 18 май 2017 13:28

Re: Отсутствует свойство SQLConnection в Delphi XE 10

Сообщение VovaTuf » Пт 19 май 2017 11:53

Спасибо, понял!
А как логические значения туда присваивать?
SQLConnection1.Params.Values[SFetchAll] := '0'
или
SQLConnection1.Params.Values[SFetchAll] := 'false'

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Отсутствует свойство SQLConnection в Delphi XE 10

Сообщение AndreyZ » Пн 22 май 2017 09:26

В свойстве соединения TSQLConnection.Params имена и значения параметров необходимо задавать как строковые значения. Например, чтобы задать параметру FetchAll логическое значение False используйте:

Код: Выделить всё

SQLConnection1.Params.Values['FetchAll'] := 'False';

VovaTuf
Сообщения: 5
Зарегистрирован: Чт 18 май 2017 13:28

Re: Отсутствует свойство SQLConnection в Delphi XE 10

Сообщение VovaTuf » Ср 08 ноя 2017 18:09

В новой версии драйвера стало можно задавать опцию FatchAll=false
Работать стало удобнее.
Спасибо!
Но, наткнулся на нехорошее свойство открытых курсоров при установке опции FatchAll=false
Когда пытаюсь изменять (update) таблицу с надоконца профетченным курсором, MS SQL ругается - не хочет выполнять изменения.
Такое поведение для нас неожиданно. Ваш драйвер для Oracle и PostgreSQL совершенно свободно даёт это делать, а драйвер для MS SQL нет.
Может быть Вы в драйвере вместо серверного курсора открываете клиентский курсор? Можете как-нибудь исправить подобную ситуацию? У нас куплена последняя версия Вашего драйвера.
Спасибо!

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Отсутствует свойство SQLConnection в Delphi XE 10

Сообщение AndreyZ » Чт 09 ноя 2017 15:42

Технология dbExpress не позволяет реализовать для датасетов использование курсоров серверного типа в SQL Server. Поэтому dbExpress-датасеты используют курсоры клиентского типа, и мы не можем повлиять на это.

Указанная вами ошибка возникает потому, что стандартный OLEDB provider и SQL Native Client не разрешают изменять данные в таблице до тех пор, пока на стороне сервера остаются невычитанные данные этой таблицы, и мы также не можем повлиять на это поведение.

Для решения проблемы попробуйте использовать Direct режим нашего драйвера. Например, это можно сделать в ран-тайм:

Код: Выделить всё

//  SQLConnection1.DriverName := 'DevartSQLServer';
//  SQLConnection1.GetDriverFunc := 'getSQLDriverSQLServer';
//  SQLConnection1.LibraryName := 'dbexpsda40.dll';
//  SQLConnection1.VendorLib := 'sqlncli11';

  SQLConnection1.DriverName := 'DevartSQLServerDirect';
  SQLConnection1.GetDriverFunc := 'getSQLDriverSQLServerDirect';

Ответить