#r #odbc #firebird #dbconnect
#r #odbc #firebird #dbconnect
Вопрос:
Я пытаюсь подключиться к базе данных firebird через ODBC. У меня есть рабочее ODBC-соединение с Windows (32-разрядные источники данных ODBC), а также установленное соединение через Tableau. Я пытался использовать DBConnect, но, полагаю, не смог установить правильные параметры. Я пытался
library(odbc)
con <- dbConnect(odbc::odbc(),
drv = "Firebird/InterBase(r) driver",
database = "VARIO",
uid = "xxx",
pwd = "xxx",
host = "192.xxx.xxx.xx",
port = "xxxxx")
например, в Excel я могу получить доступ к базе данных, используя установленное соединение Windows. В любом случае, извините за мою формулировку для начинающих!
Чтобы добавить сюда, кажется, я работаю на 64-разрядной версии R.
> Sys.info()[["machine"]]
[1] "x86-64"
После ваших комментариев я попытался
con <- dbConnect(odbc::odbc(),
dsn = "VARIO",
database = "192.168.XX.X/56300:VARIO8",
uid = "XXX",
pwd = "XXX",
host = "192.168.XX.X",
port = "56300")
>Error: nanodbc/nanodbc.cpp:983: 01S00: [ODBC Firebird Driver]Unable to connect to data source: library 'C:UsersXXXDesktopfbclient.dll' failed to load [ODBC Firebird Driver]Invalid connection string attribute [ODBC Firebird Driver]Invalid connection string attribute
fbclient.dll там, где она должна быть
Более того, я не ставил драйвер. Всякий раз, когда я объявляю
drv = "Firebird/InterBase(r) driver"
Я получаю: Ошибка в (функция (классы, fdef, mtable) :
не удается найти унаследованный метод для функции ‘DBConnect’ для подписи ‘»character»’
Есть еще идеи?
Комментарии:
1. Согласно странице » Параметры подключения » firebird, похоже, что хост и порт должны быть указаны в имени базы данных, например
database=192.xxx.xxx.xx/xxxxx:/usr/local/db/myDb.fdb
. Я недостаточно знаю о firebird, чтобы знать, какой из путей в сравнении с базой данных (VARIO
) следует использовать, возможно, этого достаточно, чтобы дать вам что-то более информативное.2. Ваш R случайно не 64-разрядный? В этом случае вам необходимо установить 64-разрядный драйвер ODBC (и 64-разрядный fbclient) и настроить его с 64-разрядного экрана источника данных ODBC. Вы также пытались указать DSN? Получаете ли вы какие-либо ошибки, если да, то что это за ошибки? И, как было предложено r2evans, значение для
database
неверно, см. Также Параметры подключения .3. Я добавил некоторую дополнительную информацию в свой вопрос, поскольку меня все еще там нет. Спасибо за вашу поддержку! Это очень помогает.
4. используйте SysInternals Process Monitor, чтобы отслеживать тот самый момент, когда ваше приложение пытается установить соединение с базой данных. Какие именно разделы реестра и файловый ввод-вывод происходят, где он пытается найти и открыть fbclient.dll ? в чем ошибки? Ваш R, похоже, не равен x64, тогда ваш Excel .x64 или x86? Вы уверены, что Excel использует ODBC, а не OLE DB или какой-либо другой интерфейс?
5. можно ли использовать JDBC вместо ODBC? Возможно rdrr.io/cran/DatabaseConnector
Ответ №1:
Сверяясь со списком odbc
известных драйверов БД, Firebird, похоже, не является известным драйвером.
library(odbc)
odbc::odbcListDrivers()
(src:https://rdrr.io/cran/odbc/man/odbcListDrivers.html)
Я предполагаю, что вам придется установить этот драйвер на свой компьютер, а затем зарегистрировать имя источника данных (DSN), чтобы сделать его доступным для R.
Как только это будет сделано, пожалуйста, измените drv
в вашем вызове функции на dsn
. drv
ссылается на odbc::odbc()
аргумент, который вы указали выше, в то время как dsn
затем следует ссылаться на установленный драйвер по его зарегистрированному имени (если я здесь ничего не путаю. К счастью, мне никогда не приходилось покидать теплый комфорт RPostgreSQL
…).
Таким образом, это будет выглядеть примерно так:
library(odbc)
con <- dbConnect(drv = odbc::odbc(),
dsn = "Firebird", # this should be the DSN you have set
database = "VARIO",
uid = "xxx",
pwd = "xxx",
host = "192.xxx.xxx.xx",
port = "xxxxx")
Комментарии:
1. Кажется, я работаю на 64-разрядной версии R: Sys.info ()[[«машина»]] перезапускает «x86-64» «
2. Я думаю, вы хотели прокомментировать другой поток .. 🙂
3. Мой ответ вас куда-нибудь приведет или это не решит вашу проблему? Я не уверен на 100%, так как я не могу это протестировать, и я раньше не использовал настройку с «пользовательским» драйвером odbc…
4. может ли R подключить OLE DB не к ODBC, который был объявлен устаревшим и тупиковым несколько лет назад? Я думаю, что драйвер Firebird ODBC потерял steam в том году и так и не вернул его
5. или, возможно, вам лучше использовать JDBC, R, похоже, способен на это ( rdrr.io/cran/DatabaseConnector ) и сопровождающий Firebird / JDBC (Jaybird) очень активен при переполнении стека