2015-07-03 3 views
1

Я хочу сохранить производительность своей базы данных вверху, уменьшая количество объектов и создавая материал только временно. У меня есть таблица, которая должна быть автоматизирована с кода:Удалить таблицу в отчете с небольшой задержкой

Существует отчет, который нуждается в данных из этой таблицы - (работает отлично), так что это поток:

'-> form is opened -> onClick find-button 
'-> table of dates is created -> table of dates is populated 
'-> Report is opened -> onReportClose (I want the table of dates to be deleted). 

Код написан, он отлично работает сам по себе:

CurrentDb.TableDefs.Refresh 
DoCmd.DeleteObject acTable, "temp-table" 

Поэтому я добавил макрос в отчете, чтобы запустить приведенный выше код: это функция. Но я получаю ошибку ниже:

ошибка времени выполнения «3211»: Двигатель базы данных не может заблокировать таблицу «ТЕМП-таблица», потому что она уже используется другим человеком или процесса.

Я считаю, что это потому, что отчет, вероятно, использует его. Поэтому я добавил задержку в десять секунд, чтобы мой код:

Dim PauseTime As Variant 
Dim Start As Variant 
Dim Elapsed As Variant 

PauseTime = 10 
Start = Timer 
Elapsed = 0 
Do While Timer < Start + PauseTime 
    Elapsed = Elapsed + 1 
Loop 
CurrentDb.TableDefs.Refresh 
DoCmd.DeleteObject acTable, "temp-table" 

Вместо этого, кажется, держит всю базу данных в течение 10 секунд и тот же вопрос все еще происходит. Любые идеи/предложения о том, как удалить эту таблицу в отчете закрыть или принудительно удалить таблицу в Ms-Access (возможно?) Или как обойти это, приветствуются.

+1

В MS Access создание и удаление таблиц вызовет массовое раздувание. У вас нет пути? Лучше даже очистить стол. – Fionnuala

+0

Должен ли вы отказаться от таблицы или отбросить ее содержимое при закрытии отчета? Если это не является абсолютным требованием, вы можете иметь дело с таблицей ('DROP' или' DELETE') непосредственно перед заполнением * таблицы дат * * шагом в вашем рабочем процессе. – HansUp

+0

Я сделал проверку в моей функции create table. он проверяет, существует ли таблица и ее удаляет. Я хочу отказаться от содержимого, поэтому в моей базе данных нет этой таблицы 24/7. Я хочу это в определенное время @HansUp –

ответ

1

Вы должны очистить RecordSource от отчета и запустить метод Requery в событии Unload. Сразу после этого вы можете DROP таблицы данных.

Private Sub Report_Unload(Cancel As Integer) 

    'Desvinculo la tabla del reporte 
    Me.RecordSource = "" 
    Me.Requery 

    'Borro las tablas de datos 
    DoCmd.RunSQL "DROP TABLE name_of_table" 

End Sub 
Смежные вопросы