Excel SQL查询 - Where(somefield)为null - 无法正常工作

时间:2015-09-16 16:59:52

标签: excel vba excel-vba where-clause

在Excel SQL Query where子句中遇到一些麻烦。

excel中我的工作表中的数据(据我所见)是空的,单元格中没有值和格式等。 我试图从Outlook(在VBA中)运行以下查询。

strQuery = "Select Count(ReviewDate) as UnassignedCount FROM [PatComDB$]
Where ReviewDate is null "

但查询返回0。

我已经搜索了一些解决方案,并尝试了以下内容。

strQuery = "Select Count(ReviewDate) as UnassignedCount FROM [PatComDB$]
Where IIF(ReviewDate is null,0,ReviewDate) "

(返回7 - 非空字段的计数)

并且没有运气。

我的连接条款如下(如果有任何用途)

Set Con = New ADODB.Connection
With Con
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source=<some link>;" & _
        "Extended Properties=Excel 8.0;"
    .Open
End With

我的表格看起来像这样

IdeaID      RPA     Type        SubDate     ReviewDate

IdeaID1     RPA1234 Existing    01/01/2015  
IdeaID2     RPA1235 New         02/01/2015  
IdeaID3     RPA1236 Existing    03/01/2015  
IdeaID4     RPA0001 New         04/01/2015  01/09/2015
IdeaID5     RPA0001 New         05/01/2015  02/09/2015
IdeaID6     RPA0001 New         06/01/2015  07/09/2015
IdeaID7     RPA0001 New         07/01/2015  07/09/2015
IdeaID8     RPA0001 New         08/01/2015  07/09/2015
IdeaID9     RPA0001 New         09/01/2015  07/09/2015
IdeaID10    RPA0001 New         10/01/2015  07/09/2015

有没有人有任何想法我可能会出错,无论是我的查询还是我的工作表中的数据?

注意:遗憾的是,我在软件方面仅限于Outlook和Excel。

提前致谢。

修改

忘记提及在同一数据集上运行以下查询返回NULL

strQuery = "Select * FROM [PatComDB$] Where Index = 1"
rsARR = rs.GetRows
Debug.Print (rsARR(6, 0))

2 个答案:

答案 0 :(得分:1)

我猜这里试试这个:

strQuery = "Select Count(IIF(ReviewDate is null,0,ReviewDate)) as UnassignedCount FROM [PatComDB$] Where  ReviewDate = 0"

由于上面没有用,试试这个我在访问数据库中使用过这个,因为有时候数据不是null,而是空白。

 strQuery = "Select Count(ReviewDate) as UnassignedCount FROM [PatComDB$] 
 Where ReviewDate is Null Or " & Char(34) & Char(34)

不确定它是否适用于Excel查询。值得一试

答案 1 :(得分:1)

在对代码变体进行多次尝试之后,我自己想出了答案。

我不得不将count列更改为包含数据的列以使其正常工作(在这种情况下,我使用了永远不会为空的Index字段)使用的代码如下。

public extension UIViewController
{

    func makeLogOutAlert()
    {
        var refreshAlert = UIAlertController(title: "Log Out", message: "Are You Sure to Log Out ? ", preferredStyle: UIAlertControllerStyle.Alert)

        refreshAlert.addAction(UIAlertAction(title: "Confirm", style: .Default, handler: { (action: UIAlertAction!) in
            self.navigationController?.popToRootViewControllerAnimated(true)
        }))

        refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .Default, handler: { (action: UIAlertAction!) in
            refreshAlert .dismissViewControllerAnimated(true, completion: nil)
        }))

        presentViewController(refreshAlert, animated: true, completion: nil)
    }
}

我从这里的答案中得到了一些建议,并从我的研究中得到了其他答案,以确保我捕捉到空单元格的每一个可能性(我认为)。