决定将我的代码划分为不同的脚本,并使用source通过“main”脚本运行它们。
其中一个脚本是“Settings.R”环境,其中包含数据库连接详细信息和一些其他设置。
当我尝试使用source('Settings.R')加载脚本时,它会找到环境,我可以在控制台中访问变量。但是当我尝试与数据库建立连接时,它失败了。
但是,如果我手动运行Settings.R脚本,然后尝试在其他脚本中建立连接,则可以正常运行。
# Settings script:
settings <- as.environment(list())
settings$dbConnection <- 'Driver={SQL Server};Server=SERVER INFO;Database=DATABASE;Uid=USERNAME;Pwd=PASSWORD';
# The calling script
source('Settings.R')
dbConnection <- odbcDriverConnect(settings$dbConnection)
# DO STUFF
close(dbConnection);
可能与设置环境无法全局可用有关。
我尝试将“local”变量更改为TRUE / FALSE并且没有帮助
local: TRUE,FALSE或环境,确定解析的位置 表达式被评估。 FALSE(默认值)对应于 用户的工作空间(全局环境)和对环境的真实性 来自哪个来源。
我收到以下错误消息(p.s a little swedish text)
警告消息:1:在odbcDriverConnect(设置$ dbConnection)中:
[RODBC]错误:状态08001,代码17,消息[Microsoft] [ODBC SQL 服务器驱动程序] [DBNETLIB] Antingen finns inte SQL Serverellerånekas åtkomst。 2:在odbcDriverConnect(设置$ dbConnection)中:
[RODBC] ERROR:状态01000,代码53,消息[Microsoft] [ODBC SQL 服务器驱动程序] [DBNETLIB] ConnectionOpen(Connect())。 3:在 odbcDriverConnect(settings $ dbConnection):ODBC连接失败 &GT;
有什么想法吗?
答案 0 :(得分:0)
很抱歉,此回应不及时!但是我遇到了类似的问题,因此对于后代,我有一个可能的解决方案。我怀疑您正在Linux上运行此代码。美元$
符号是一个特殊字符,需要在命令行字符串中转义。
对于脚本“ env1.R”:
e1 <- new.env()
e1$x <- 1
与R互动:
source('env1.R');e1$x
# [1] 1
来自Rscript:
Rscript -e "source('env1.R');e1$x"
#
# <environment: 0x33ca1b0>
Rscript -e "source('env1.R');e1\$x"
# [1] 1
来自数据库连接的错误是由于传递环境而不是连接字符串引起的。希望瑞典的信息支持这一理论!