Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Вызов процедуры с операторами DDL DML


Автор: sergey_85 29.12.2010, 14:15
Привет!

Работаю с MSSQL server 2000 + Visual C++ (MSVS 2005), выполняю следующую процедуру и в ответ получаю набор строк, и здесь вылетает ошибка Тип получения выходит за пределы допустимого диапазона , есть одно НО если закоментить update и insert, оставив только select, то все работает!

В чем может быть дело?

Код

CDatabase db;

    BOOL fl = db.OpenEx(L"DRIVER=SQL Server;SERVER=localhost;UID=user;PWD=12345;APP=TODO: <Product name>;WSID=Admin;DATABASE=Test");
    
    CRecordset rs(&db);
    BOOL isOk = rs.Open(-1, L"{CALL dbo.ptrans_GetListEx}");

    
    rs.MoveFirst(); //здесь вылетает

    while(rs.IsEOF() == FALSE)
    {
        CString s;
        rs.GetFieldValue((short)0, s);
        rs.MoveNext();
    }


Код

ALTER procedure [dbo].[ptrans_GetList]
as
begin

insert into dbo.States(Description) values ('aww[fd efe')
update dbo.States set Description = 'HAPPY NEW YEAR' where StateId = 9

select id from dbo.Transfers

end

Автор: TaNK 29.12.2010, 16:42
может go поможет, между insert, update, select

Добавлено через 1 минуту и 14 секунд
попробывал скрипт прогнать через Query Analizer - работает и без go

Добавлено через 8 минут и 7 секунд
проверил на такой конфигурации 
RAD XE Builder 
MS Server 2000
компонент доступа UNIDAC
все обновляется и возвращает данные 

Автор: sergey_85 30.12.2010, 12:35
Исправил, поставил в начале процедуры SET NOCOUNT ON и пользуюсь драйвером Libodbc++ 

http://libodbcxx.sourceforge.net/libodbc++/INSTALL/win32.html#MSVC

Вопрос решен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)