Привет всем!
Есть такой пример:
#include "stdafx.h"
#include <afxdb.h> // MFC ODBC database classes
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
CDatabase db;
db.OpenEx("DSN=SQL_Server");
CRecordset rs(&db);
rs.Open(CRecordset::snapshot, "{call sp_who()}");
try {
rs.MoveLast();
}
catch (CDBException* e) {
AfxMessageBox(e->m_strError + "\n" + e->m_strStateNativeOrigin);
return 0;
}
AfxMessageBox("Ok!");
return 0;
}
Результат: "Fetch type out of range State:S1106,Native:0,Origin:[Microsoft][ODBC SQL Server Driver]"
Весьма неожиданный, особенно если много раз использвалось то же, но для обычного Select при открытии рекордсета (например "Select * from sysobjects")
Пробовал разные варианты открытия рекордсета — результат не изменился.
Ошибку вызывает MoveLast. Такая же реакция на MoveFirst, хотя MoveNext проходит без ошибки.
Видимо рекордсет от SP чем-то отличается от обычного Select и передвигаться по нему можно только в одну сторону.
Если у кого-нибудь есть дельные соображения как заставить rs двигаться не только вперед, поделитесь пжалста.