mysql - 运行时错误 '3052'。超出文件共享锁定计数。增加 MaxLocksPerFile 注册表项

标签 mysql excel vba ms-access transfer

我已经在这个数据库上工作了一段时间,但一直被数据库的几个问题所困扰,这就是其中之一。

此代码将表格传输到 Excel 中,将每 1,000,000 条记录放在单独的工作表中。我尝试传输的当前表有将近 150 万条记录和 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

最佳答案

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

  1. 打开空 Access 应用程序。
  2. 选择文件 >> 打开 >> 浏览并选择数据库文件。
  3. 单击浏览窗口中“打开”按钮的下拉菜单。
  4. 选择“打开独占”选项。

数据库文件将以解锁状态打开。现在执行脚本,它应该可以正常工作。

关于mysql - 运行时错误 '3052'。超出文件共享锁定计数。增加 MaxLocksPerFile 注册表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26542653/

相关文章:

excel - 排序数据透视表 VBA

mysql - 仅当另一条记录包含不同字段中第一条记录的值时才选择记录

php - Laravel:用于不同公告类型的单个或多个 mysql 表

excel - 用于选择范围或输入文本的输入框

vba - 尝试从 Excel VBA 保存 Word 文件,而不覆盖任何现有文件

c# - 在 C# 函数中设置 Excel 单元格的公式

mysql - 直接从 SQL 查询加载 Excel 验证列表

vba - IsNa Sub 或未定义函数

c# - 如何根据当前项目构建调用另一个依赖项函数的依赖项?

mysql - 检查一个 unix_timestamp 是否大于另一个