RODBC返回0值

时间:2011-05-10 20:34:52

标签: r rodbc

我正在访问商业数据库。通过提示:

 select PersonCode, PersonDate from CODB.mastertable where PersonCode=42
 PersonCode  PersonDate 
 ----------- ------------
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011

在R:

library(RODBC)
query <- "select PersonCode, PersonDate from CODB.mastertable where PersonCode=42"

connection1 <- odbcConnect("RESDB", uid="userID", pwd="pwdaccess", believeNRows=FALSE)

sqlQuery(connection1,query)


sqlQuery(connection1,query)
    PersonCode                 PersonDate 
1          42 01/03/2011 00:00:00.000 UTC
2          42 01/03/2011 00:00:00.000 UTC
3          42 01/03/2011 00:00:00.000 UTC
4          42 01/03/2011 00:00:00.000 UTC
5          42 01/03/2011 00:00:00.000 UTC
6           0 01/03/2011 00:00:00.000 UTC
7           0 01/03/2011 00:00:00.000 UTC
8           0 01/03/2011 00:00:00.000 UTC
9           0 01/03/2011 00:00:00.000 UTC
10          0 01/03/2011 00:00:00.000 UTC

查询的输出不正确。以前有人遇到过这个问题吗?这里有一些额外的信息。

> sessionInfo()
R version 2.12.1 (2010-12-16)
Platform: x86_64-unknown-linux-gnu (64-bit)

locale:
[1] C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] timeDate_2130.92 data.table_1.5.3 RODBC_1.3-2

loaded via a namespace (and not attached):
[1] tools_2.12.1

2 个答案:

答案 0 :(得分:1)

您可以使用odbcGetInfo()查看有关正在使用的驱动程序的信息。

考虑到ODBC的起源,您是否尝试过使用ROracle(DBI包)? RJDBC在Linux环境中也可能是一个更稳定的选项,特别是现在fetch()代码已经用Java重写(截至R-Forge的开发版本0.2-0),其性能与之相当(如果不是比RODBC好。

听起来可能很明显,但是R32会出现问题(如果这对你来说甚至是一个选项)?众所周知,32位与64位驱动程序的不兼容性很难追踪; Windows会抱怨架构不匹配使用R64和32位ODBC驱动程序并导致odbcConnect()完全失败,但我不知道Linux是否相同。

答案 1 :(得分:1)

找到解决方案;不知道为什么会有效,但现在是:使用选项rows_at_time=1

sqlQuery(connection1,query,rows_at_time=1)