|
|
|
возвращаемые параметры ХП в MSSQL 2000
|
|||
|---|---|---|---|
|
#18+
Ребятки, помогите горю !!! Есть хранимая процедура в базе по MSSQL2000, которя подсчитывает сумму по таблице (get_summ_money) и возвращает значение суммы. Есть приложение на MFC которому необходимо вызвать эту ХП и в диалоге отобразить сумму. Пока мои процедуры не возвращали значений все было хорошо: sql.Format("exec sp_summ_money %s, %s", begin_date, end_date); db.ExecuteSQL(sql); Но все дело в том, что ExecuteSQL не возвращает значений ;((( Как все это можно сделать через ODBC ??? ХП можно переделать, но обязательно чтобы ХП. Подскажите, а то мне завтра крышка ;( Огромное спасибо ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2004, 20:34 |
|
||
|
возвращаемые параметры ХП в MSSQL 2000
|
|||
|---|---|---|---|
|
#18+
Через 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; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 10:46 |
|
||
|
возвращаемые параметры ХП в MSSQL 2000
|
|||
|---|---|---|---|
|
#18+
Ну очевидно вам А(О?)леся надо воспользоваться не классом CDatabase, а хотя бы CRecordset, открыв его от своего запроса... может что и вернется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 16:12 |
|
||
|
возвращаемые параметры ХП в MSSQL 2000
|
|||
|---|---|---|---|
|
#18+
Функция 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; } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2004, 18:49 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=432&tid=2034392]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 310ms |

| 0 / 0 |
