Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поставишь точку останова -- работает, уберешь -- не работает... / 10 сообщений из 10, страница 1 из 1
17.08.2004, 17:14:56
    #32653416
Dark Night
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поставишь точку останова -- работает, уберешь -- не работает...
Странно...
Ставлю на условное форматирование пользовательскую функцию -- неправильно форматирует. Более того, если в этой функции есть точка останова, все нормально. Останавливаем, запускаем -- ОК. Если точки останова нет... вообще непонятно, откуда он (Access) такое форматирование берет: фон -- прозрачный (хотя ни в одних свойствах такого нет), цвет -- по умолчанию.

------------ на всякий случай текст функций -----------
Public Function IsHoliday(ByVal aDate As Date) As Boolean
' Возвращает True, если день является праздничным
Select Case Format(aDate, "dd.mm")
Case "01.01", "02.01", "23.02", "08.03", "01.05", "02.05", _
"09.05", "12.06", "07.11", "12.12"
IsHoliday = True
Case Else
IsHoliday = False
End Select
End Function

Public Function IsRestDay(ByVal aDate As Date) As Boolean
' Возвращает True, если день является выходным или праздничным
' (учитывая переносы праздничных дней)
If IsHoliday(aDate) Then
IsRestDay = True
Exit Function
End If
Select Case Weekday(aDate)
Case vbMonday, vbFriday
IsRestDay = (IsHoliday(aDate + 1) Or IsHoliday(aDate - 1))
Case vbSaturday
IsRestDay = (Not IsHoliday(aDate + 3))
Case vbSunday
IsRestDay = (Not IsHoliday(aDate - 3))
Case Else
IsRestDay = False
End Select
End Function
--------------
вызов в условном форматировании:
IsRestDay(CDate(Format([M10];"0")+"."+Format([M1];"0")+"."+Format([Y];"0000")))

где M10 (число месяца), M1 (месяц) и Y (год) -- числовые поля таблицы, которая приаттачена к строке редактирования (связь по полю M10).
...
Рейтинг: 0 / 0
17.08.2004, 17:41:58
    #32653467
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поставишь точку останова -- работает, уберешь -- не работает...
...
Рейтинг: 0 / 0
18.08.2004, 07:55:08
    #32653836
Dark Night
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поставишь точку останова -- работает, уберешь -- не работает...
2 Владимир, Саныч: ;)
Спасибо за совет. К сожалению -- все равно не работает.
Тут в Access Help вот что написано:
Microsoft Access Caution Any time you temporarily yield the processor within an event procedure, make sure the procedure is not executed again from a different part of your code before the first call returns; this could cause unpredictable results . In addition, do not use DoEvents if other applications could possibly interact with your procedure in unforeseen ways during the time you have yielded control.
А как насчет квазипараллельного исполнения подпрограммы условного форматирования во всех элементах? Может, с этим связано?
P.S. Кста, на FormActivate DoEvents тоже не работает. На FormCurrent -- работает, но только первая запись. ;)
P.P.S. Боюсь, в условном форматировании уже что-то вроде DoEvents стоит -- уж очень подозрительно подмигивает заголовок окна MS Access во время открытия формы...
...
Рейтинг: 0 / 0
18.08.2004, 09:21:55
    #32653914
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поставишь точку останова -- работает, уберешь -- не работает...
Попробуй поэксперементировать с функциями.
1.Замени в вызове IsRestDay(CDate на DateSerial
Запусти
2.Выброси всю начинку из ф-ии IsRestDay, пусть она изначально возвращает False
Запусти
3.Понемногу возврашай код в ф-ию IsRestDay
Может быть поймаешь когда начинаются проблемы.

Удачи! :)
...
Рейтинг: 0 / 0
18.08.2004, 09:37:48
    #32653945
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поставишь точку останова -- работает, уберешь -- не работает...
ЗЫ
Проверил твои ф-ии у себя на компе - все работает, если региональные установки даты дд.мм.гггг, а у меня было дд/мм/гггг , естественно, получил ошибку. Так что, если у тебя рег. установки другие, применение CDate - проблематично.
...
Рейтинг: 0 / 0
18.08.2004, 09:41:03
    #32653951
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поставишь точку останова -- работает, уберешь -- не работает...
Посмотри кусок моего кода - может поможет :о)
В табличной форме имена контролов, отображающие суммарные данные за день месяца, состоят из номера дня (1,2,3,4...31). Таким макаром при Requery заливаю столбцы, если праздник или выходной и скрываю лишние, если месяц меньше 31 дня.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
nEnd = DatePart("d", DateAdd("m",  1 , DateSerial(Me.cmbYear, Me.cmbMonth,  1 )) -  1 )
With Me.fmTM2_2.Form
    For i =  1  To nEnd
        .Controls("[" & i & "]").ColumnHidden = False
        If .Controls("[" & i & "]").FormatConditions.Count >  0  Then .Controls("[" & i & "]").FormatConditions.Delete
        .Controls("[" & i & "]").BackColor =  16777215 
    Select Case DatePart("w", DateSerial(Me.cmYear, Me.cmbMonth, i), vbMonday)
    Case  6  To  7 
        .Controls("[" & i & "]").FormatConditions.Add acExpression, acEqual, _
                .Controls("[" & i & "]").Name & "is Null Or " & _
                .Controls("[" & i & "]").Name & " Is Not null"
        .Controls("[" & i & "]").FormatConditions( 0 ).BackColor = vbRed
    End Select
    Next i
    
    For i = nEnd +  1  To  31 
        .Controls("[" & i & "]").ColumnHidden = True
    Next i
    
End With
...
Рейтинг: 0 / 0
18.08.2004, 09:41:23
    #32653955
Dark Night
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поставишь точку останова -- работает, уберешь -- не работает...
2 Rivkin Dmitry:
Насчет DateSerial -- спасибо ;) (русские легких путей не выбирают ;) ). Но все равно не работает, хоть удаляй код, хоть не удаляй. Дело действительно в DoEvents, но когда ее вызывать -- ума не приложу.
Были испробованы даже такие варианты:
IsRestDay(CDate(Format(DoEvents()*0+[M10];"0")+"."+Format([M1];"0")+"."+Format([Y];"0000")))
IsRestDay(CDate(Format([M10];"0")+"."+Format([M1];"0")+"."+Format([Y];"0000"))) Or DoEvents()
Толку мало (при таком изменении вообще условное форматирование отключается, выдается формат по умолчанию). Лучший результат был, когда в FormCurrent ставилось DoEvents -- хоть одна (первая) строка рассчитана...
...
Рейтинг: 0 / 0
18.08.2004, 09:49:14
    #32653976
Dark Night
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поставишь точку останова -- работает, уберешь -- не работает...
2 Витал:
Если бы у меня один контрол отвечал за один день -- можно вообще ему просто ForeColor поменять. У меня ленточная форма...
А в "выражении" разве не имена полей таблицы, а имена контролов? А какой синтаксис?

2 Rivkin Dmitry:
Форма -- ленточная... :(
...
Рейтинг: 0 / 0
18.08.2004, 10:01:46
    #32654002
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поставишь точку останова -- работает, уберешь -- не работает...
Dark Night2 Витал:
Если бы у меня один контрол отвечал за один день -- можно вообще ему просто ForeColor поменять. У меня ленточная форма...
А в "выражении" разве не имена полей таблицы, а имена контролов? А какой синтаксис?

2 Rivkin Dmitry:
Форма -- ленточная... :(
Код: plaintext
1.
.Controls("[" & i & "]").Name & "is Null Or " & _
  .Controls("[" & i & "]").Name & " Is Not null"
выражение получается, например, "3 is Null Or 3 Is Not null" - то бишь всегда True.

"Если бы у меня один контрол отвечал за один день...", а за сколько он отвечает? если не секрет.
...
Рейтинг: 0 / 0
19.08.2004, 17:20:43
    #32657471
Dark Night
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поставишь точку останова -- работает, уберешь -- не работает...
2 Витал:
По идее, должен получиться календарик.
Такой вот:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
1  8 15 22 30
2  9 16 23 31
3 10 17 24
4 11 18 25
5 12 19 26
6 13 20 27
7 14 21 28
Чтобы это напечатать, достаточно пяти или шести TextBox'ов + запуск на ленточной форме. А цвет для выходных/праздничных дней как поменять?
P.S. А разве обязательно такое сложное значение ставить для всегда_труйного_выражения? Можно поставить просто слово True -- оно точно всегда True! И, тем более, можно и ForeColor поменять...
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поставишь точку останова -- работает, уберешь -- не работает... / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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