powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
30 сообщений из 30, показаны все 2 страниц
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38481837
Сергей ВВС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые коллеги!!!
Прошу прощения, за чайниковский вопрос но возможно ли написать пользовательскую функцию для Excell 2010 на основе ADODB, чтобы делался запрос к файлу базы данных DBF? Я написал и долго пользовался подобной функцией на основе класса BPDBF в Excell 2003, но при переходе на 2010 этот класс перестал работать. :-(
Может быть у кого-то есть ссылки на учебники по ADODB, примеры, собственные наработки? Задача проста- в функции задается аргумент А, этот аргумент ищется в файле базы данных DBF в определенном поле -Поле1. Из Поля2 записи содержащей аргумент А в Поле1 результат выдается в ячейку. Начал писать но не могу отладить и нет понимания.
Если нужно могу выложить функцию на основе класса BPDBF, но думаю здесь аналогии неуместны.
Заранее всем спасибо!

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Function СТРАНА(N) As String


    Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
    ' connect to the Access database
    FirstRowHasNames = 1
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=G:\ADODB\;Extended Properties=""DBASE IV;"";"
    ds = cn.Execute("SELECT * FROM COUNTRS.dbf")
    
    
    
For i = 0 To N

rs.MoveNext

Next i
СТРАНА = rs.Fields(4)

rs.Close

cn.Close
    
End Function

Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38481983
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38482022
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
F вам ответил, а у меня встречные вопросы
Сергей ВВС
Код: vbnet
1.
2.
3.
For i = 0 To N
rs.MoveNext
Next i

разве в таблице COUNTRS у вас нет идентификаторов, соответствующих N?
и как вы можете быть уверены, что страны вернутся в определенном порядке, если не используете ORDER BY?
и зачем вам звездочка в запросе, если используете только четвертое поле?
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38482034
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем так как-то должно быть, иначе получается, что вы перекачиваете на клиенты ВСЮ таблицу со ВСЕМИ странами каждый раз, когда вызываете функцию, хотя вам нужно только ИМЯ столько ОДНОЙ страны
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Function СТРАНА(N) As String


    Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
    ' connect to the Access database
    FirstRowHasNames = 1
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=G:\ADODB\;Extended Properties=""DBASE IV;"";"
    ds = cn.Execute("SELECT CountryName FROM COUNTRS.dbf WHERE ID=" & CStr(N))
    
СТРАНА = rs.Fields(1)

rs.Close

cn.Close
    
End Function
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38482122
Сергей ВВС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
большое САСИБО за ответ, попробую.
Только у меня маленький вопрос - CountryName это имя поля в базе?
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38482200
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вмеcто CountryName и ID подставьте реальные названия полей
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38482511
Сергей ВВС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
подставил, попробовал, что-то не работает

Function ÑÒÐÀÍÀ(N) As String


Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
' connect to the Access database
FirstRowHasNames = 1
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=G:\ADODB\;Extended Properties=""DBASE IV;"";"
ds = cn.Execute("SELECT NAME17 FROM COUNTRS.dbf WHERE ALFA2=" & CStr(N))

ÑÒÐÀÍÀ = rs.Fields(1)

rs.Close

cn.Close

End Function
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38482513
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Со строкой подключения разобрался?

ЗЫ: и для кого я ссылку на FAQ давал?
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38482551
Сергей ВВС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
честно - нет,
чувствую себя полным идиотом. Может мне лучше книгу какую почитать для начала?
Даже неудобно.
Прошу прощения за теги.(вернее за неуменее ими пользоваться)
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38482746
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно стоит почитать

но ведь код уже готовый есть, осталось правильно написать строку подключения
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38485324
Сергей ВВС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

попробовал. Строка подключения вроде бы работает, но ругается на строку запроса.
Что не так?
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38485375
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы-то сами в состоянии разобрать, что написано на скриншоте?
Я не вижу ни текста запроса, ни текста ошибки.
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38485829
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка в синтаксисе, написано же. Пропущен оператор.
У Вас в CStr(N) что? Может одинарные кавычки не помешали бы(если это не число)?
Код: vbnet
1.
ds = cn.Execute("SELECT CountryName FROM COUNTRS.dbf WHERE ID='" & CStr(N) & "'")


а так соглашусь с Shocker.Pro полностью - ничего из скрина не видать толком. Ни строку запроса, ни номер ошибки.

P.S. По SQL запросам можете почитать книгу Мартина Грубера "Понимание SQL". Она простенькая и для начинающих самое оно.
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38515957
Сергей ВВС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist,
Здравствуйте,
я попробовал упростить задачу до максимума, но вс равно результата нет
функция возвращает в ячейку #ЗНАЧ!
Упрощения: ............WHERE code=40") т.е. в функции аргумент N не используется.
Поля в исходном файле COUNTRS.dbf CODE - Двойное с плавающей точкой, все остальные - текст
Что не так? Debug - ничего не дает, и функция не работает. :-(


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Function СТРАНА(N) As String

    Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long

    
    ' connect to the Access database
    FirstRowHasNames = 1
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\temp\;Extended Properties=""DBASE IV;"";"
    ds = cn.Execute("SELECT alfa2 FROM COUNTRS.dbf WHERE code=40")
    


СТРАНА = rs.Fields(1).Value



cn.Close
    
End Function



За книжку Грубера - БОЛЬШОЕ СПАСИБО!! Действительно простая и полезная.
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38516135
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВВС, ну поменяйте вы провайдера-то уже (на VFPOLEDB)...

А так... Что значит "дебаг ничего не даёт"? Остановите выполнение после запроса и посмотрите, где и что лежит в переменных и рекордсете. Подозреваю, что у вас запрос возвращает пустую выборку...

А, не, не подозреваю
Покажите мне код, в котором написано, что данные появляются в rs
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38516141
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВВС,

Если вам дали совет, это не значит, что нужно его использовать, не вникая в суть. Советчик сделал опечатку, вы тупо повторяете его ошибку.

читайте тут
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38516487
Сергей ВВС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Спасибо за совет на счет Option Explicit. Но все равно не работает. И ошибок Debug не выдает. Что еще почитать?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Option Explicit
Function ÑÒÐÀÍÀ(N) As String

    Dim cn As ADODB.Connection, rs As ADODB.Recordset


    'Set cn = New ADODB.Connection
    'Set rs = New ADODB.Recordset
        
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\temp\;Extended Properties=""DBASE IV;"";"
    
    'Set rs = cn.Execute("SELECT ALFA2 FROM COUNTRS.DBF WHERE NAME17 ='ÀÍÃÎËÀ';")
    
    Set rs = cn.Execute("SELECT ALFA2 FROM COUNTRS.DBF WHERE NAME17 ='" & CStr(N) & "';")


ÑÒÐÀÍÀ = rs.Fields(1)


rs.Close

cn.Close
    
End Function
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38516516
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВВСНо все равно не работаетЧто означает "не работает"? функция либо должна вернуть какое-то значение, либо сгенерить ошибку. Третьего не дано.
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38516569
Сергей ВВС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
возвращает #ЗНАЧ!
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38516572
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей ВВСShocker.Pro,
возвращает #ЗНАЧ!Попробуйте изменить запрос на
Код: vbnet
1.
2.
Set rs = cn.Execute( "SELECT ALFA2 FROM COUNTRS WHERE NAME17 ='" & CStr(N) & "'") ' если тип поля NAME17 - строка
Set rs = cn.Execute( "SELECT ALFA2 FROM COUNTRS WHERE NAME17 =" & CStr(N) )       ' если тип поля NAME17 - число
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38516604
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВВСShocker.Pro,
возвращает #ЗНАЧ!а если ее выполнить в окне Immediate?
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38516618
Сергей ВВС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Compile error: Invalid in Immediate pane
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38516649
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВВСCompile error: Invalid in Immediate paneНе, ну достанешь же. Мёртвого.
Как Гришу Перельмана - нобелёвский комитет.

Если потерял нитку темы - так признайся, что перестал понимать.
И не надо долбить свой код - он от тыкания копипаста не улучшится... (поскольку фэйспалма не предусмотрено)
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38516666
Сергей ВВС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,
Мертвый? Не пиши сюда.
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38516681
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВВСCompile error: Invalid in Immediate paneЧто именно ты там пишешь? Надо написать знак вопроса, имя функции, в скобках значение параметра и нажать Enter
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38516806
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВВСМертвый? Не пиши сюда.Да, йа ужо давно неспособен...
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38781138
Сергей ВВС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Здравствуйте,
Спасибо за помощь!
хоть тема и старая, но для меня очень актуальная.
Удалось разобраться со строками подключения и все работает ок. Аж три варианта удалось использовать:
Const DBFconnSTR1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\ПУТЬ;Extended Properties=dBASE IV;User ID=Admin;Password=;"
Const DBFconnSTR2 As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\ПУТЬ;Extended Properties=dBASE IV;User ID=Admin;"
Const DBFconnSTR3 As String = "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=C:\ПУТЬ;"

Но.... не на всех компьютерах.
На системе Win 7 x64 + Office 2010 x32 - работает,

на системе Win 7 x64 + Office 2013 x64 - не работает.

Помогите разобраться.

Заранее спасибо !
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38782165
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВВС,

64-битная версия приложения требует использования 64-битной версии драйвера (который вызывается провайдером). Старые версии провайдеров (включая vfpoledb) не имеют 64-битных версий.

Можно попробовать воспользоваться провайдером MSDASQL :
Код: plaintext
"Provider=MSDASQL.1;Persist Security Info=False;Data Source=dBASE Files"

Соответствующий провайдер OLEDB поставляется в составе Windows, начиная с Vista(sp1).
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38783540
Сергей ВВС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,
попробовал. Подключал Reference библиотеки ADO 2.1, 2.5, 2.7, 6.1. Проект компилируется без ошибок, но функция в Excel не работает. Выдает - #ЗНАЧ.
...
Рейтинг: 0 / 0
Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
    #38783579
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВВС,

Ну и на какой именно строке ошибка? Отладчиком пользоваться умеете?
И вообще, вы думаете, что я вам в примере привел ВАШУ строку подключения к данным?
Я только указал, каким именно провайдером можно попробовать воспользоваться. А конкретно как - смотрите уже примеры подключения к DBF с использованием ODBC.
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Пользовательская функция в Excell 2010 - запрос к базе данных *.DBF
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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