Хранимые процедуры и запрос в программе - VB
Формулировка задачи:
Приветствую.
Заметил следующую интересную особенность.
Если запрос к SQL Server делать из программы и хранить его в программе, т.е. вот так:
rs.open 'SELECT * FROM table', cn, adOpenStatic, adLockReadOnly
То затем без проблем можно узнать кол-во записей (rs.RecordCount).
Но, если вызывать хранимую процедуру, содержащую тот же запрос:
rs.open 'sp_query', cn, adOpenStatic, adLockReadOnly
то количество записей вернуть невозможно. И курсор становится не статическим, а нечто вроде ForwardOnly...
Как с этим бороться?
ЗЫ: SELECT Count(*) не подойдет - у меня запрос на 57 строк - выполняется долго...
Решение задачи: «Хранимые процедуры и запрос в программе»
textual
Листинг программы
Private Function SMS_GetOracleMessages() As ADODB.Recordset
'<EhHeader>
On Error GoTo SMS_GetOracleMessages_Err
'</EhHeader>
Dim cmd As ADODB.Command
Dim Rs As ADODB.Recordset
Dim p As ADODB.Parameters
100 Set Rs = New ADODB.Recordset
110 Rs.CursorLocation = adUseClient
120 Set cmd = New ADODB.Command
130 cmd.ActiveConnection = modADO.GetConnectionString
140 cmd.CommandType = adCmdStoredProc
160 cmd.CommandText = 'SMS_GetOracleMessages_GAZ'
170 Set p = cmd.Parameters
180 p.Append cmd.CreateParameter('@TerminalID', adInteger, adParamInput, , mMain.TerminalID)
210 Rs.Open cmd, , adOpenStatic, adLockReadOnly
220 Set SMS_GetOracleMessages = Rs
'<EhFooter>
lb_out:
230 Set p = Nothing
240 Set cmd = Nothing
250 Set Rs = Nothing
Exit Function
SMS_GetOracleMessages_Err:
LogError 'SMS_GetOracleMessages'
Resume lb_out
'</EhFooter>
End Function