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

Как запустить процедуру и подождать ровно 5 сек. и если работа процедуры не завершена, то прекратить принудительно?
5 секунд вполне достаточно.
...
Рейтинг: 0 / 0
запуск процедуры
    #39195562
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
Dim cmd as ADODB.Command

...
cmd.CommandTimeout = 5
Set rs = cmd.Execute
...
...
Рейтинг: 0 / 0
запуск процедуры
    #39195609
Komil_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Прошу прощения, VBA процедуру, а не ХП.

P.S.
Может попробовать запустить запрос, который вызывает VBA процедуру вот таким макаром?
Если не найду другой способ попробую и такой вариант. Правда, как то не очень.
...
Рейтинг: 0 / 0
запуск процедуры
    #39195628
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
внутри процедуры DoEvents и проверяйте время выполнения, как превысило, так выходите из неё
...
Рейтинг: 0 / 0
запуск процедуры
    #39195796
Komil_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В MS Access есть у меня таблица, где хранятся VB скрипты. Специальной VBA процедурой запускаю VB скрипт.
Пытаюсь через VB скрипт программно установить связь с MS Excel. Если Excel занят (скажем, пользователь нажал на F2 или начал редактировать ячейку и курсор до сих пор мигает, или же открыл диалоговое окно и т.п.), то у меня скрипт висит.
Поэтому (после Вашего ответа) попробовал вот так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sub Test()
Dim X
Set X = GetExcel()
If LCase(TypeName(X)) <> "application" Then MsgBox "Невозможно установить связь с MS Excel.", vbInformation + vbSystemModal
End Sub

Function GetExcel()
Dim Xls, Start, i
Start = Now()
Do While IsEmpty(Xls)
    DoEvents
    Set Xls = GetObject(, "Excel.Application")
    If DateDiff("s", Start, Now()) >= 2 Then
        Exit Do
    ElseIf i > 2 Then
        MsgBox i
        Exit Do
    Else
        i = i + 1
    End If
Loop
If IsObject(Xls) Then Set GetExcel = Xls
End Function


Удивляет одно, вроде бы поставил 2 секунды, но почему то программа висит гораздо дольше и только потом пишет "Невозможно установить связь с MS Excel." Почему так?
...
Рейтинг: 0 / 0
запуск процедуры
    #39195848
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Komil_,
попробуйте этот вариант для решения своей задачи (во всяком случае, проверил - отрабатывает нормально, только библиотеку Excel не забудьте подключить)
4118354
...
Рейтинг: 0 / 0
запуск процедуры
    #39195900
Komil_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Спасибо за ссылку. Действительно работает гораздо быстрее.
Правда есть одна проблема, у разных юзеров разные офисы, поэтому раннее связывание не будет ли проблемой? Попробую экспериментировать и в этом направлении.
...
Рейтинг: 0 / 0
запуск процедуры
    #39195905
Komil_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Странный код, точнее строка отмеченная красным цветом.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub Command1_Click()
Dim exApp As New Excel.Application

    Set exApp = GetObject(, "Excel.Application")

On Error GoTo rrr
    exApp.DisplayAlerts = False
On Error GoTo 0

    exApp.Range("A1").Select
    Set exApp = Nothing
    Exit Sub
    
rrr:
Set exApp = Nothing
End Sub


Здесь exApp = Excel.Application. Так? А в строке "exApp.Range("A1").Select" где Workbook? Где Worksheet? Почему не ругается?
Попробовал поздним связыванием. Сразу стал ругаться. Как так?
...
Рейтинг: 0 / 0
запуск процедуры
    #39195917
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Komil_
Код: vbnet
1.
exApp.Range("A1").Select



От селектов лучше избавиться совсем. Замените на exApp.GoTo. В старших версиях офиса наткнулся на проблему - возникает ошибка 1004 при попытке сделать селект на защищенном листе, даже если защита была снята VBA командой. Народ пишет, что селекты всегда были и остаются глючными.
...
Рейтинг: 0 / 0
запуск процедуры
    #39210028
Aslonov M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin,

Привет Ребята !

Я подготовил модуль, но не могу его добавлять в запросах. Может вы мне поможете ?

Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
Public Sub Main()
    Debug.Print Format$(CDateEx("Sep 16 2008 18:40:07", "mdy"), "dmyyyy hh:nn:ss")
    Debug.Print Format$(CDateEx("17 9 2008 18:40:07", "dmy"), "dmyyyy hh:nn:ss")
    Debug.Print Format$(CDateEx("18-2008-Sep 18:40:07", "dym"), "dmyyyy hh:nn:ss")
    Debug.Print Format$(CDateEx("2008/sep/8 18:40:07", "ymd"), "dmyyyy hh:nn:ss")
End Sub
    
Public Function CDateEx(ss As String, Optional ByVal ymd As String = "ymd") As Date
    Dim i As Integer, st As String, sd As String, v As Variant, s As String, k As Integer, _
        m As Integer, d As Integer, y As Integer, j As Integer
    
    ymd = LCase$(ymd)
    i = InStrRev(ss, " ")
    If i Then
        st = Mid$(ss, i)
        ss = Trim$(Left$(ss, i - 1))
    End If
    
    ss = Replace(ss, "-", " ")
    ss = Replace(ss, "/", " ")
    ss = Replace(ss, ".", " ")
    
    v = Split(ss, " ")
    On Error GoTo Err_
    For i = 0 To UBound(v)
        s = v(i)
        If Len(s) Then
            k = k + 1
            If k = 4 Then GoTo Err_
            Select Case Mid$(ymd, k, 1)
                Case "d"
                    If IsNumeric(s) Then
                        d = CInt(s)
                        If d < 1 Or d > 31 Then GoTo Err_
                    End If
                Case "m"
                    If IsNumeric(s) Then
                        m = CInt(s)
                        If m < 1 Or m > 12 Then GoTo Err_
                    Else
                        s = LCase(Left$(s, 3))
                        For j = 1 To 34 Step 3
                            If s = Mid$("janfebmaraprmayjunjulaugsepoctnovdec", j, 3) Then
                                m = (j + 2) / 3: Exit For
                            End If
                        Next j
                    End If
                    If m = 0 Then GoTo Err_
                Case "y"
                    If IsNumeric(s) Then y = CInt(s)
            End Select
        End If
    Next i
    CDateEx1 = CDate(Format$(DateSerial(y, m, d), "yyyy.mm.dd") & " " & st)
    CDateEx = Format(CDateEx1, "dd-mm-yyyy")
    Exit Function

Err_:
    Err.Raise 513, , "&#209;&#242;&#240;&#238;&#234;&#224; &#241; &#228;&#224;&#242;&#238;&#233; &#241;&#238;&#228;&#229;&#240;&#230;&#232;&#242; &#238;&#248;&#232;&#225;&#234;&#243;"
End Function



Код: vbnet
1.
2.
3.
4.
?Format$(CDateEx("28-feb-16 00:00:00","dmy"), "ddmmyyyy")
28022016
?Format$(CDateEx("28-feb-16 00:00:00","dmy"), "ddmmyyyy")
28022016



Как мне добавить его в место Дата Рождении в данном запросе ?
...
Рейтинг: 0 / 0
запуск процедуры
    #39210188
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aslonov M,

погоняла немного вашу функцию, прилагаю исправленный вариант
Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
Option Explicit



Public Sub Main()
Debug.Print Format$(CDateEx("Sep 16 2008 18:40:07", "mdy"), "dd/mm/yyyy hh:nn:ss")
Debug.Print Format$(CDateEx("17 9 2008 18:40:07", "dmy"), "dd/mm/yyyy hh:nn:ss")
Debug.Print Format$(CDateEx("18-2008-Sep 18:40:07", "dym"), "dd/mm/yyyy hh:nn:ss")
Debug.Print Format$(CDateEx("2008/sep/8 18:40:07", "ymd"), "dd/mm/yyyy hh:nn:ss")
'''''''''''error  выдается дата 12/12/2099-----------------------------------------------------
Debug.Print Format$(CDateEx("2008/sep/8 18:40:07", "ydm "), "dd/mm/yyyy error1")
Debug.Print Format$(CDateEx("2008", "ydm"), "dd/mm/yyyy error2")
End Sub
    
Public Function CDateEx(ss As String, Optional ByVal ymd As String = "ymd") As Date
    Dim i As Integer, st As String, sd As String, v As Variant, s As String, s1, s2, k As Integer, _
        m As Integer, d As Integer, y As Integer, j As Integer
    'Debug.Print "===="
    Debug.Print ss, ymd, "===="

    ss = Replace(ss, "-", " ")
    ss = Replace(ss, "/", " ")
    ss = Replace(ss, ".", " ")
    ss = Replace(ss, "  ", " ")
  

    v = Split("0 " & ss & " 0 0 0 ", " ")
    'Debug.Print v(0), v(1), v(2), v(3)
    ''On Error GoTo Err_
   
    For i = 1 To 3
        s = v(i)
        'Debug.Print s, Len(s)
        If Mid(ymd, i, 1) = "d" Then
        d = Val(s)
        If d = 0 Then GoTo Err_
        ElseIf Mid(ymd, i, 1) = "y" Then
        y = Val(s)
        If y = 0 Then GoTo Err_
        ElseIf Mid(ymd, i, 1) = "m" Then
        'm = s
        m = 0
         j = InStr("   jan feb mar apr may jun jul aug sep oct nov dec ", LCase(s))
         If j > 0 Then
         m = j / 4
         Else
         m = Val(s)
         End If
        If m = 0 Then GoTo Err_
        Else
        'GoTo Err_
        End If
            
       
    Next i
    CDateEx = DateSerial(y, m, d)
    'Debug.Print CDateEx
    Exit Function
''''''''''''''''''''''''''''''''''''''''''''''''
Err_:
s2 = "строка с датой содержит ошибку"
    ''Err.Raise 513, , "error=" & ss & " " & ymd & Chr(13) & Chr(10) & s2
Err.Clear
CDateEx = CDate("12/12/2099")
End Function
...
Рейтинг: 0 / 0
запуск процедуры
    #39210205
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так разве не работает?
Код: vbnet
1.
BirthDate: Format$(CDateEx([clbday],"dmy"), "ddmmyyyy")
...
Рейтинг: 0 / 0
запуск процедуры
    #39210326
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА, в первом случае ошибка потому, что шаблон нужно было изменить. А во втором - входные данные некорректны.

Aslonov M, зачем писать во все темы? Там не в своей 19018651 и сюда тоже залез.
...
Рейтинг: 0 / 0
запуск процедуры
    #39210371
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Aslonov M, Вам предупреждение. При следующем вторжение в чужую тему сообщения будут удаляться.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запуск процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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