1

借助 RODBC 包中的功能,我已成功创建 ODBC,但在尝试查询数据库时收到错误消息。我正在使用 INFORMIX 3.31 32 位驱动程序(版本 3.31.00.10287)。

channel <- odbcConnect("exampleDSN")
unclass(channel)
[1] 3
attr(,"connection.string")
[1] "DSN=exampleDSN;UID=user;PWD=****;DB=exampleDB;HOST=exampleHOST;SRVR=exampleSRVR;SERV=exampleSERV;PRO=onsoctcp ... (more parameters)"
attr(,"handle_ptr")
<pointer: 0x0264c098>
attr(,"case")
[1] "nochange"
attr(,"id")
[1] 4182
attr(,"believeNRows")
[1] TRUE
attr(,"colQuote")
[1] "\""
attr(,"tabQuote")
[1] "\""
attr(,"interpretDot")
[1] TRUE
attr(,"encoding")
[1] ""
attr(,"rows_at_time")
[1] 100
attr(,"isMySQL")
[1] FALSE
attr(,"call")
odbcDriverConnect(connection = "DSN=exampleDSN")

当我尝试查询和调查返回对象的结构时,我收到一条错误消息“chr [1:2]“42000 -201 [Informix][Informix ODBC 驱动程序][Informix]发生语法错误。” ...'

具体来说,我编写了一个表达式来遍历数据库中的所有表,检索 10 行,并调查返回对象的结构。

for (i in 1:153){res <- sqlFetch(channel, sqlTables(channel, tableType="TABLE")$TABLE_NAME[i], max=10); str(res)}

每次迭代都返回相同的错误消息。任何想法从哪里开始?

附加信息:当我返回对象“res”时,我收到以下信息 -

> res
[1] "42000 -201 [Informix][Informix ODBC Driver][Informix]A syntax error has occurred."
[2] "[RODBC] ERROR: Could not SQLExecDirect 'SELECT * FROM \"exampleTABLE\"'"
4

2 回答 2

2

您引用的错误消息是:

"[RODBC] ERROR: Could not SQLExecDirect 'SELECT * FROM \"exampleTABLE\"'"

如果在环境中设置了环境 DELIMIDENT,则 Informix 仅识别用双引号括起来的表名,无论是服务器还是客户端(或两者)。设置什么并不重要。DELIMIDENT=1当我想要分隔标识符时使用。

您是如何在 Informix 数据库中创建表的?除非您创建的表设置了 DELIMIDENT,否则表名将不区分大小写;您不需要在表名周围加上引号。

您收到错误 -201 的事实意味着您已经完成了连接过程;这是一个好的开始,并简化了接下来的内容。

我不确定您使用的是 Unix 机器还是 Windows 机器——这通常有助于表明这一点。在 Windows 上,您可能必须使用 SETNET32(一个 Informix 程序)设置环境,或者可能有一种方法可以在连接字符串中指定 DELIMIDENT。在 Unix 上,您可能会在您的环境中设置它,然后 R 软件会选择它。但是,如果您在 GUI 环境中通过某种菜单按钮或选项启动 R,则可能会出现问题;可能是在 R 程序执行之前未执行配置文件。

于 2011-05-18T22:43:44.577 回答
1

您可以尝试使用sqlQuery()RODBC 中的函数来检索结果。这是我在工作中使用的功能,从未遇到过问题:

sqlQuery(channel, "select top 10 * from exampleTABLE")

您应该能够将所有查询放入一个列表并像以前一样遍历它们:

dat <- lapply(queries, function(x) sqlQuery(channel, x))

其中查询是您的查询列表,通道是您打开的 ODBC 连接。我想我也应该鼓励你在完成后关闭所说的连接odbcCloseAll()

于 2011-05-19T13:58:29.543 回答