Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / возвращаемые параметры ХП в MSSQL 2000 / 4 сообщений из 4, страница 1 из 1
04.02.2004, 20:34
    #32398612
Алеся
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возвращаемые параметры ХП в MSSQL 2000
Ребятки, помогите горю !!!

Есть хранимая процедура в базе по MSSQL2000, которя подсчитывает сумму по таблице (get_summ_money) и возвращает значение суммы.

Есть приложение на MFC которому необходимо вызвать эту ХП и в диалоге отобразить сумму.

Пока мои процедуры не возвращали значений все было хорошо:

sql.Format("exec sp_summ_money %s, %s", begin_date, end_date);
db.ExecuteSQL(sql);

Но все дело в том, что ExecuteSQL не возвращает значений ;(((

Как все это можно сделать через ODBC ??? ХП можно переделать, но обязательно чтобы ХП.

Подскажите, а то мне завтра крышка ;(

Огромное спасибо !
...
Рейтинг: 0 / 0
05.02.2004, 10:46
    #32398944
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возвращаемые параметры ХП в MSSQL 2000
Через ADO можно из сохранённых процедур возвращать параметры.

Чё-нить типа этого:

VARIANT vtName, vtSourceID;
_ParameterPtr prmName = NULL;// это будут 2 in
_ParameterPtr prmSourceID = NULL;
_ParameterPtr prmTask = NULL;// а этот - out
_CommandPtr GetTaskIdCmd = NULL;

try
{
TESTHR (GetTaskIdCmd.CreateInstance(__uuidof(Command)));
catch(...)
{
}
// скажем "кто"
vtName.vt = VT_BSTR;
vtName.bstrVal = (_bstr_t)(name);

vtSourceID.vt = VT_I4;
vtSourceID.intVal = 5;
// и заведём как параметры для нашей сп
prmName = GetTaskIdCmd->CreateParameter( "reg_number",adBSTR,adParamInput,strlen(name),vtName);
GetTaskIdCmd->Parameters->Append(prmName);

prmSourceID = GetTaskIdCmd->CreateParameter( "source_id",adInteger,adParamInput,sizeof(int),vtSourceID);
GetTaskIdCmd->Parameters->Append(prmSourceID);
// этот выходящий
prmTask = GetTaskIdCmd->CreateParameter( "task_id",adInteger,adParamOutput,sizeof(int));
GetTaskIdCmd->Parameters->Append(prmTask);
//Ап!
try
{
GetTaskIdCmd->Execute(NULL,NULL,adCmdStoredProc);
//вот тут мы его и получили!
int Task_id = prmTask->Value.intVal;
}catch(_com_error &e)
{ // Notify the user of errors if any.
return 1;
}
...
Рейтинг: 0 / 0
05.02.2004, 16:12
    #32399673
_Konst
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возвращаемые параметры ХП в MSSQL 2000
Ну очевидно вам А(О?)леся надо воспользоваться не классом CDatabase, а хотя бы CRecordset, открыв его от своего запроса... может что и вернется.
...
Рейтинг: 0 / 0
22.09.2004, 18:49
    #32707425
Osipovic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возвращаемые параметры ХП в MSSQL 2000
Функция ExecDBSQL у меня работает стабильно в ОDBC.
Разумеется сначала надо:

CDatabase dbInput;
dbInput.Open( NULL, FALSE, FALSE, szName, TRUE );
этого вполне достаточно
count = ExecDBSQL(&dbInput,("select id from job where id > 4031");
count = ExecDBSQL(&dbInput,("spSamProcedur");


int ExecDBSQL( CDatabase* pdb, LPCTSTR pszStatement )
{
if( !pdb->IsOpen() )
return -2;
SWORD sRowCnt;
RETCODE rc = -1;
RETCODE rcExec = -1;
HSTMT hstmt;

// SQLAllocStmt( pdb->m_hdbc, &hstmt );
try
{
rcExec = SQLAllocHandle(SQL_HANDLE_STMT, pdb->m_hdbc, &hstmt);
if( rcExec >= 0 )
rcExec = SQLExecDirect(hstmt, (SQLCHAR*)pszStatement, SQL_NTS);

if( rcExec >= 0 )
rc = SQLFetch(hstmt);

if( rc >= 0 )
rc = SQLGetData(hstmt,1, SQL_C_SSHORT, &sRowCnt, sizeof(sRowCnt), NULL);

SQLFreeHandle( SQL_HANDLE_STMT,hstmt );

return (rc>=0) ? sRowCnt : ( (rcExec>=0) ? rcExec : -1 );
}
catch (CDBException* pDBException)
{
Display(_T("Exception during ExecDBSQL : %s"),
pDBException->m_strError.Trim());
pDBException->Delete();
return -1;
}
}
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / возвращаемые параметры ХП в MSSQL 2000 / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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