在 Access 中执行 qdf.Execute dbFailOnError 时出现运行时错误“3049”
Posted
技术标签:
【中文标题】在 Access 中执行 qdf.Execute dbFailOnError 时出现运行时错误“3049”【英文标题】:Run-time error '3049' when qdf.Execute dbFailOnError in Access 【发布时间】:2015-06-19 02:50:09 【问题描述】:我正在尝试将新数据提交到各种数据库中,当我在一段时间后继续提交数据时,它显示了这个错误:
提交语句如下所示:
sql "INSERT INTO Bond Values("","HK0000122334","CNH",8447.5357732363,8447.5357732400,0.0000000037,109913,"01Jun15")".
数据库也达到 2.09Gb。我的代码如下所示:
Sub commit(dbName As String, tableName As String, commitString As String, reportDate As String)
Dim ws As DAO.Workspace
Dim db As DAO.Database
Dim sSQL As String
Dim qdf As QueryDef
sDb = dbName & ".accdb"
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(sDb)
sqlStatementList = Split(commitString, ";")
For Each sqlStatement In sqlStatementList
sqlStatement = Replace(sqlStatement, ")" & vbLf, reportDate)
If InStr(tableName, "EIS") <> 0 Then
sqlStatement = Replace(sqlStatement, "EIS", tableName)
End If
sSQL = sqlStatement
Set qdf = db.CreateQueryDef("", sSQL)
qdf.Execute dbFailOnError
Next sqlStatement
End Sub
到目前为止我所尝试的:
1)
Set qdf = Nothing
Set db = Nothing
这没有帮助。还是同样的问题。
2) 尝试删除该特定数据库并继续提交到其余数据库,但仍然遇到同样的问题。
需要一些指导来解决这个问题。
【问题讨论】:
看起来传递给函数的dbName参数是NULL
事实并非如此。我正在传递一个 dbName。我也检查了sql语句。
应该是 2 个单独的单词。债券和价值观
bond是表名,values是要插入数据库的值
【参考方案1】:
maximum size of an Access database is 2GB(链接是 2010 年的,但 2013 年似乎是一样的)。所以是的,当数据库变得那么大时,您的插入将失败。您的选择是将数据拆分到另一个数据库文件或切换到 SQL Server 或其他数据库类型。
【讨论】:
或压缩和修复,之后可能只有 100mb 大 ;) 如何压缩和修复?能解释一下吗? 实际上,luk2302 可能意味着压缩和修复(在功能区上的数据库工具下可用)或VBA:Application.compactRepair sourecFile, destinationFile
。您可以在每次插入后包含此内容。或者,将您的大文件分成多个 Access 文件,作为链接表、ODBC 或 DAO 连接。以上是关于在 Access 中执行 qdf.Execute dbFailOnError 时出现运行时错误“3049”的主要内容,如果未能解决你的问题,请参考以下文章
从 .NET 应用程序在 Access 的打开实例中执行函数