Не получается создать рекордсет

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Lame
Сообщения: 24
Зарегистрирован: 25 дек 2007, 10:46

Dim cnnConn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim MyConn As String
Dim QSQL As String

MyConn = "O:\Sales.mdb"

QSQL = "SELECT Клиент FROM Sales;"


Set cnnConn = New ADODB.Connection
With cnnConn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Open MyConn
Set Rs = .Execute(sSQL)

End With


End Sub


Пишет ошибку User-defined type not defined
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

Точно не знаю, но может вы забыли какую-нибудь библиотеку подключить? Т.к. вы используете раннее связываие (сразу обращаетесь к объектам, а не создаёте их во время макроса), то у вас должна быть подключена нужная бибилотека до начала макроса.
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте Lame.

Код: Выделить всё

...
Set rs = New ADODB.Recordset
   rs.Open QSQL, cnnConn
рекордсет нельзя выполнить, его можно создать и открыть. ;)
Выполнить можно запрос в созданном коннекте:
cnnConn.Execute QSQL.
Евгений.
Lame
Сообщения: 24
Зарегистрирован: 25 дек 2007, 10:46

Спасибо. Я вчера разобрался с помощью справки и одного форума. Задача была быстро извлекать данные из СУБД из пернесить в Excel для анализа. Вот простой пример того что получилось:

Sub MakinRecordset()

Dim cnnConn As ADODB.Connection
Dim cmdCommand As ADODB.Command
Dim Rs As ADODB.Recordset
Dim MyConn As String
Dim sSQL As String
Dim objPivotCache As Variant

' Определение переменных
MyConn = "O:\Sales.mdb"
sSQL = "SELECT Клиент, [Сумма, руб] FROM Sales;"

' Создание связи с БД
Set cnnConn = New ADODB.Connection
With cnnConn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Open MyConn
End With

' Создание SQl запроса через команду ADO
Set cmdCommand = New ADODB.Command
Set cmdCommand.ActiveConnection = cnnConn
With cmdCommand
.CommandText = sSQL
.CommandType = adCmdText
.Execute
End With

' Открытие рекордсета
Set Rs = New ADODB.Recordset
Set Rs.ActiveConnection = cnnConn
Rs.Open cmdCommand

' Перенос данных из рекордсета в сводную таблицы (например)
Set objPivotCache = ActiveWorkbook.PivotCaches.Add( _
SourceType:=xlExternal)
Set objPivotCache.Recordset = Rs
With objPivotCache
.CreatePivotTable TableDestination:=Range("A1"), _
TableName:="ПродажиПоКлиентам"
End With


' Закрытие связи ADO
cnnConn.Close
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте Lame.
Связь с БД будет гибкой если использовать UDL файл. Создайте его, настройте на источник данных а в коде укажите его расположение. Код может выглядеть так :

Код: Выделить всё

Sub MakinRecordset()
Dim cnnConn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim objPivotCache
Set cnnConn = New ADODB.Connection
cnnConn.ConnectionString = "FILE NAME=[b]C:\DB.udl[/b]"
cnnConn.Open
Set Rs = New ADODB.Recordset
sSQL = "SELECT Клиент, [Сумма, руб] FROM Sales"
Rs.Open sSQL, cnnConn
Set objPivotCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)
Set objPivotCache.Recordset = Rs
With objPivotCache
    .CreatePivotTable TableDestination:=Range("A1"), TableName:="ПродажиПоКлиентам"
End With
Rs.Close
Set Rs = Nothing
cnnConn.Close
Set cnnConn = Nothing
End Sub
Евгений.
P.S. обязательно закрывайте рекордсет, соединение и "очищайте" от них память
Lame
Сообщения: 24
Зарегистрирован: 25 дек 2007, 10:46

Спасибо за дельный совет
Ответить