运行时错误“3052”。 文件共享locking计数超出。 增加MaxLocksPerFileregistry项

我已经在这个数据库上工作了一段时间了,并且陷入了一些与数据库有关的问题,这就是其中之一。

这个代码将一张表转换成excel,把每一百万条logging放在一张单独的表格中。 目前我正试图转移的表格有150万条logging和7个字段。

编码工作正常,直到它击中Alter Table SQL。 在这一点上它吐出这个错误。 我已经增加了dbMaxLocksPerFile到2000万,这没有帮助,我很难过。

任何帮助,我可以得到这将是惊人的:)

仅供参考这是我做过的第一批VBA编程,是自学成才(谷歌教),所以我的设置等可能有点混乱。 代码如下:

Private Sub EXPORT_TO_EXCEL_Click() DoCmd.SetWarnings False DAO.DBEngine.SetOption dbMaxLocksPerFile, 20000000 'That's 20 million!!! 'DTable is the file name, and is input by the user in earlier coding under a public string Call CreateNewFolder("O:\Folder Location\" & DTable & "") Dim strWorksheetPathTable As String '----Set File Path strWorksheetPathTable = "O:\Folder Location" strWorksheetPathTable = strWorksheetPathTable & "" & DTable & "\" & DTable & ".xlsb" '----SPLIT DATA TABLE IN ACCESS THEN EXPORT THESE SMALLER TABLES (Splits if over 1,000,000 records) Dim rs As New ADODB.Recordset Dim cn As New ADODB.Connection Set cn = CurrentProject.Connection Dim rowcount As Long Dim tblcount As Integer Dim i As Integer Dim tblx As String Dim dbsDatas As DAO.Database Set dbsDatas = CurrentDb SQL = "SELECT * INTO tmpdata FROM [" & DTable & "]" DoCmd.RunSQL SQL SQL = "ALTER TABLE tmpdata ADD COLUMN id COUNTER" DoCmd.RunSQL SQL SQL = "SELECT count(*) as rowcount from [" & DTable & "]" rs.Open SQL, cn rowcount = rs!rowcount rs.Close tblcount = rowcount / 1000000 + 1 For i = 1 To tblcount SQL = "SELECT * into tmpdata" & i & " FROM tmpdata" & _ " WHERE id<=1000000*" & i DoCmd.RunSQL SQL SQL = "DELETE * FROM tmpdata" & _ " WHERE id<=1000000*" & i DoCmd.RunSQL SQL DoCmd.TransferSpreadsheet transfertype:=acExport, _ spreadsheettype:=acSpreadsheetTypeExcel12, _ TableName:="tmpdata" & i & "", FileName:=strWorksheetPathTable, _ hasfieldnames:=True, _ Range:="Data" & i & "" DoCmd.DeleteObject acTable, "tmpdata" & i & "" Next i DoCmd.DeleteObject acTable, "tmpdata" DoCmd.SetWarnings True MsgBox ("Report saved at the following location: " & strWorksheetPathTable & "") End Sub 

答案在这里:

http://www.anysitesupport.com/access-maxlocksperfile-file-sharing-lock-count-exceeded/

实际上更仔细地看,这对我来说是更好的答案

http://support2.microsoft.com/kb/815281

把这段代码放在脚本中:DAO.DBEngine.SetOption dbmaxlocksperfile,15000

但之后又回到9500,显然这很重要

我不确定是否有人会发现这有帮助,但是我的解决方法是将表复制到一个txt文件,然后从这里将1,000,000条logging一次复制到单独的Excel表中。

出口到TXT

 Private Sub EXPORT_TO_TEXT_FILE_Click() Dim txtFile As String, rs As DAO.Recordset, j As Integer, strFld As String, strData As String txtFile = "O:\GData\Downstream\DWN Data Mgmt\CEDAL\Reports\" & NewFileName & ".txt" Set rs = CurrentDb.OpenRecordset("" & NewFileName & "") For j = 0 To rs.Fields.Count - 1 strFld = strFld & vbTab & rs(j).Name Next Open txtFile For Output As #1 Print #1, Mid(strFld, 2) Do Until rs.EOF For j = 0 To rs.Fields.Count - 1 strData = strData & vbTab & rs(j) Next Print #1, Mid(strData, 2) strData = "" rs.MoveNext Loop rs.Close Close #1 

转移到工作簿

 Private Sub Build_Data_Sheets_Click() Dim txtSplitTextFiles As String txtSplitTextFiles = "O:\Gorgon Data\Downstream_LNG POC\DWN Data Mgmt\CEDA Lite\Reports\" & NewFileName & ".txt"" Dim strWorksheetPathTable As String strWorksheetPathTable = "O:\GData\Downstream\DWN Data Mgmt\CEDAL\Reports\" & NewFileName & "..xls" Const LINES_PER_SHEET As Long = 1000000 Dim ResultStr As String Dim FileName As String Dim FileNum Dim Counter As Long, r As Long Dim arr() FileNum = FreeFile() Open txtSplitTextFiles For Input As #FileNum Counter = 0 r = 0 ReDim arr(1 To LINES_PER_SHEET, 1 To 1) Do While Not EOF(FileNum) Counter = Counter + 1 r = r + 1 Line Input #FileNum, ResultStr arr(r, 1) = ResultStr If r = LINES_PER_SHEET Then ArrayToSheet xlWB, arr r = 0 End If Loop If Counter Mod LINES_PER_SHEET > 0 Then ArrayToSheet xlWB, arr Close #FileNum 

arrays到页“调用”

 Sub ArrayToSheet(wb As Workbook, ByRef arr) Dim r As Long r = UBound(arr, 1) With wb.Sheets.Add(after:=wb.Sheets(wb.Sheets.Count)) .Range("A1").Resize(r, 1).Value = arr End With ReDim arr(1 To r, 1 To 1) End Sub 

我希望你能得到答案,但你也可以尝试下面的步骤

  1. 打开空访问应用程序。
  2. select文件>>打开>>浏览并select数据库文件。
  3. 点击浏览窗口中的打开button下拉菜单。
  4. select“独家打开”选项。

数据库文件将以解锁状态打开。 现在执行脚本,它应该没有任何错误的工作。