从Excel连接时访问DB腹胀



我有一个 Access 应用程序拆分 FE/BE,它导入数据并将报告导出到 Excel xlsm 文件。用户在 Excel 报表中执行各种操作,将记录添加到 BE 数据库。与 BE DB 的所有连接都处于打开和关闭状态,并且在数据库连接关闭并设置为无之前关闭记录集。BE受密码保护,我每天大约有20个活跃用户。

后端数据库在白天使用过程中膨胀,每晚都需要压缩。我试图隔离后端增长的原因。在白天,它将从 10mb 增长到 100mb 以上。

腹胀是由 Excel 链接引起的,如果在 Access 中完成所有操作,则 BE 数据库仅增长几 kb。

我在这里和谷歌上找到了很多帖子,但找不到任何使数据库保持正常大小的建议。我知道删除和添加记录会导致腹胀,但我们每天只添加几百条记录。

示例 Excel 代码:我们使用五个 Excel 报表。打开这些报告,宏每天调用大约 100 次。

Dim db As DAO.Database, rstJournal As DAO.Recordset
Set db = DAO.OpenDatabase(tmpDir & "DBname.accdb", False, False, "MS Access;PWD=Password")
Set rstJournal = db.OpenRecordset("Select * from tblJournal", Options:=dbAppendOnly)
rstJournal.AddNew
rstJournal!J_Name = ActiveCell.Offset(i, 1).Value
...
RstJournal.Update
If Not rstJournal Is Nothing Then rstJournal.Close
If Not db Is Nothing Then db.Close
Set rstJournal = Nothing
Set db = Nothing

似乎您打开和关闭数据库的每个循环都可能是个问题。

但是您可能希望以这种方式使用代码。

Const dbFailOnError = 128
Dim db As DAO.Database
Dim strSQL As String
Set db = DAO.OpenDatabase(tmpDir & "DBname.accdb", False, False, "MS Access;PWD=Password")
For I = 0 To ActiveSheet.Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
strSQL = "INSERT INTO tblJournal ( J_Name , field2 ) "
strSQL = strSQL & "SELECT '" & ActiveCell.Offset(I, 1).value & "', '" & ActiveCell.Offset(I, 2).value & "'"
' If next line throw an error then use it without dbFailOnError and disable this one
db.Execute strSQL, dbFailOnError
' db.Execute strSQL
Next I
If Not db Is Nothing Then db.Close
Set db = Nothing

抱歉,您没有提供字段名称。所以我使用了 field2 表单

阿萨夫

最新更新