dbConnect работает в Rstudio.exe и RGui.exe, но не работает как исполняемый файл в RScript.exe

Я пытаюсь создать файл RScript, который можно запускать как исполняемый файл. У меня есть код R, который подключается к базе данных Microsoft Azure SQL Server, которая использует аутентификацию пароля активного каталога, запрашивает базу данных и пишет отчет csv. Я создал DSN для базы данных и использовал следующий код для успешного подключения к базе данных как в 32-битной, так и в 64-битной среде RStudio.exe и RGui.exe:

      library(DBI)
library(tidyverse)
library(profvis)

show("Library Installed...")

pause(2)

CON <- dbConnect(odbc::odbc(), "My_DSN", uid = "UserName", pwd = "Password", timeout = 10)

show("Database Connected...")

pause(2)

SQL <- "SELECT * FROM Table"

DATA <- dbGetQuery(CON, SQL)

show("Data Extracted...")

pause(2)

NAME = unique(DATA$Name)

DATA.INDIVIDUAL = list()
for (i in NAME){
  DATA.INDIVIDUAL[[i]] <- DATA %>% filter(Name == i) %>% select("Field1", "Field2", "Field3")
  write.csv(DATA.INDIVIDUAL[[i]], paste("C:/My Documents/", i, "/Report.csv", sep = ""), row.names = FALSE)
  show(paste("Exported",i))
  pause(2)
}

Я также подключился, явно назвав базу данных с помощью

      library(DBI)
con <- dbConnect(odbc::odbc(), uid = "UserName", pwd = "Password", Driver = "ODBC Driver 17 for SQL Server", Server = "ServerName", Database = "DBName", Authentication = "ActiveDirectoryPassword")
show("Database Connected...")

Однако, когда я использую RScript.exe для запуска одного и того же кода (обе версии), он печатается в командной строке RScript (до вывода вывода «База данных подключена ...»), и приложение завершается без завершения остальной части моего кода.. Почему Rstudio и RGui соединяются, а RScript не соединяется? Почему нет ошибки, просто NULL напечатаны?

Ценю любую помощь!

1 ответ

На будущее я нашел причину. Проблема в драйвере odbc; в приложениях без пользовательского интерфейса CoInitialize не вызывается.

См. Https://github.com/r-dbi/odbc/issues/343

Другие вопросы по тегам