powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / помогите с вторым Recordset
2 сообщений из 2, страница 1 из 1
помогите с вторым Recordset
    #34120026
Sotnikovsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте господа, помогите с проблемой, необходимо из Mssql вызвать хранимую процедуру, которая вернет мне 2 рекордсета? причем обработать мне надо оба, с первым проблем никаких не наблюдается, подскажите в чем проблема, делаю так
Код: 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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
Sub connect(zapros As Boolean) ' Процедура подключения 
 Dim Space As ADODB.Connection

 Set space = New ADODB.Connection

 Space.ConnectionString = "Provider=MSDASQL.1;Password=PWD;Persist Security Info=True;User ID=User;Data Source=NameODBC"
 Space.Open

 rec_TZ Space

End Sub

Sub rec_TZ(con As ADODB.Connection) ' Процедура формирования параметров для запроса
 Dim T_start As String
 Dim sqlstring As String
 Dim rst As ADODB.Recordset
 Dim Checkdate As Boolean
 Const AllStation = "Âñå ñòàíöèè"

Set rst = New ADODB.Recordset
sqlstring = "exec repTZSched  "

  
Set rst.ActiveConnection = con
rst.Open sqlstring
if not rst.eof then
Обработка первого рекордсета
end if

'Set rst=rst.NextRecordset ' 
'if not rst.eof then
'обработка 
'end if
'Если сделать вот так , то в принципе все работает, но мне удобнее передать RecordSet в процедуру


Proc_one_station rst, con    ' Передаю RecordSet и Connection

End Sub

Sub Proc_one_station(rst As ADODB.Recordset, con As ADODB.Connection)           Dim Row As Integer
Dim rowSummLot As Integer
Dim chapt As String
Dim countPOS As Integer
Dim countarray As Integer

Row_Other = Row_chapter( 0 )
Row_PIR = R_PIR
Row_Device = R_Device
Row_SMR = R_SMR
Row =  7 
Row_chapter( 0 ) = Row
countPOS =  1 
countarray =  1 
i = rst.Fields.Count ' проверяю количество полей в первом RecordSet 
Set rst = rst.NextRecordset
i = rst.Fields.Count 'Во втором RecordSet ? сделал временно для удобства
If Not rst.EOF Then
new_name:
'For j = 0 To 3
rst.MoveFirst          'Вот в этом месте возникает ошибка типа
                            'run-time error '-2147217896 (80040e18)':
                           'Не удается вновь задать положение в наборе строк
Дальнейшая обработка


End Sub
...
Рейтинг: 0 / 0
помогите с вторым Recordset
    #34120499
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sotnikovsa
i = rst.Fields.Count ' проверяю количество полей в первом RecordSet
Set rst = rst.NextRecordset
i = rst.Fields.Count 'Во втором RecordSet ? сделал временно для удобства
If Not rst.EOF Then
new_name:
'For j = 0 To 3
rst.MoveFirst 'Вот в этом месте возникает ошибка типа
'run-time error '-2147217896 (80040e18)':
'Не удается вновь задать положение в наборе строк
Дальнейшая обработка
End Sub
[/src]
1) Зачем ты читаешь количество полей в предыдущем рекордсете?
2) Зачем двигать курсор на первую запись сразу после взятия второго рекордсета? Оно и так будет стоять на первой записи.
Ошибка вылезает скорее всего потому, что у тебя курсор открывается в однонаправленном режиме и MoveFirst/MovePrevious по определению не будут работать.

Вообще, я бы сделал вызов процедуры чуть попроще:
Код: plaintext
1.
2.
3.
4.
5.
on error resume next
i=false
i = ProceedSecondRS( rst.NextRecordset)
if i = false then
    ' не смогли открыть второй... десятый рекордсет или ошибка внутри процедуры
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / помогите с вторым Recordset
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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