使用Informix驱动程序在R中使用ODBC连接的SQL查询错误

时间:2011-05-18 17:44:14

标签: r informix rodbc

使用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 Driver] [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\"'"

2 个答案:

答案 0 :(得分: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程序出现之前没有执行配置文件。

答案 1 :(得分:1)

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

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

您应该能够将所有查询放入列表中,并像以前一样迭代它们:

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

其中query是您的查询列表,channel是您的开放ODBC连接。我想我还应该鼓励你在完成odbcCloseAll()

后关闭所述连接
相关问题