powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ADO. Работа с ХП bp VC. ASA 9.
16 сообщений из 16, страница 1 из 1
ADO. Работа с ХП bp VC. ASA 9.
    #33261299
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет ли у кого примера работы через ADO из С++ с ХП которая возвращает и OUT параметры и набор данных одновременно. Есть проблемки именно в этом случае.
Я на форуме rsdn, попытался задать этот вопрос, но пока без результата.
http://www.rsdn.ru/Forum/Message.aspx?mid=1372987&only=1
все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33261966
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там же все элементарно. Покажи свой неработающий код - подправим.
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33262009
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот код.
Тестовая процедурка:

Код: plaintext
1.
2.
3.
4.
5.
ALTER PROCEDURE "DBA"."test_ado_proc1"(OUT @p_out int)
BEGIN
    set @p_out= 10 ;
    select 'test1';    
END

Код на С++
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
CoInitialize(NULL);
//Соединение с БД. Мост ADODB-ODBC. Имеется настроенный источник testdb
_ConnectionPtr conn("ADODB.Connection");
_bstr_t connection_str="Provider='ASAProv';Data Source=testdb";
conn->Open(connection_str,"DBA", "***", adConnectUnspecified);

_CommandPtr sp("ADODB.Command");		
ParametersPtr params;
_ParameterPtr out_param;

//Установка имени ХП
sp->PutRefActiveConnection(conn);
sp->PutCommandText("test_ado_proc1");
sp->PutCommandType(adCmdStoredProc);
//Установка параметров ХП	
sp->GetParameters()->Refresh();
params=sp->GetParameters();	

//Запуск ХП	
_RecordsetPtr sp_rowset("ADODB.Recordset");
_variant_t vtRowsAffected;
sp_rowset=sp->Execute(&vtRowsAffected, &vtMissing, adCmdStoredProc);
std::cout << "rows affected: " << (double)vtRowsAffected << '\n';	
ado_show_rocordset(sp_rowset); //Вывод набора данных на экран
sp_rowset->Close();
	
//Получение OUT параметров ХП
_variant_t param_val;
out_param=params->GetItem("@p_out");
std::cout << "OUT Params:\n";
std::cout << "Name : " << (char*)( (_bstr_t)out_param->GetName()) << '\n';
param_val=out_param->GetValue();
std::cout << "Value: " << (int)param_val << '\n';
Значение OUT параметра - 0, а не 10 (бывают и другие варианты).

все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33262042
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Параметры надо создавать и привязывать их к Command объекту ДО запуска процедуры.
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33262055
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так
sp->GetParameters()->Refresh();
params=sp->GetParameters();
это и делает.

все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33262067
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_oldТак
sp->GetParameters()->Refresh();
params=sp->GetParameters();
это и делает.
Уверен? :)
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33262100
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уверен весьма (но не на 100%). Вот если я в хранимке уберу select, т.е она будет только возвращать out параметр, то все заработает корректно.
ALTER PROCEDURE "DBA"."test_ado_proc1"(OUT @p_out int)
BEGIN
set @p_out=10;
select 'test1';
END

К тому же скрипт получения out-параметра как видите содержит код вывода его имени (и типа, который я опустил здесь). Во всех случаях имя и тип - корректны, т.е.
sp->GetParameters()->Refresh();
params=sp->GetParameters();
работают правильно.

все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33264837
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал два изменения.
Параметра с OUT поменял на INOUT. Т.е получилось так:

все наши на www.corba.kubsu.ru
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
ALTER PROCEDURE "DBA"."test_ado_proc1"( INOUT @p_out int)
BEGIN
    set @p_out= 10 ;
    select 'test1'    
END
В С++ коде параметр создал вручную и перед вызовом процедуры поместил в него значение. @p_out= 5 . 

out_param=sp->CreateParameter("@p_out",adInteger,adParamInputOutput, sizeof(int), vtMissing);
params=sp->GetParameters();
params->Append(out_param);
out_param->PutValue( 5 );

После вызова ХП, значение переменной осталось таким-же, а не  10 .
Как только из ХП убрал SELECT, возвращаемое значение стало верным, т.е= 10 .

Почему не работает получение OUT параметров - понять хоть тресни не могу. Есть ли у кого РАБОТАЮЩИЙ пример работы с ADO для случая аналогичного моему?
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33265106
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут пример как сами мелкомягкие с параметрами работают.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adosql/adoprg02_525v.asp
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33265534
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я эту статью прочитал еще до написания своего кода на С++. Да и вышеприведенный мой код в общем-то по статье и написан. Весь писк в том, что он просто не работает как надо на С++. Вообще складывается ощущение, что АДО - технология разработанная исключительно для бейсика. Все примеры в мсдн идут на бейсике. Например, как на С++ написть такую конструкцию из VB:

if someObj is nothing then

Я например не знаю, и нигде пока найти не смог.

все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33266111
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попросил коллегу сделать аналогичную тестовую процедурку на MSSQL.
Для работы сней воспользовался тем-же кодом на С++.
И шовы думаете? Она таки заработала!!!
Итого:
У ASA какие-то проблемы с провайдером или во всей связке ADO->ODBC.
Выводы:
Правы были те, кто говорил, что ADO - это технология микрософта, разработанная для продуктов микрософта. Это к вопросу, который я поднимал в топике http://www.sql.ru/forum/actualthread.aspx?tid=209047
Попробую описать проблему в сайбейзовом форуме. Может помогут.
все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33266554
Фотография Vovaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если оба значения возвращать через select, т.е. вообще отказаться от параметров out ?
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33267207
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой смысл использовать навороченную сложную библиотеку, что-бы иметь то-же гемор, что и с БДЕ? Хочется, что-бы все работало.
все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33267286
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня для вас две новости, одна хорошая и одна плохая :)
Хорошая новость: я весь день игрался с этой процедурой (с селектом и возвращаемым параметром) и обнаружил что все работает так как надо если писать клиента на C-ESQL или Java-jconnect.
Плохая новость: VBS-ADO, C-ADO, Delphi-ADO и даже простой C-ODBC получить возвращаемый парметер мне не удалось.... Подозреваю что глюк в драйвере ODBC. Проверял на драйверах от ASA9 и ASA8.
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33269708
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я написал пост с описание проблемы на news сервер поддержки ASA.
(sybase.public.sqlanywhere.general). Пост от 13.09 12:27.
Прошло пару дней и никакой реакции. Или мой английский очень ужасен, или проблема - сильно сложная.
2white_owl.
Просьба - черкните пожалуйста результаты своих экспериментов - как ответ или как новый пост в форуме. Может что-то изменится...

все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
ADO. Работа с ХП bp VC. ASA 9.
    #33271408
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_old wrote:

> Я написал пост с описание проблемы на news сервер поддержки ASA.
> (sybase.public.sqlanywhere.general). Пост от 13.09 12:27.
> Прошло пару дней и никакой реакции. Или мой английский очень ужасен, или
> проблема - сильно сложная.

Или просто всем лениво думать (я тоже отвечаю не на все вопросы, на
которые знаю или могу найти ответ ;)).
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ADO. Работа с ХП bp VC. ASA 9.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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