Office中国论坛/Access中国论坛

标题: excel调用access里面的数据报错?请看看什么原因?谢谢 [打印本页]

作者: yanwei82123300    时间: 2019-12-19 23:58
标题: excel调用access里面的数据报错?请看看什么原因?谢谢
各位老师看看我使用excel调用access数据,但是提示我有字段有误,
run time error '2147217900(80040e14)':
undefined function 'nz' in excpression


Sub CreateQuery()
'引用Microsoft ActiveX Data Objects 2.x Library
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim SQL As String
    Dim i As Integer
    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.accdb"
    SQL = "SELECT * FROM qrySO_Linked_WO_Tag_Detail" '是由这个查询数据

    rst.Open SQL, cnn, adOpenKeyset, adLockOptimistic
    Cells.ClearContents
    For i = 0 To rst.Fields.Count - 1
        Cells(1, i + 1) = rst.Fields(i).Name
    Next
    Range("A2").CopyFromRecordset rst
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
End Sub

我的access里面有一个查询”qrySO_Linked_WO_Tag_Detail”里面是由两个其他查询建立起来的
这两个查询:里面使用了NZ()这个函数。 附件中的access里面的表暂时我断了链接(原数据是链接excel表的),所以这两个表的结构是不可以修改的,请在这个附件例子上进行修改,谢谢
请帮助看看什么原因?谢谢

作者: roych    时间: 2019-12-24 17:57
ADO用的是T-SQL语法,Access用的是Jet-SQL语法,有所区别的。例如,Access的模糊查询是“like *yan*”,如果用了ADO,不好意思,你得改成:“like %yan%”。
所以一般情况下不太建议在ADO里使用查询。而你这个Nz恰恰也是Access独有的,所以就出错了。如果改为ADO的话,可以用IsNull(数值,0)来处理,cdbl则可以改成convert(float,字段),iif改成case when then……这里就不一一列举了。
作者: yanwei82123300    时间: 2019-12-25 11:29
roych 发表于 2019-12-24 17:57
ADO用的是T-SQL语法,Access用的是Jet-SQL语法,有所区别的。例如,Access的模糊查询是“like *yan*”,如 ...

感谢老师的帮助,!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3