循环中的 VBA DLlookup

英国魔术师

我编写了一个函数来循环访问自定义对象 (C_Document) 的数组。在循环中,如果文档编号存在,则应在表 tbl_docs 中插入一条新记录。如果文档确实存在,它应该更新数据库中的相应记录。

Public Function updateDocuments(docs() As C_Document) As Double
Dim db As Object
Set db = Application.CurrentDb
Dim docIndex As Double

'Loop through all imported documents
For docIndex = 1 To UBound(docs)

    Dim strSQL As String

    Dim exists As Double
    exists = DCount("docNo", "tbl_docs", "docNo = '" & docs(docIndex).getDocNo() & "'" > 0)

    'Check if entry already exists
    If (exists > 0) Then
        'docNo entry already exists - update

         strSQL = "UPDATE tbl_docs SET " & _
                "docReviewStatus = " & docs(docIndex).getDocStatus() & "," & _
                "docRev = '" & docs(docIndex).getDocReview() & "'," & _
                "docDate = '" & docs(docIndex).getDocDate() & "'" & _
                " WHERE (" & _
                "docNo = '" & docs(docIndex).getDocNo() & "');"

    Else
        'docNo does not exist - insert

        strSQL = "INSERT INTO tbl_docs (docNo, docReviewStatus, docRev, docDate) " & _
                    "SELECT '" & docs(docIndex).getDocNo() & "'" & _
                    "," & docs(docIndex).getDocStatus() & _
                    ",'" & docs(docIndex).getDocReview() & "'" & _
                    ",'" & docs(docIndex).getDocDate() & "'" & _
                    ";"

    End If

    DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True

    MsgBox strSQL

    Next

updateDocuments = docIndex

结束函数

但是,当调用该函数时(tbl_docs 为空),它只插入一条记录,此后的 SQL 字符串成为更新语句。 在此处输入图片说明

在此处输入图片说明

在循环中使用 DCount() 时是否存在常见问题?有没有人对这个逻辑错误有任何经验?

其他

您的支票有一个轻微但重要的错误:

exists = DCount("docNo", "tbl_docs", "docNo = '" & docs(docIndex).getDocNo() & "'" > 0)

应该

exists = DCount("docNo", "tbl_docs", "docNo = '" & docs(docIndex).getDocNo() & "'") > 0

或者如果exists不是布尔值,而只是计数,则

exists = DCount("docNo", "tbl_docs", "docNo = '" & docs(docIndex).getDocNo() & "'")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章