我试图使用DBI库连接到R中的(如果我在Windows上重要的话)。我可以使用RODBC库成功地连接,这样我就知道我的凭据等等都是正确的。
我怀疑问题是:
背景:
首先,这里是我的ODBC信息--如果我查看它-- ODBC数据库源管理器:

使用R 3.5.1 (2018-07-02),RStudio,Windows 10.
什么起作用:
library(RODBC)
con = odbcConnect(dsn = "name_name"
,uid = rstudioapi::askForPassword("Username")
,pwd = rstudioapi::askForPassword("Password")
)我对DBI所做的尝试失败了:
library(DBI)
con <- DBI::dbConnect(odbc::odbc()
,driver = "Teradata"
,DBCName = "name_name"
,host = "address.here.ok"
,uid = rstudioapi::askForPassword("Database user")
,pwd = rstudioapi::askForPassword("Database password"))错误:Error: nanodbc/nanodbc.cpp:950: 28000: [Teradata][ODBC Teradata Driver][Teradata Database] The UserID, Password or Account is Invalid
con <- DBI::dbConnect(odbc::odbc()
,driver = "Teradata"
,DBCName = "name_name"
,host = "address.here.ok"
,uid = rstudioapi::askForPassword("Database user")
,pwd = rstudioapi::askForPassword("Database password")
,MechanismName = "ldap")错误:Error: nanodbc/nanodbc.cpp:950: 28000: [Teradata][ODBC Teradata Driver][Teradata Database] The UserID, Password or Account is Invalid
在类似的情况下,当机制没有被正确指定(ldap)时,我看到了这个错误,所以也许MechanismName是错误的?
我知道我可以在连接字符串中说我喜欢说的任何话,并且不会引发错误,所以如果MechanismName不是指定身份验证机制的正确方式,我就不会返回错误。例如:
con <- DBI::dbConnect(odbc::odbc()
,driver = "Teradata"
,DBCName = "name_name"
,host = "address.here.ok"
,uid = rstudioapi::askForPassword("Database user")
,pwd = rstudioapi::askForPassword("Database password")
,MechanismName = "ldap")
,made_up_input = "I like cats"给出错误:Error: nanodbc/nanodbc.cpp:950: 28000: [Teradata][ODBC Teradata Driver][Teradata Database] The UserID, Password or Account is Invalid
提前谢谢。
编辑:使用MechanismName 从Git中提出的一个问题的想法
发布于 2019-01-25 04:15:35
和R一样,DBI是基于C的,会讲ODBC.如果它是基于Java的,它就会说JDBC。
在使用askForPassword函数之前,我建议您使用硬编码的UID和PWD进行测试.
尽管如此,我相信你会成功的--
DBI::dbConnect(odbc::odbc()
,dsn = "name_name"
,uid = rstudioapi::askForPassword("Username")
,pwd = rstudioapi::askForPassword("Password")
)发布于 2021-09-15 21:37:02
对于那些发现此延迟的人,只有在提供了ODBC管理器中显示的驱动程序的确切名称时,原始DBI调用才能工作。打开ODBC数据源管理员应用程序并单击“驱动程序”选项卡。输入驱动程序名称与它在name列中所显示的完全相同,并且它应该可以工作。例如,‘驱动程序16.10’,而不是如上面所示的'Teradata‘。
https://stackoverflow.com/questions/54337267
复制相似问题