VBA ADODB wierd值来自查询

时间:2014-09-08 13:23:42

标签: sql excel vba excel-vba adodb

我在VBA Excel中使用ADODB连接到现有的DBF数据库来解析信息并生成报告。我的SQL语句可能不是最好的,但它们似乎有效。然而,我的查询结果遇到了一个奇怪的问题,经过调查发现,在某些后方情况下,我的查询会返回错误的数据。我原来的SQL语句如下所示:

SELECT nofac, 
       class, 
       branch, 
       Iif(dental = true, pedental + pbdental, NULL)  AS prim1, 
       Iif(dental2 = true, pedental + pbdental, NULL) AS prim2, 
       Iif(dental3 = true, pedental + pbdental, NULL) AS prim3, 
       Iif(dental4 = true, pedental + pbdental, NULL) AS prim4, 
       pxdental                                       AS tax, 
       social_ins 
FROM   base.dbf 
WHERE  nofac BETWEEN 123456 AND 123458 

base.dbf包含大约400k条记录,100条与nofac = 123456匹配。 PEDENTAL和PBDENTAL持有费率金额,而牙科虽然牙科4指示它的速率类型(布尔值)。

我注意到的问题是prim1 + prim2 + prim3 + prim4的总数将大于记录集的所有PEDENTAL + PBDENTAL的总数。这应该是不可能的。

我重新运行我的SQL语句,看看是什么导致数据损坏,并注意到在某些情况下,大约5%的时间牙科,牙科2都会返回true,有时所有4都会返回true。

SELECT nofac, 
       class, 
       branch, 
       dental, 
       dental2, 
       dental3, 
       dental4, 
       social_ins 
FROM   histemp.dbf 
WHERE  nofac = 123456 
  1. FALSE FALSE FALSE TRUE
  2. TRUE TRUE FALSE FALSE
  3. FALSE TRUE TRUE
  4. 但是,这是我停止了解正在发生的事情的地方。如果我查看返回多个trues的记录的原始数据,我发现4个值中只有一个设置为true。此外,如果我重申我的语句添加一个辅助where子句来隔离损坏的记录,结果就是它应该如何,只有一个true。

    例如,上面示例中的第3行将显示为仅查询该单行:

    。错误的错误

    有没有人知道我做错了什么,或者发生了什么事?

0 个答案:

没有答案