Первый аргумент не является открытым каналом RODBC - PullRequest
0 голосов
/ 09 октября 2018

Я подключаюсь к базе данных Oracle через DNS (настройте соединение на tnsnames.ora с именем «database»).

Я могу успешно запустить следующий код:

con <- DBI::dbConnect(odbc::odbc(), 
                  "database",
                  UID = "user",
                  PWD = "password",
                  trusted_connection = TRUE)

Я также могу успешно перечислить все таблицы в базе данных с помощью:

list <- dbListTables(con)
View(list)

Однако, когда я запускаю:

results <- sqlQuery(channel = con, query = "select * from myschemaname.table")

Я получаю сообщение об ошибке:

Error in sqlQuery(channel = con, query = "select * from myschemaname.table") : 
          first argument is not an open RODBC channel

У меня есть права владельца, и я также могу обновлять таблицы Excel, подключенные к этой базе данных через ODBC.Если это пригодится, вот вывод str (con)

str(con)
Formal class 'Oracle' [package ".GlobalEnv"] with 4 slots
  ..@ ptr     :<externalptr> 
  ..@ quote   : chr "\""
  ..@ info    :List of 13
  .. ..$ dbname               : chr ""
  .. ..$ dbms.name            : chr "Oracle"
  .. ..$ db.version           : chr "11.02.0040"
  .. ..$ username             : chr "user"
  .. ..$ host                 : chr ""
  .. ..$ port                 : chr ""
  .. ..$ sourcename           : chr "database"
  .. ..$ servername           : chr "database"
  .. ..$ drivername           : chr "SQORA32.DLL"
  .. ..$ odbc.version         : chr "03.80.0000"
  .. ..$ driver.version       : chr "11.02.0001"
  .. ..$ odbcdriver.version   : chr "03.52"
  .. ..$ supports.transactions: logi TRUE
  .. ..- attr(*, "class")= chr [1:3] "Oracle" "driver_info" "list"
  ..@ encoding: chr ""

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Итак, у меня было что-то вроде этого подключения к базе данных SQL Server.В конце концов мне пришлось изменить Trusted_Connection = TRUE на Trusted_Connection = Yes ...

0 голосов
/ 15 октября 2018

Вы используете RODBC::sqlQuery() для соединения, созданного с помощью DBI::dbConnect().Либо используйте DBI::dbGetQuery() с DBI::dbConnect(), либо создайте соединение с RODBC::odbcConnect() и используйте RODBC::sqlQuery().

...