powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / проблема с Recordset-ом
12 сообщений из 12, страница 1 из 1
проблема с Recordset-ом
    #34327268
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.
У меня вот такая проблема.
Давольно стандартная операция, программно запускаю хранимую процедуру в MSSQLServer 2000.
результат возвращаю в виде набора заисей в мой Recordset. Все работает.

Public Function Pogr_sut(ddmmyy As Variant, sODBC As Variant) As Variant
Dim connectString As String
Dim PogrArray() As Variant
Dim p As ADODB.Parameter

connectString = CStr(sODBC)
Set adoConnection = New ADODB.Connection
Set adoRecordset = New ADODB.Recordset
Set adoCommand = New ADODB.Command

adoConnection.Open connectString
With adoCommand
Set .ActiveConnection = adoConnection
.CommandType = adCmdStoredProc
.CommandText = "ItogPogrSut"
Set p = .CreateParameter("mdate", adVarChar, adParamInput, 6, CStr(ddmmyy))
.Parameters.Append p
Set adoRecordset = .Execute
End With

If (adoRecordset.BOF) And (adoRecordset.EOF) Then
ReDim PogrArray(1)
PogrArray(0) = "Нет данных"
Else
iRecCount = adoRecordset.GetRows()
iRows% = UBound(iRecCount, 2) + 1
ReDim PogrArray(iRows%, 6)

'On Error GoTo transError

adoConnection.BeginTrans
adoRecordset.MoveFirst
i% = 0
While Not adoRecordset.EOF
PogrArray(i%, 0) = adoRecordset!kotd
PogrArray(i%, 1) = adoRecordset!tp
PogrArray(i%, 2) = adoRecordset!rodv
PogrArray(i%, 3) = adoRecordset!park
PogrArray(i%, 4) = adoRecordset!prin
PogrArray(i%, 5) = adoRecordset!KolVag

adoRecordset.MoveNext
i% = i% + 1
Wend
adoConnection.CommitTrans
End If
adoRecordset.Close
Pogr = PogrArray
Exit Function
transError:
adoConnection.RollbackTrans
adoRecordset.Close
adoConnection.Close
End Function

Новот когда начинаю работать с этим рекортсетом то он вначале нормально выдает количесво записей в нем,
строка iRecCount = adoRecordset.GetRows()
iRows% = UBound(iRecCount, 2) + 1

Но затем выдает ошибку на строке adoRecordset.MoveFirst.
Текст ошибки:
авторRun-time error '-2147217896 (80040e18)'

Не удается вновь задать положение в наборе строк
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34327324
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
iRecCount = adoRecordset.GetRows()
- вы получите массив всех строк из рекордсета, а не кол-во строк в нем !!!
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34327335
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и вообще ваш код посути абсурден в части получения массива и открытия зачем-то для этого транзакции, а затем вы ее еще commit, а там нечего коммитеть
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34327464
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneи вообще ваш код посути абсурден в части получения массива и открытия зачем-то для этого транзакции, а затем вы ее еще commit, а там нечего коммитеть

Konst подскажи как на твой взгляд будет правельнее.
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34327518
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До конца не совсем понял , что вы в итоге хотите получить, но может так:


Код: 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.
Public Function Pogr(ByVal ddmmyy As String, ByVal ConnString As String) As Variant
    On Error GoTo Err_Debug
    Dim p As ADODB.Parameter
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim cmd As ADODB.Command


 100      Set cn = New ADODB.Connection
 110      cn.CursorLocation = adUseClient
 120      cn.Open ConnString
    
 130      Set rs = New ADODB.Recordset
 140      rs.CursorLocation = adUseClient
    
 150      Set cmd = New ADODB.Command
 160      With cmd
 170         Set .ActiveConnection = cn
 180         .CommandType = adCmdStoredProc
 190         .CommandText = "ItogPogrSut"
 200         Set p = .CreateParameter("mdate", adVarChar, adParamInput,  6 , ddmmyy)
 210         .Parameters.Append p
        End With
 220      rs.Open cmd, , adOpenStatic, adLockReadOnly
    
 230      Pogr = rs.GetRows()
    

lb_out:
 240      Set p = Nothing
 250      Set cmd = Nothing
 260      Set rs = Nothing
 270      Set cn = Nothing
        Exit Function

Err_Debug:
         LogError "Pogr"
         Resume lb_out
End Function
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34327996
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй создать adoRecordset как динамический...
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34330210
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПопробуй создать adoRecordset как динамический...
Покажи как ...
если так то пробовал тоже самое
Set adoConnection = CreateObject("ADODB.Connection")
Set adoRecordset = CreateObject("ADODB.Recordset")
...
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34330358
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй перед строчкой
Код: plaintext
Set adoRecordset = .Execute
Вставить
Код: plaintext
adoRecordset.CursorType = adOpenDynamic
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34330444
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не. это не поможет.. сейчас "почищу" твой код и пришлю...
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34330808
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй заменить свой код на вот этот:
Код: 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.
Public Function Pogr_sut(ddmmyy As Variant, sODBC As Variant) As Variant
Dim PogrArray() As Variant, vRecords() As Variant
Dim iRowsUBound As Long, iColsUBound As Long, i As Long
Dim adoRecordset As ADODB.Recordset, adoConnection As ADODB.Connection
Dim adoCommand As ADODB.Command, p As ADODB.Parameter

Set adoConnection = New ADODB.Connection
adoConnection.Open CStr(sODBC)
Set adoCommand = New ADODB.Command
With adoCommand
    Set .ActiveConnection = adoConnection
    .CommandType = adCmdStoredProc
    .CommandText = "ItogPogrSut"
    Set p = .CreateParameter("mdate", adVarChar, adParamInput,  6 , CStr(ddmmyy))
    .Parameters.Append p
    Set adoRecordset = .Execute
End With

If (adoRecordset.BOF) And (adoRecordset.EOF) Then
    ReDim PogrArray( 1 )
    PogrArray( 0 ) = "Нет данных"
Else
    vRecords = adoRecordset.GetRows
    ' Все. Больше нам Рекордсет и Коннекшн не нужны, потому их и закрываем.
    adoRecordset.Close
    If adoRecordset.State = adStateOpen Then adoRecordset.Close: Set adoRecordset = Nothing
    If adoConnection.State = adStateOpen Then adoConnection.Close: Set adoConnection = Nothing
    ' Теперь "танцуем" массив
    iRowsUBound = UBound(vRecords,  2 ): iColsUBound = UBound(vRecords,  1 )
    ReDim PogrArray(iRowsUBound, iColsUBound)
On Error GoTo transError
    For i =  0  To iRowsUBound
        PogrArray(i,  0 ) = vRecords( 0 , i) 'kotd
        PogrArray(i,  1 ) = vRecords( 1 , i) 'tp
        PogrArray(i,  2 ) = vRecords( 2 , i) 'rodv
        PogrArray(i,  3 ) = vRecords( 3 , i) 'park
        PogrArray(i,  4 ) = vRecords( 4 , i) 'prin
        PogrArray(i,  5 ) = vRecords( 5 , i) 'KolVag
    Next i
End If

Pogr = PogrArray
Exit Function

transError:
    If Not adoRecordset Is Nothing Then If adoRecordset.State = adStateOpen Then adoRecordset.Close
    If Not adoConnection Is Nothing Then If adoConnection.State = adStateOpen Then adoConnection.Close
End Function
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34330816
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
упс...
в куске:
Код: plaintext
1.
adoRecordset.Close
If adoRecordset.State = adStateOpen Then adoRecordset.Close: Set adoRecordset = Nothing
удали
Код: plaintext
adoRecordset.Close
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34331926
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Проходящий.
Все получилось.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / проблема с Recordset-ом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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