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
表添加新行。
没有抛出错误。
readingSet
的 RecordCount
属性永远不会增加。表格中没有添加任何行。
我是否需要使用 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 不添加新行或报告任何错误的主要内容,如果未能解决你的问题,请参考以下文章