|
|
|
Stored Procedure
|
|||
|---|---|---|---|
|
#18+
Проблема использованием Stored Procedure. Например sp_columns_rowset Каким образом в программе на MS С++ получить и обработать результат работы этой процедуры? Может есть у кого примеры подобной обработки. И еще вопрос как использовать SQL- операторы например: CDatabase m_db; m_db.Open(NULL, FALSE, FALSE, pszMB_DB); m_db.ExecSQL( "select count(*) from Tab1 where ID < 10"); как получить этот результат работы этого оператора? Премного благодарен за толковый совет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2004, 16:40 |
|
||
|
Stored Procedure
|
|||
|---|---|---|---|
|
#18+
OsipovicНапример sp_columns_rowset Каким образом в программе на MS С++ получить и обработать результат работы этой процедуры? И еще вопрос как использовать SQL- операторы например: m_db.ExecSQL( "select count(*) from Tab1 where ID < 10"); как получить этот результат работы этого оператора? Что процедура, что не процедура - результаты получаются одинаково. Как - возми любой пример по использованию MFC-шных классов для работы с базами данных. (или это не MFC?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2004, 19:14 |
|
||
|
Stored Procedure
|
|||
|---|---|---|---|
|
#18+
Не мог-бы ты уточнить. Я работаю с SQL Server через ODBC. Не видел в MSDN ни одного подходящего примера. Наверно плохо искал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2004, 10:41 |
|
||
|
Stored Procedure
|
|||
|---|---|---|---|
|
#18+
Попробуй CRecordset (а лучше (кому-как, разумеется) на ADO переходи). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 08:37 |
|
||
|
Stored Procedure
|
|||
|---|---|---|---|
|
#18+
В MSDN примеры на эту тему - ODBC Recordset к сожалению не работающие. nRetCode = SQLFreeHandle(SQL_HANDLE_STMT,m_hstmt); if (!AllocHstmt()) return FALSE; nRetCode = SQLExecDirect(m_hstmt,(SQLCHAR*) "SELECT count(*) from Tab1", SQL_NTS); if( nRetCode == SQL_ERROR ) { // Handle error and return. } nRetCode = SQLExecDirect - постоянно =-1 Не понимаю!!!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 12:31 |
|
||
|
Stored Procedure
|
|||
|---|---|---|---|
|
#18+
Синтаксис точно не помню, но что-то наподобии было: CDatabase m_db; m_db.OpenEx(....); //Открываешь БД CRecordset m_rs(&m_db); m_rs.Open(CRecordset::dynaset(или snapshot),"select * from table",...);//Открываешь Recordset while(!m_rs.IsEOF()) //В цикле смотришь/творишь с данными, которые в рекордсете что хочешь { m_rs.GetFieldValue(...); m_rs.MoveNext(); } m_rs.Close(); m_db.Close(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2004, 11:41 |
|
||
|
Stored Procedure
|
|||
|---|---|---|---|
|
#18+
Эта функция работает с SQL-операторами или Stored Procedure Ограничение: возвращает только 1 int-параметр int ExecDBSQL( CDatabase* pdb, LPCTSTR pszStatement ) { if( !pdb->IsOpen() ) return -2; SWORD sRowCnt; RETCODE rc = -1; RETCODE rcExec = -1; HSTMT hstmt; rcExec = SQLAllocStmt( 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); return (rc>=0) ? sRowCnt : ( (rcExec>=0) ? 0 : -1 ); } Пример count = ExecDBSQL(&dbInput," select count(*) from customers where customerid like 'A%'"); count = ExecDBSQL(&dbInput," spInsertIntoJob 1, 'Test', 2, 3, 4"); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2004, 11:55 |
|
||
|
Stored Procedure
|
|||
|---|---|---|---|
|
#18+
Делать надо так: Код: 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 07:27 |
|
||
|
Stored Procedure
|
|||
|---|---|---|---|
|
#18+
Во-во, я же говорил, переходи на ADO! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 08:17 |
|
||
|
Stored Procedure
|
|||
|---|---|---|---|
|
#18+
Sehr geehrter Siebentearbeit Что-то очень у тебя наворочено. Проще надо. Функция ExecDBSQL у меня работает стабильно в ОDBC. Разумеется сначала надо: CDatabase dbInput; dbInput.Open( NULL, FALSE, FALSE, szName, TRUE ); этого вполне достаточно count = ExecDBSQL(&dbInput,("select id from job where id > 4031"); 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; } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 15:43 |
|
||
|
Stored Procedure
|
|||
|---|---|---|---|
|
#18+
а вот если после того как Код: plaintext 1. 2. 3. 4. Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 19:18 |
|
||
|
Stored Procedure
|
|||
|---|---|---|---|
|
#18+
авторто можно будет и не создавать программно эти параметры а взять те которые будут получен с сервера. Код: plaintext Ок, спасиб, буду знать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2004, 10:38 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32694839&tid=2034420]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 259ms |
| total: | 423ms |

| 0 / 0 |
