从Access使用RODBC导入数据时出错

从Access使用RODBC导入数据时出错,r,ms-access,rodbc,R,Ms Access,Rodbc,我正在尝试将access数据库上执行的查询结果导入R。我可以使用RODBC包建立连接,并且能够检索记录,因此与数据库的连接不是问题。问题是,当我将两列读入R时,它们是不准确的 access中的查询从表中读取数据,然后根据我执行的计算生成两个附加列。我导入了18列,其中16列直接来自表,另外两列是计算列。在access中执行此查询时,一切正常。access中两个计算列(许多IIF语句的结果)的结果(我将称之为V1和V2)在运行查询后在access中如下所示: V1 V2 A

我正在尝试将access数据库上执行的查询结果导入R。我可以使用RODBC包建立连接,并且能够检索记录,因此与数据库的连接不是问题。问题是,当我将两列读入R时,它们是不准确的

access中的查询从表中读取数据,然后根据我执行的计算生成两个附加列。我导入了18列,其中16列直接来自表,另外两列是计算列。在access中执行此查询时,一切正常。access中两个计算列(许多IIF语句的结果)的结果(我将称之为V1和V2)在运行查询后在access中如下所示:

V1        V2
A        -.1
A          0
A         .2
B         .2
A        -.3
C          0
A         .03
V1取三个值(A、B、C),V2包含浮点数,范围从-0.35到1.5

这些值正是我想要的,因此当我在access中运行查询时,我知道查询可以工作

我希望在R中获得这些相同的值,因此我在access中运行生成上述结果的相同查询,如下所示:

query = "Select ..."
channel = odbcConnectAccess2007("DatabaseLocation.accdb")
df = sqlQuery(channel, query)
V1          V2
A           0
A           0
A          .2
A          .2
A           0
A           0
A          .03
同样,与数据库的连接不是问题。尝试从R运行此查询后,两个计算列(V1和V2)的结果与在access中运行查询时的结果不匹配。其他列(直接从表中读取,无需任何计算)与它们应该的一样。在R V1和V2中运行查询后,如下所示:

query = "Select ..."
channel = odbcConnectAccess2007("DatabaseLocation.accdb")
df = sqlQuery(channel, query)
V1          V2
A           0
A           0
A          .2
A          .2
A           0
A           0
A          .03
对于V1,现在每个值都相同(A)。对于V2,部分值被正确读入,但不是全部。许多值已更改为0,现在V2中的最低值为-.07,而当我在access中运行相同的查询时,V2中的最低值为-.35。未更改为0的值是正确的

我的下一个想法是用access中的查询生成一个表,然后尝试读入整个新表。但是,我强烈希望按照我最初计划的方式获取数据,并且我希望解决这个问题,以便将来可以避免它

编辑:我无法显示实际的查询,因为它是专有工作的一部分,但这里有一个非常类似的查询:

Select 
#First calculated column
(IIF(M.V3 = 1, 'C', IIF(M.V3 = 2, 'B', 'A'))) AS v1,
#Second calculated column, which is shortened from the real thing
(IIF(M.V4=0 AND M.V5 = 1, .0401, 0) +
  IIF(m.V4=0 AND m.V5 = 0, -.0441, 0)) AS V2,
#other values are directly read from the table
  M.V3, M.V4, M.V5, M.V6, M.V7, M.V8, M.V9, 
M.V10, M.V11, M.V12, M.V13, M.V14, M.V15,
B.VFIRST & B.VLAST AS M.V16
FROM MASTER_TABLE M
INNER JOIN B_TABLE B ON M.V10 = B.V10

查看查询和原始表的示例会有很大帮助。这是专有工作的一部分,所以不幸的是,我认为我无法做到这一点。我应该发布关于查询和表的哪些其他信息?请参见上面的编辑,我添加了一个与实际查询类似的查询。我仍然希望您找到这个问题的答案,但是-出于好奇-为什么不在表位于R时计算v1和v2?