Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Ошибка 29068  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 3733
Возникла следующая проблема.
Задача. Берётся исходная база данных, правится содержимое таблиц по определённым правилам. Вставляются формы, макрос autoexec и получается база под конкретного заказчика. Всё работало нормально. Но пришлось несколько усложнить задачу по формированию базы. Повесить дополнительный код. И программа стала вылетать по ошибке 29068 (смотри приложение)

Ошибка возникает в следующем фрагменте кода
    strPath = DLookup("Path", "tblPath", "NikName='RabPath'")  'CurrentProject.Path
    DestinationDatabase = fnBuildPath(strPath, "ONS_T.mdb")
    
    NewName = "frmAlarm"
    SourceObjectName = "frmAlarm"
    DoCmd.CopyObject DestinationDatabase, NewName, acForm, SourceObjectName


    NewName = "autoexec"
    SourceObjectName = "autoexec_"
    DoCmd.CopyObject DestinationDatabase, NewName, acMacro, SourceObjectName
Ошибка возникает после второго оператора DoCmd.CopyObject Иногда она не возникает (особенно после сжатия базы). Если проходишь под отладчиком, то никогда не случается. Возможно предыдущий оператор не всегда успевает отработать. Что делать? Пробовал ставить Sleep, не помогло.


-------------------------------------------------------------
А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?

К сообщению приложен файл. Размер - 28Kb
26 сен 17, 14:37    [20823989]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка 29068  [new]
doevents
Guest
DoEvents ?
26 сен 17, 15:08    [20824158]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка 29068  [new]
Анатолий ( Киев )
Guest
Joss, а если сначала макрос, а затем форму?
26 сен 17, 15:19    [20824201]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка 29068  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 15944
Joss
Ошибка возникает после второго оператора DoCmd.CopyObject
ПРИ его выполнении или ПОСЛЕ его выполнения, на следующем операторе?

Joss
Иногда она не возникает (особенно после сжатия базы)
Сжатия какой именно базы - в которой код (наиболее вероятно), или в которую выполняется копирование?

Вообще я бы вставил перед вторым блоком копирования небольшую (100-200 мс) задержку.
26 сен 17, 15:23    [20824212]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка 29068  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 3733
Первое, DoEvents ставил - не помогло.
Задержку ставил - не помогло (sleep 1000)
Местами копирование формы и макроса не менял.

Пока сделал следующее
Public Sub sbCopyFormAlarm()

    On Error GoTo sbCopyFormAlarm_Error
    ...
    ...

Exit_sbCopyFormAlarm:

    On Error GoTo 0
    Exit Sub

sbCopyFormAlarm_Error:
    If Err = 29068 Then
     DoEvents
     Resume
    Else
     MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure sbCopyFormAlarm of Module Module1"
     Resume Exit_sbCopyFormAlarm
    End If
End Sub
Пока ошибки не выдавало. Я просто зациклил обработку этой ошибки. Пока не выполнится - будет пытаться.
26 сен 17, 15:59    [20824353]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка 29068  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 15944
Joss
Я просто зациклил обработку этой ошибки. Пока не выполнится - будет пытаться.
Так - плохо.

1) Введи переменную-счётчик, и ограничь максимальное количество "витков" цикла;
2) Обработчик включай непосредственно перед оператором, и выключай сразу после него.
26 сен 17, 16:06    [20824393]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка 29068  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 3733
Akina
Joss
Я просто зациклил обработку этой ошибки. Пока не выполнится - будет пытаться.
Так - плохо.

1) Введи переменную-счётчик, и ограничь максимальное количество "витков" цикла;
2) Обработчик включай непосредственно перед оператором, и выключай сразу после него.
Имеет смысл. Только вместо счетчика циклов лучше наверное контролировать время - 5-10 сек Хотя тут не угадаешь, что лучше.
26 сен 17, 16:18    [20824419]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка 29068  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 15944
Joss
вместо счетчика циклов лучше наверное контролировать время

Ничто не мешает контролировать и то, и это:

counter = 10
start = timer
On Error GoTo sbCopyFormAlarm_Error
DoCmd.CopyObject


sbCopyFormAlarm_Error:
    If Err = 29068 Then
        counter = counter - 1
        if counter = 0 or timer - start > 10 then Resume Exit_sbCopyFormAlarm
        DoEvents
        Resume
26 сен 17, 16:33    [20824458]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка 29068  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 3733
Akina
Ничто не мешает контролировать и то, и это
Так и сделаю
27 сен 17, 09:27    [20825744]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить