powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ADO Oracle VBA RecordSet
10 сообщений из 10, страница 1 из 1
ADO Oracle VBA RecordSet
    #38047437
alex5751
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу помощи в создании макроса

Есть макрос
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Sub B_Test1()

Dim cn As Object
Dim rs As Object
Dim art As String
Dim name As String

art = 100500

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "Provider=OraOLEDB.Oracle.1;.....Extended Properties="""""
rs.Open "SELECT ...... = '" & art & "'", cn, 3
Cells(1, 1).CopyFromRecordset rs
rs = name
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

End Sub



Соединение работает, все ок, CopyForm возвращает в ячейку 1,1 результат одного поля из таблицы
Есть ли возможность результату присвоить переменную ? для дальнейшей её обработки
rs=name - выдает ошибку, что можете посоветовать?
Спасибо.
...
Рейтинг: 0 / 0
ADO Oracle VBA RecordSet
    #38047485
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А цель какая? чтобы данные в БД обновились?
...
Рейтинг: 0 / 0
ADO Oracle VBA RecordSet
    #38047511
alex5751
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Задача, создать пользовательскую функцию в экселе которая возвращала бы результат запроса sql

Ни каких обновление БД не планируется, только чтение.
...
Рейтинг: 0 / 0
ADO Oracle VBA RecordSet
    #38047540
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда не очень понятно, что требуется от попытки присвоения рекордсету какой-то переменной, если не требуется изменить данные в рекордсете, которые в свою очередь связаны с БД.

И что, собственно, мешает создать функцию? Функция сама может вернуть объект, что именно вызывает сложность? В каком виде она должна вернуть результат запроса? Если в виде рекордсета - так вот, пожалуйста:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Function B_Test1() As Object

Dim cn As Object
Dim art As String
Dim name As String

art = 100500

Set cn = CreateObject("ADODB.Connection")
Set B_Test1 = CreateObject("ADODB.Recordset")
cn.Open "Provider=OraOLEDB.Oracle.1;.....Extended Properties="""""
B_Test1.Open "SELECT ...... = '" & art & "'", cn, 3
cn.Close: Set cn = Nothing

End Function
...
Рейтинг: 0 / 0
ADO Oracle VBA RecordSet
    #38047705
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю, что ТС нужно несколько иное - вернуть результат на лист в некий диапазон, а затем этот диапазон сделать именованным...
...
Рейтинг: 0 / 0
ADO Oracle VBA RecordSet
    #38048153
alex5751
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
Не получилось(. Функция возвращает #ЗНАЧ!

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Function B_Test1(art As String) As Object

Dim cn As Object

Set cn = CreateObject("ADODB.Connection")
Set B_Test1 = CreateObject("ADODB.Recordset")
cn.Open "Provider=OraOLEDB.Oracle.1;.....Extended Properties="""""
B_Test1.Open "SELECT...... = '" & art & "'", cn, 3
cn.Close: Set cn = Nothing

End Function



при этом art либо зашитая переменная либо аргумент функции все равно ..

AndreTM
Не.. От функции требуется вернуть результат в одну ячейку без именного диапазона

опишу ситуацию: в БД храниться справочная информация, такая как вес объем артикула итп, артиколв 20тыщ <, можно воспользоваться BI клиентом для выгрузки в него а далее в эксель, хочется опустить этот шаг, использовав пользовательские функции в экселе
...
Рейтинг: 0 / 0
ADO Oracle VBA RecordSet
    #38048320
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex5751Функция возвращает #ЗНАЧ!Функция возвращает рекордсет, а не #ЗНАЧ!. Это ячейка не может отобразить рекордсет сама по себе, поэтому пишет #ЗНАЧ!

alex5751От функции требуется вернуть результат в одну ячейку без именного диапазонаНу так в чем проблема-то? Как достать конкретное значение из рекордсета? Вот так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Function B_Test1() As НужныйТип

Dim cn As Object
Dim rs As Object
Dim art As String
Dim name As String

art = 100500

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "Provider=OraOLEDB.Oracle.1;.....Extended Properties="""""
rs.Open "SELECT ...... = '" & art & "'", cn, 3
B_Test1 = rs("ИмяПоля")
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

End Sub
...
Рейтинг: 0 / 0
ADO Oracle VBA RecordSet
    #38048330
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex5751От функции требуется вернуть результат в одну ячейкуТолько это все равно о разном

alex5751От функции требуется вернуть результатэто как раз я сделал постом выше. А уж как воспользоваться результатом этой функции - это тема отдельная
alex5751вернуть результат в одну ячейкуА эта задача решена еще в первом посте.
...
Рейтинг: 0 / 0
ADO Oracle VBA RecordSet
    #38048369
alex5751
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro

Большое спасибо.Все получилось.
...
Рейтинг: 0 / 0
ADO Oracle VBA RecordSet
    #38049735
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex5751,

вставлю 5 копеек.....
Бредовая идея использовать в качестве пользовательской функции подключение к базе и выполнение запроса.
Если таких ячеек с функциями будет штук 50 и более и будет расти ваш файл быстро , тормоза при пересчете листа придут быстрее чем вы думаете :)
сделайте хотя бы подключение и рекордсет публичными, а еще лучше считайте данные при загрузке книги в массив или коллекцию, и доставайте из них значения через пользовательскую функцию.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ADO Oracle VBA RecordSet
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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