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

Код: 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
09.09.2005, 18:03
    #33262042
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO. Работа с ХП bp VC. ASA 9.
Параметры надо создавать и привязывать их к Command объекту ДО запуска процедуры.
...
Рейтинг: 0 / 0
09.09.2005, 18:13
    #33262055
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO. Работа с ХП bp VC. ASA 9.
Так
sp->GetParameters()->Refresh();
params=sp->GetParameters();
это и делает.

все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
09.09.2005, 18:20
    #33262067
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO. Работа с ХП bp VC. ASA 9.
Ggg_oldТак
sp->GetParameters()->Refresh();
params=sp->GetParameters();
это и делает.
Уверен? :)
...
Рейтинг: 0 / 0
09.09.2005, 18:37
    #33262100
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO. Работа с ХП bp VC. ASA 9.
Уверен весьма (но не на 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
12.09.2005, 17:57
    #33264837
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO. Работа с ХП bp VC. ASA 9.
Сделал два изменения.
Параметра с 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
12.09.2005, 21:30
    #33265106
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO. Работа с ХП bp VC. ASA 9.
Вот тут пример как сами мелкомягкие с параметрами работают.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adosql/adoprg02_525v.asp
...
Рейтинг: 0 / 0
13.09.2005, 10:08
    #33265534
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO. Работа с ХП bp VC. ASA 9.
Я эту статью прочитал еще до написания своего кода на С++. Да и вышеприведенный мой код в общем-то по статье и написан. Весь писк в том, что он просто не работает как надо на С++. Вообще складывается ощущение, что АДО - технология разработанная исключительно для бейсика. Все примеры в мсдн идут на бейсике. Например, как на С++ написть такую конструкцию из VB:

if someObj is nothing then

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

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

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

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

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


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