Проблема с recordset`ом

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Проблема с recordset`ом

Сообщение Алексей К. » 17.01.2007 (Ср) 11:15

Делаю экспорт из аца в эксель в цикле получаю набор из запроса и вставляю в эксель через:
my_report.Worksheets(1).Range(cl).CopyFromRecordset rs
если цикл из одного такта - то проходит все нормально, если больше то ругается на строке открытия рекордсета: 3709, невозможно использование подключения для выполнения операции. Оно закрыто или не допускается в данном контексте.
Если закоментировать строку с CopyFromRecordset, цикл проходит нормально и наборы(рекордсеты) открываются и закрываются нормально.
Где грабли?
Код: Выделить всё
Dim excell As Object
Dim my_report As Excel.Workbook
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
путь = App.Path
connect_str = "Data Source=" + путь + "\5min.mdb"
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
With cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = connect_str
        .Open
End With
With rs
        .ActiveConnection = cn
        .CursorType = adOpenStatic
        .CursorLocation = adUseClient
        .LockType = adLockOptimistic
End With
Set excell = CreateObject("Excel.Application")
Set my_report = excell.Workbooks.Add
'excell.Visible = False 'видно или не видно excel  в панели задач
my_report.Worksheets(1).Cells(1, 1) = Format(DTPicker1.Value, "dd mmmm yyyy")
my_report.Worksheets(1).Cells(2, 1) = "период"

For i = 1 To ListView1.ListItems.Count
    If ListView1.ListItems(i).Checked = True Then
        запрос = "select my_value*0.001 from mosh where my_date='" + CStr(DTPicker1.Value) + "' and id=" + ListView1.ListItems(i).SubItems(1)
        rs.Open запрос
        'my_report.Worksheets(1).Cells(2, 2) = запрос
        cl = "b" & i
        my_report.Worksheets(1).Range(cl).CopyFromRecordset rs
        'dd = rs.RecordCount
        rs.Close
    End If
Next i

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 17.01.2007 (Ср) 11:38

После закрытия рекордсета соединение от него отключается. Вместо
Код: Выделить всё
With cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = connect_str
        .Open
End With
With rs
        .ActiveConnection = cn
        .CursorType = adOpenStatic
        .CursorLocation = adUseClient
        .LockType = adLockOptimistic
End With
...
        rs.Open запрос
...
нужно
Код: Выделить всё
With cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = connect_str
        .CursorLocation = adUseClient
        .Open
End With
...
        rs.Open запрос, cn, adOpenStatic, adLockOptimistic
...
Лучший способ понять что-то самому — объяснить это другому.

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 17.01.2007 (Ср) 13:09

Спасибо огромное! Респект тебе и уважуха! :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 110

    TopList