Я уже давно работаю над этой базой данных и застрял в проблемах с паролями, которые у меня есть с базой данных, и это одна из них.Ошибка времени выполнения '3052'. Счет блокировки обмена файлами превышен. Увеличьте запись реестра MaxLocksPerFile
Этот код передает таблицу в excel, помещая каждую 1 000 000 записей на отдельный лист. Текущая таблица, которую я пытаюсь передать, имеет менее 1,5 миллиона записей и 7 полей.
Кодирование отлично работает до тех пор, пока оно не достигнет таблицы SQL Alter. В этот момент он выплевывает эту ошибку. Я уже увеличил dbMaxLocksPerFile до 20 миллионов, и это не помогло, и я в тупике.
Любая помощь, которую я мог бы получить на это было бы удивительно :)
FYI Это первый много программирования VBA я когда-либо делал, и я самоучка (Google научил), так что мой набор, и такие могут быть немного грязными. Код ниже:
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
Спасибо, но это не поможет мне спариваться. Если вы читаете кодировку, прямо в начале я установил ее до 20 миллионов !!! –
Нашел другой способ передачи таблицы, которая работает сейчас –