ник: joka
может проще программно сжать базу при выходе? так же тоже можно сделать?
а вообще вот мой код, самое долгое время в нем занимает работа со столбцами в рекордсете - rst, ну и после удаления временной таблицы база распухает, нужно сжимать
может что то я неправильно делаю?
Private Sub but_FormatNumber_Click()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim tabName As String
Dim i, j, k As Integer
Dim frm As Form_usys_f_parserProgressBar
Dim strFD As Variant
Set db = CurrentDb()
'проверка выбора таблицы для обработки парсером
If Me.TmpFlag Then
tabName = "usys_callstmp"
'выбор файла-лога для обработки парсером и его импорт
If IsExistTab(tabName) Then db.Execute "DROP TABLE " & tabName
strFD = xlsFD()
If Not IsNull(strFD) Then DoCmd.TransferSpreadsheet acImport, 8, tabName, strFD, True, "" Else Exit Sub
Else: tabName = "usys_calls"
End If
'проверка наличия таблицы
If IsExistTab(tabName) Then
'инициализируем форму с ProgressBar
Set frm = New Form_usys_f_parserProgressBar
With frm
.Modal = True
.Visible = True
.InAction = True
End With
Set rst = db.OpenRecordset(tabName)
rst.MoveFirst
While Not rst.EOF
With rst
For i = 0 To .Fields.Count - 1
'выбор столбца с именем Number
If .Fields(i).name = "Number" Then
If (.Fields(i).Value = "incoming") Then
For j = 0 To .Fields.Count - 1
'выбор столбца с именем CallerId
If .Fields(j).name = "CallerId" Then
If Not IsNull(.Fields(j).Value) Then
.Edit
.Fields(i).Value = "8" & .Fields(j).Value
.Update
Else
.Edit
.Fields(i).Value = "н/а"
.Update
End If
End If
Next j
ElseIf (Left(.Fields(i).Value, 9) = "internal-") Then
.Edit
.Fields(i).Value = Right(.Fields(i).Value, Len(.Fields(i).Value) - 9)
.Update
End If
'проверяем былали нажата кнопка прервать
If Not frm.InAction Then MsgBox "Работа парсера прервана пользователем!": Exit Sub
'передача управления системе, которая позволяет отрабатывать ProgressBar
DoEvents
End If
Next i
End With
rst.MoveNext
Wend
rst.Close
If Me.TmpFlag Then
'добавляем обработанные парсером записи в основную таблицу логов
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO usys_calls SELECT * FROM " & tabName
db.Execute "DROP TABLE " & tabName
DoCmd.SetWarnings True
End If
db.Close
'закрытие формы с ProgressBar
DoCmd.Close acForm, "usys_f_parserProgressBar"
MsgBox "Работа парсера завершена успешно!"
Else
MsgBox "Отутствует таблица """ & tabName & """ Необходимо создать данную таблицу.",
End If
DoCmd.Close acForm, Me.name
End Sub