Сервер приложений DataSnap и GetProcedureParameters

Обсуждение возникших проблем, предложений и ошибок dbExpress драйверов
Ответить
MaratSafin
Сообщения: 12
Зарегистрирован: Ср 19 июн 2013 05:41

Сервер приложений DataSnap и GetProcedureParameters

Сообщение MaratSafin » Чт 24 окт 2013 09:36

Здравствуйте,
Разрабатываем Мы сервер приложений на технологии DataSnap Delphi XE3 сервер базы данных SQL Server 2012. В DataSnap сервере есть возможность выполнять SQL запросы прямо с клиента DataSnap. То есть цепочка получается такая TSQLDataSet -> TSQLConnection(DataSnap Client) -> DataSnap Server -> TDBXConnection (DevArt SQL Server) -> SQL Server 2012.
Для создания такой цепочки необходимо с клиента (DataSnap) на сервере (DataSnap) вызвать метод DSAdmin.GetConnection.
Теперь в чём проблема: если на клиенте TSQLDataSet в CommandType = ctStoredProc и CommandText содержит имя процедуры, то параметры TSQLDataSet (SQLDataSet.Params) не заполняются автоматически, точнее их там порядка 200 и все левые.
Вот кусок кода из трассировки DataSnap клиента:
Log Opened ==========================================
{CONNECT } ConnectionC1.GetConnectionProperties;
{DRIVER UNKNOWN(} {read 27 bytes:{"result":[0,"DataSnap",2]}}
{DRIVER UNKNOWN(} {read 810 bytes:{"result":[{"rows":[0]},{"data":[1,`]},{"table":[{"fields":[0,false,1,0,true]},{"columns":[17,["QuoteChar",26,0,0,0,16,0,0],["ProcedureQuoteChar",26,0,0,0,16,0,0],["MaxCommands",6,0,0,0,0,0,0],["SupportsTransactions",4,0,0,0,0,0,0],["SupportsNestedTransactions",4,0,0,0,0,0,0],["SupportsRowSetSize",4,0,0,0,0,0,0],["ProductVersion",26,0,0,0,128,0,0],["ProductName",26,0,0,0,128,0,0],["QuotePrefix",26,0,0,0,16,0,0],["QuoteSuffix",26,0,0,0,16,0,0],["SupportsLowerCaseIdentifiers",4,0,0,0,0,0,0],["SupportsUpperCaseIdentifiers",4,0,0,0,0,0,0],["SupportsSPReturnCode",4,0,0,0,0,0,0],["SupportsParameterMetadata",4,0,0,0,0,0,0],["SupportsCatalogFunctions",4,0,0,0,0,0,0],["SupportsCatalogFunctions",4,0,0,0,0,0,0],["SupportsCatalogFunctions",4,0,0,0,0,0,0]]}]}]}{"data":[-37,!"!"d#127#255#255#255 $2008(DataSnap!"!" ]}}
{CONNECT } ConnectionC1.Open;
{METADATA } ConnectionC1.GetProductName;
{METADATA } ConnectionC1.GetDatabaseMetaData;
{METADATA } ConnectionC1.GetDatabaseMetaData;
{METADATA } ConnectionC1.GetDatabaseMetaData;
{METADATA } ConnectionC1.GetDatabaseMetaData;
{METADATA } ConnectionC1.GetDatabaseMetaData;
{METADATA } ConnectionC1.GetDatabaseMetaData;
{COMMAND } CommandC1_1 := ConnectionC1.CreateCommand;
{COMMAND } CommandC1_1.CommandType := 'DataSnap.ServerMethod';
{METADATA } ConnectionC1.GetDatabaseMetaData;
{METADATA } ConnectionC1.GetDatabaseMetaData;
{COMMAND } CommandC1_1.CommandType := 'DataSnap.ServerMethod';
{COMMAND } CommandC1_1.Text := 'DSAdmin.GetConnection';
{PREPARE } CommandC1_1.Prepare;
{DRIVER UNKNOWN(} {read 136 bytes:{"result":[{"handle":[1]},{"fields":[0,false]},{"parameters":[2,[26,0,1,0,0,"NewConName",0,0,0],[34,0,4,0,0,"ReturnParameter",0,0,0]]}]}}
{COMMAND } ReaderC1_1_1 := CommandC1_1.ExecuteQuery;
{DRIVER UNKNOWN(} {read 40 bytes:{"result":[{"rows":[0]},{"data":[1,#192]}]}}
{EXECUTE } RowsAffectedC1_1 := CommandC1_1.RowsAffected
{EXECUTE } {RowsAffectedC1_1 = 0}
{COMMAND } FreeAndNil(CommandC1_1);
{METADATA } ConnectionC1.GetDatabaseMetaData;
{COMMAND } CommandC1_2 := ConnectionC1.CreateCommand;
{COMMAND } CommandC1_2.CommandType := 'Dbx.MetaData';
{COMMAND } CommandC1_2.Text := 'GetProcedureParameters "pAccountsSimpleSearch"';
{COMMAND } ReaderC1_2_1 := CommandC1_2.ExecuteQuery;
Вот кусок кода из трассировки сервера приложений:
Log Opened ==========================================
{CONNECT } ConnectionC1.GetConnectionProperties;
{CONNECT } ConnectionC1.Open;
{METADATA } ConnectionC1.GetDatabaseMetaData;
{METADATA } ConnectionC1.GetDatabaseMetaData;
{METADATA } ConnectionC1.GetDatabaseMetaData;
{METADATA } ConnectionC1.GetDatabaseMetaData;
{COMMAND } CommandC1_1 := ConnectionC1.CreateCommand;
{COMMAND } CommandC1_1.CommandType := 'Dbx.MetaData';
{COMMAND } CommandC1_1.Text := 'GetProcedureParameters ';
{COMMAND } ReaderC1_1_1 := CommandC1_1.ExecuteQuery;
То есть имя процедуры "pAccountsSimpleSearch" потерялось на сервере приложений, при обращении к "DevArt SQL Server", можно было бы сказать, что проблема в DataSnap Сервере, но с драйвером Embarcadero MSSQL всё работает, нормально.

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

Re: Сервер приложений DataSnap и GetProcedureParameters

Сообщение AndreyZ » Чт 24 окт 2013 12:59

Пришлите пожалуйста тестовый проект демонстрирующий данную проблему на andreyz*devart*com .

MaratSafin
Сообщения: 12
Зарегистрирован: Ср 19 июн 2013 05:41

Re: Сервер приложений DataSnap и GetProcedureParameters

Сообщение MaratSafin » Пт 25 окт 2013 03:59

AndreyZ писал(а):Пришлите пожалуйста тестовый проект демонстрирующий данную проблему на andreyz*devart*com .
Отправил.

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

Re: Сервер приложений DataSnap и GetProcedureParameters

Сообщение AndreyZ » Пт 25 окт 2013 14:47

Спасибо за информацию. Мы устранили данную проблему. Данное исправление будет включено в следующий билд dbExpress driver for SQL Server.

MaratSafin
Сообщения: 12
Зарегистрирован: Ср 19 июн 2013 05:41

Re: Сервер приложений DataSnap и GetProcedureParameters

Сообщение MaratSafin » Вт 19 ноя 2013 09:04

А можно получить драйвер с данным исправлением, в ближайшее время, дело в том, что в декабре нужно внедрять проект?
Лицензию я приобрёл.

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

Re: Сервер приложений DataSnap и GetProcedureParameters

Сообщение AndreyZ » Вт 19 ноя 2013 14:04

Данное исправление вошло в dbExpress driver for SQL Server версии 6.3.4. Вы можете скачать данную версию со страницы для зарегистрированных пользователей.

MaratSafin
Сообщения: 12
Зарегистрирован: Ср 19 июн 2013 05:41

Re: Сервер приложений DataSnap и GetProcedureParameters

Сообщение MaratSafin » Чт 21 ноя 2013 04:56

Скачал dbExpress driver for SQL Server Standard Version 6.3.4 (22-Oct-2013). Но ни чего не изменилось. Ошибка осталась.

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

Re: Сервер приложений DataSnap и GetProcedureParameters

Сообщение AndreyZ » Чт 21 ноя 2013 08:48

Я извиняюсь, данное исправление было сделано после выхода версии 6.3.4 и поэтому оно не вошло в нее. Пришлите пожалуйста свой номер лицензии на andreyz*devart*com , и я Вам вышлю версию с исправлением.

Ответить