Access VBA 中的 AddNew 不添加新行或报告任何错误

Posted

技术标签:

【中文标题】Access VBA 中的 AddNew 不添加新行或报告任何错误【英文标题】:AddNew in Access VBA does not add a new row or report any error 【发布时间】:2021-08-13 14:17:31 【问题描述】:

我正在使用以下代码将 CSV 文件的行导入 Access 表:

Set readingSet = CurrentDb.OpenRecordset("decibellog", dbOpenDynaset)

abortImport = False
fileHandle = FreeFile()                                 ' Get the next available file handle.
lineImportCount = 0

Open fileSpec For Input As #fileHandle                  ' Open the decibel logger file.

While Not EOF(fileHandle) And Not abortImport           ' While not at End-Of-File (EOF).

    Line Input #fileHandle, fileLine                    ' Read a line from the decibel logger file.
    lineArray = Split(fileLine, vbTab)                  ' Parse the line into an Array.
    
    If lineArray(0) = "Place" Then
    
        ' Skip this header line.
    Else
    
        readingSet.AddNew                               ' Append a new record to the DecibelLog table.
        
        readingSet!jobinstrumentimportid = jobInstImportId
        readingSet!readingdate = DateValue(lineArray(1) & " " & lineArray(2))
        readingSet!readingtime = lineArray(2)
        readingSet!decibelreading = CDbl(lineArray(3))
        readingSet!dbweighting = lineArray(4)
        
        lineImportCount = lineImportCount + 1
                   
    End If
    
    DoEvents                                            ' Yield to operating system.
    
Wend

readingSet.Close                                        ' Close the decibelreading dataset.
Set readingSet = Nothing

readingSet.AddNew 命令不会向decibellog 表添加新行。

没有抛出错误。

readingSetRecordCount 属性永远不会增加。表格中没有添加任何行。

我是否需要使用 SQL INSERT 而不是 .AddNew?

【问题讨论】:

您应该在 While 循环后关闭文件句柄,否则文件将保持打开状态。 你应该避免使用 bang 运算符,因为***.com/questions/2923957/… While...Wend 已弃用,取而代之的是 Do While...Loop,前者被包括在内是为了向后兼容遗留代码库 为了控制对象范围,我建议使用 With Block 代替 readingSet 变量。这使得代码更加清晰简洁。 【参考方案1】:

你需要添加

readingSet.Update

写入字段后,为了保存新记录。

见https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/recordset-addnew-method-dao

修改新记录后,使用 Update 方法保存更改并将记录添加到 Recordset。在您使用 Update 方法之前,数据库中不会发生任何更改。

如果您发出 AddNew,然后执行移动到另一条记录的任何操作,但未使用 Update,您的更改将丢失且不会发出警告。此外,如果您关闭 Recordset 或结束声明 Recordset 或其数据库对象的过程,则新记录将被丢弃而不会发出警告。

【讨论】:

以上是关于Access VBA 中的 AddNew 不添加新行或报告任何错误的主要内容,如果未能解决你的问题,请参考以下文章

MS Access/ADO AddNew 方法不附加记录

在不使用 VBA/Access 中的内联查询的情况下向表中添加记录

Access VBA添加引用正在重复

在 Access VBA 中添加附件

MS Access 未打开时 DMax 功能不起作用

VBA代码按顺序添加数字和数据行