首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R+ DBI库+ ODBC连接到Teradata数据库

使用R+ DBI库+ ODBC连接到Teradata数据库
EN

Stack Overflow用户
提问于 2019-01-23 23:27:45
回答 2查看 1.6K关注 0票数 1

我试图使用DBI库连接到R中的(如果我在Windows上重要的话)。我可以使用RODBC库成功地连接,这样我就知道我的凭据等等都是正确的。

我怀疑问题是:

  • 我没有正确指定身份验证机制。
  • 错误的驱动程序:也许我应该使用JDBC,而不是使用ODBC?

背景:

首先,这里是我的ODBC信息--如果我查看它-- ODBC数据库源管理器:

  • 名称= name_name
  • Driver = Teradata
  • 名称或IP地址= address.here.ok
  • 机制= ldap
  • 用户名= my_username

使用R 3.5.1 (2018-07-02),RStudio,Windows 10.

什么起作用:

代码语言:javascript
复制
library(RODBC) 
con = odbcConnect(dsn = "name_name"
                  ,uid = rstudioapi::askForPassword("Username")
                  ,pwd = rstudioapi::askForPassword("Password")
                  )

我对DBI所做的尝试失败了:

代码语言:javascript
复制
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

代码语言:javascript
复制
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不是指定身份验证机制的正确方式,我就不会返回错误。例如:

代码语言:javascript
复制
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中提出的一个问题的想法

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-25 04:15:35

和R一样,DBI是基于C的,会讲ODBC.如果它是基于Java的,它就会说JDBC。

在使用askForPassword函数之前,我建议您使用硬编码的UID和PWD进行测试.

尽管如此,我相信你会成功的--

代码语言:javascript
复制
DBI::dbConnect(odbc::odbc() 
    ,dsn = "name_name" 
    ,uid = rstudioapi::askForPassword("Username") 
    ,pwd = rstudioapi::askForPassword("Password")
   )
票数 2
EN

Stack Overflow用户

发布于 2021-09-15 21:37:02

对于那些发现此延迟的人,只有在提供了ODBC管理器中显示的驱动程序的确切名称时,原始DBI调用才能工作。打开ODBC数据源管理员应用程序并单击“驱动程序”选项卡。输入驱动程序名称与它在name列中所显示的完全相同,并且它应该可以工作。例如,‘驱动程序16.10’,而不是如上面所示的'Teradata‘。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54337267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档