Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка 29068 / 9 сообщений из 9, страница 1 из 1
26.09.2017, 14:37
    #39526468
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 29068
Возникла следующая проблема.
Задача. Берётся исходная база данных, правится содержимое таблиц по определённым правилам. Вставляются формы, макрос autoexec и получается база под конкретного заказчика. Всё работало нормально. Но пришлось несколько усложнить задачу по формированию базы. Повесить дополнительный код. И программа стала вылетать по ошибке 29068 (смотри приложение)

Ошибка возникает в следующем фрагменте кода
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    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-ти миллиардное состояние Билла Гейтса?
...
Рейтинг: 0 / 0
26.09.2017, 15:08
    #39526508
doevents
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 29068
DoEvents ?
...
Рейтинг: 0 / 0
26.09.2017, 15:19
    #39526518
Ошибка 29068
Joss, а если сначала макрос, а затем форму?
...
Рейтинг: 0 / 0
26.09.2017, 15:23
    #39526520
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 29068
JossОшибка возникает после второго оператора DoCmd.CopyObject ПРИ его выполнении или ПОСЛЕ его выполнения, на следующем операторе?

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

Вообще я бы вставил перед вторым блоком копирования небольшую (100-200 мс) задержку.
...
Рейтинг: 0 / 0
26.09.2017, 15:59
    #39526567
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 29068
Первое, DoEvents ставил - не помогло.
Задержку ставил - не помогло (sleep 1000)
Местами копирование формы и макроса не менял.

Пока сделал следующее
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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

Пока ошибки не выдавало. Я просто зациклил обработку этой ошибки. Пока не выполнится - будет пытаться.
...
Рейтинг: 0 / 0
26.09.2017, 16:06
    #39526581
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 29068
JossЯ просто зациклил обработку этой ошибки. Пока не выполнится - будет пытаться.Так - плохо.

1) Введи переменную-счётчик, и ограничь максимальное количество "витков" цикла;
2) Обработчик включай непосредственно перед оператором, и выключай сразу после него.
...
Рейтинг: 0 / 0
26.09.2017, 16:18
    #39526594
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 29068
AkinaJossЯ просто зациклил обработку этой ошибки. Пока не выполнится - будет пытаться.Так - плохо.

1) Введи переменную-счётчик, и ограничь максимальное количество "витков" цикла;
2) Обработчик включай непосредственно перед оператором, и выключай сразу после него. Имеет смысл. Только вместо счетчика циклов лучше наверное контролировать время - 5-10 сек Хотя тут не угадаешь, что лучше.
...
Рейтинг: 0 / 0
26.09.2017, 16:33
    #39526604
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 29068
Jossвместо счетчика циклов лучше наверное контролировать время
Ничто не мешает контролировать и то, и это:

Код: vbnet
1.
2.
3.
4.
counter = 10
start = timer
On Error GoTo sbCopyFormAlarm_Error
DoCmd.CopyObject



Код: vbnet
1.
2.
3.
4.
5.
6.
sbCopyFormAlarm_Error:
    If Err = 29068 Then
        counter = counter - 1
        if counter = 0 or timer - start > 10 then Resume Exit_sbCopyFormAlarm
        DoEvents
        Resume
...
Рейтинг: 0 / 0
27.09.2017, 09:27
    #39526880
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 29068
AkinaНичто не мешает контролировать и то, и это Так и сделаю
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка 29068 / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]