我有一些数据访问文件。 执行某些计算,我需要创建与来自原始数据计算(生成)的值某些表。 这些临时表的大小约为500 MB每个标准,我用它。 这必须在完成一次又一次至少50次不同的标准。
一旦第一部分已完成 - 临时表可以被丢弃。 问题是在Access甚至删除行和删除表文件的大小仍然很高了。 由于每个后结果传递大小仍尽管删除表增加。 不久,2GB墙击中。
解决方法尝试:1.使用VBA - 创建一个临时mdb文件 - >创建表的有 - >链接到原始访问文件 - 保存在这里产生的价值观 - >使用的计算 - >删除文件都做一遍。
这是非常缓慢插入记录此表。 我beleive怎么一回事,因为它是一个链接表。 插入我会做的数字是几十万。
压缩和修复当前的数据库使用VBA - 没有明确的答案。 发送键的作用 - 但无法证明。
使用一个单独的文件ACCDB“control_file_,这将做原始访问文件的工作,删除表,结构紧凑,维修,然后在接下来的标准做了一遍。 请告知VBA代码这一点。 在VBA代码连续性仍然存在。
我可以推荐解决压缩数据库的问题,最简单的方法是简单地使用我在以前发表的的代码重新启动和编程压缩的MSACCESS数据库 。
否则,使用单独的临时数据库可能是最好的。 虽然有关业绩的一件事:如果你把保持链接表总是打开的护理使用单独的链接数据库不慢。
是什么使操作速度慢是数据库引擎需要过于频繁创建和删除数据库锁定文件的事实。 如果你保持一个链接表打开(打开记录到一个虚表,不关闭它),然后锁定文件将保留,你会得到应有的性能。
压缩和修复不可能在当前数据库在Access 2007中您看到这个要么是错误或引用旧版本的Access的所有技术。
我有同样的问题,因为你必须和最好的办法确实是分裂您的数据库,让你可以在BE执行计算和压缩和修复该临时DB。 此外,您对性能问题实际上将使用来自雷诺的想法解决。
我曾经遇到过在我的数据库上的原始数据导入腹胀同样的问题。 相反拆分数据库,并定期压缩后端的,我决定使用数据库对象(DAO)来创建一个临时数据库,从临时数据库导入数据,查询,然后将其删除。 如下所示的基本代码:
Sub tempAccessDatabaseImport()
Dim mySQL As String
Dim tempDBPath As String
Dim myWrk As DAO.Workspace
Dim tempDB As DAO.Database
Dim myObject
'Define temp access database path
tempPathArr = Split(Application.CurrentProject.Path, "\")
For i = LBound(tempPathArr) To UBound(tempPathArr)
tempDBPath = tempDBPath + tempPathArr(i) + "\"
Next i
tempDBPath = tempDBPath + "tempDB.accdb"
'Delete temp access database if exists
Set myObject = CreateObject("Scripting.FileSystemObject")
If myObject.FileExists(tempDBPath) Then
myObject.deleteFile (tempDBPath)
End If
'Open default workspace
Set myWrk = DBEngine.Workspaces(0)
'DAO Create database
Set tempDB = myWrk.CreateDatabase(tempDBPath, dbLangGeneral)
'DAO - Import temp xlsx into temp Access table
mySQL = "SELECT * INTO tempTable FROM (SELECT vXLSX.*FROM [Excel 12.0;HDR=YES;DATABASE=" & RAWDATAPATH & "].[" & WORKSHEETNAME & "$] As vXLSX)"
'DAO Execute SQL
Debug.Print mySQL
Debug.Print
tempDB.Execute mySQL, dbSeeChanges
'Do Something Else
'Close DAO Database object
tempDB.Close
Set tempDB = Nothing
myWrk.Close
Set myWrk = Nothing
'Delete temp access database if exists
If myObject.FileExists(tempDBPath) Then
'myObject.deleteFile (tempDBPath)
End If
End Sub