powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проверка с определенным временным интервалом.
7 сообщений из 7, страница 1 из 1
Проверка с определенным временным интервалом.
    #39251616
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Не знаю, правильно в этой ветке данну тему разместить или VBA.

На SQL сервере каждый день формируются данные. В 00:05 стартует Джоб. Он выполняется 3 часа. Далее в 04:00 стартует Access, который обрабатывает полученные данные и формирует ряд отчетов. Отчеты формируются до 08:00. До начала рабочего дня.
При старте Access проверяется вымотались данные сервера или нет. При выполнении джоба идет логирование запросов. После завершения джоба последняя строка в логе. Finish. Access как раз запускается с проверки, есть ли в определенной таблице строка с этим текстом за сегодня. Если да, то стартуют остальные макросы. Если нет – макросы останавливаются с сообщением «Какие-то данные не выгрузились»
Раньше такая ошибка возникала если на сервере случалась какая-либо критическая ошибка. Сейчас наняли нового админа следить за базами, и время выполнения Джоба стало скакать от 3 до 7 часов. Соответственно при запуске Access в 4 часа, если джоб не выполнен, то происходит полная остановка всех запросов.
А теперь собственно вопрос:
Как сделать что бы происходила не полная остановка, а периодическая проверка таблицы на наличие в ней строки с текстом «Finish», и если ее нет, то проверка происходит через 10 минут и так далее до тех пор пока не появится. И далее запускаются остальные запросы.
Сейчас Access стартует с выполнения такого запроса:
Код: sql
1.
2.
3.
SELECT 1/1 AS Проверка INTO [001 проверка]
FROM dbo_updateLog
WHERE (((Format([occured],"dd.mm.yyyy"))=Date()) AND ((dbo_updateLog.step)="UpdateData2 finish"));


Далее запускается следующий модуль:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Function prov()

If DCount("*", "001 проверка") > 0 Then

DoCmd.RunMacro "002 Autozapusk"

Else

MsgBox "Какие-то данные не выгрузились!"

End If

End Function


Как я думаю, мне нужно подредактировать код после Else, что бы шла проверка с определенным интервалом.
VBA не знаю. За мелкими вопросами, обращался на этот форум. Буду благодарен за помощь.
...
Рейтинг: 0 / 0
Проверка с определенным временным интервалом.
    #39251620
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверка по таймеру. В Access можно использовать контрол на (скрытой) форме.
...
Рейтинг: 0 / 0
Проверка с определенным временным интервалом.
    #39251635
VBA не знаю - ключевое

Я бы крутил Акс круглосуточно, а не запускал-останавливал.
Но на пальцах это не объяснить :(

Скелетик-то простой:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Do
     ' по условию 
     ' - или простой с безобидным Sleep
     ' - или обработка данных
     ' - или штатный выход
     ' - или аварийный выход
Loop



или же, покультурнее, то же самое, но через события класса таймера.

Таймер, в первом приближении, можно реализовать как класс на базе встроенного таймера специально выделяемой для этого формы. Готовый пример в сети есть.
' http://hiprog.com/index.php?option=com_content&task=view&id=251661564&Itemid=35
'Serge Gavrilov (c) SGSoft 2006
.
...
Рейтинг: 0 / 0
Проверка с определенным временным интервалом.
    #39251653
Im_Max,

VBA не знаю - ключевое

Я бы начал с Do...Loop
Когда все заработает - портировал бы под таймер.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
' *** SLEEP
Private Declare Sub fe_Sleep Lib "kernel32" Alias "Sleep" (ByVal lMilliseconds&)

' *** SLEEP
Public Sub sp_Sleep(pMsec&, 
                    Optional pDoEvBfr As Boolean = False, 
                    Optional pDoEvAft As Boolean = False)  
    If (pMsec > 0) Then
         If pDoEvBfr Then DoEvents
         Call fe_Sleep(pMsec)
         If pDoEvAft Then DoEvents
    End If
End Sub
...
Рейтинг: 0 / 0
Проверка с определенным временным интервалом.
    #39252419
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как уже заметили: "VBA не знаю - ключевое"

Просмотрел примеры с таймером и Do Loop. В итоге нагородил следующее. Вроде работает, но точно проверить смогу только завтра. Когда с сервера поступит очередная партия данных. Может кро просмотреть хотя бы бегло? Может что-то совсем кривое написал:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Option Compare Database

Function proverka1()

DoCmd.SetWarnings False

Do

DoCmd.RunSQL "SELECT DateValue([occured]) AS Дата INTO [001 проверка] FROM dbo_updateLog WHERE (([dbo_updateLog].[step]  Like 'UpdateData2 finish') AND ((DateValue([occured]))=Date()));"

If DCount("*", "001 проверка") > 0 Then

DoCmd.RunMacro "002 Autozapusk"

Else

Dim PauseTime, Start, Finish, TotalTime

    PauseTime = 600    ' Set duration.
    Start = Timer    ' Set start time.
    Do While Timer < Start + PauseTime
        DoEvents    ' Yield to other processes.
    Loop
    Finish = Timer    ' Set end time.
    TotalTime = Finish - Start    ' Calculate total time.
    'MsgBox "Paused for " & TotalTime & " seconds"

End If

Loop Until DCount("*", "001 проверка") > 0

End Function
...
Рейтинг: 0 / 0
Проверка с определенным временным интервалом.
    #39252441
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im_Max,

я только не поняла, зачем каждую секунду создавать таблицу, почему не работаете с обычным запросом на выборку
и сомнение вызвало Like без * или иного знака(можете пролететь, если в строке есть еще что то типа пробел,точка....)

Код: vbnet
1.
2.
3.
4.
5.
6.
dim s1
s1= "SELECT DateValue([occured]) AS Дата"
s1=s1 & "  INTO [001 проверка]"
s1=s1 & "  FROM dbo_updateLog"
s1=s1 & "  WHERE (([dbo_updateLog].[step]  Like 'UpdateData2 finish') AND ((DateValue([occured]))=Date()));"
DoCmd.RunSQL s1



и не мешало бы вставить счетчик повторов цикла --как лекарство от зацикливания
стоит подумать и о принудительной остановке цикла
...
Рейтинг: 0 / 0
Проверка с определенным временным интервалом.
    #39252445
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКАIm_Max,

я только не поняла, зачем каждую секунду создавать таблицу

Разве каждую секунду? Хотел настроить на раз в 10 минут.

ПЕНСИОНЕРКАпочему не работаете с обычным запросом на выборку


Сделаю запрос. Таблица нужна была для тестов.

ПЕНСИОНЕРКАи сомнение вызвало Like без * или иного знака(можете пролететь, если в строке есть еще что то типа пробел,точка....)

Да, там уже несколько лет одни и теже названия. Если и изменят, то на что-то кардинальное. И там * * уже не помогут. Но в любом случае отработку баз контролирую каждый день.


ПЕНСИОНЕРКАи не мешало бы вставить счетчик повторов цикла --как лекарство от зацикливания
стоит подумать и о принудительной остановке цикла

По тестирую текущий алгоритм, и тоже думал добавить. Я VBA я чайник (и это еще для меня будет комплимент) Так что полный код, со всеми нюансами сразу не напишу точно.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проверка с определенным временным интервалом.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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