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
Не получается создать рекордсет
Модератор: Naeel Maqsudov
Точно не знаю, но может вы забыли какую-нибудь библиотеку подключить? Т.к. вы используете раннее связываие (сразу обращаетесь к объектам, а не создаёте их во время макроса), то у вас должна быть подключена нужная бибилотека до начала макроса.
-
- Сообщения: 526
- Зарегистрирован: 04 фев 2007, 18:37
- Откуда: Сургут
- Контактная информация:
Здравствуйте Lame.
рекордсет нельзя выполнить, его можно создать и открыть. 
Выполнить можно запрос в созданном коннекте:
cnnConn.Execute QSQL.
Евгений.
Код: Выделить всё
...
Set rs = New ADODB.Recordset
rs.Open QSQL, cnnConn

Выполнить можно запрос в созданном коннекте:
cnnConn.Execute QSQL.
Евгений.
Спасибо. Я вчера разобрался с помощью справки и одного форума. Задача была быстро извлекать данные из СУБД из пернесить в 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
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
-
- Сообщения: 526
- Зарегистрирован: 04 фев 2007, 18:37
- Откуда: Сургут
- Контактная информация:
Здравствуйте Lame.
Связь с БД будет гибкой если использовать UDL файл. Создайте его, настройте на источник данных а в коде укажите его расположение. Код может выглядеть так :Евгений.
P.S. обязательно закрывайте рекордсет, соединение и "очищайте" от них память
Связь с БД будет гибкой если использовать 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. обязательно закрывайте рекордсет, соединение и "очищайте" от них память