Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
2 / 2 / 0
Регистрация: 11.01.2013
Сообщений: 246
1

Непонятки с Access 2003:календарь на текущий месяц

01.03.2016, 14:16. Показов 1028. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код, который выводит календарь на текущий месяц
Visual Basic
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
Private Function IsEvent(pDate As Date) As Boolean
   Dim qdfReminder As QueryDef
   Dim rsReminder As DAO.Recordset
   
   Set qdfReminder = CurrentDb.QueryDefs("Ближайшие мероприятия")
   Set rsReminder = qdfReminder.OpenRecordset
   If rsReminder.RecordCount > 0 Then
       rsReminder.MoveFirst
       Do While Not rsReminder.EOF
           If rsReminder.Fields("Дата").Value = pDate Then
               IsEvent = True
               Exit Function
           End If
           rsReminder.MoveNext
       Loop
   End If
   IsEvent = False
End Function
 
Private Sub Calendar()
   Dim iFirstWeekday As Integer
   Dim InitDate As Date
   Dim iMonthDayCount As Integer
   Dim edtDayBlock As TextBox
   Dim i As Byte, j As Byte
   
   Me.lblYear.Caption = CStr(Year(Date))
   Me.lblMonth.Caption = MonthName(Month(Date))
   InitDate = DateSerial(Year(Date), Month(Date), 1)
   iFirstWeekday = Weekday(InitDate, vbMonday)
   iMonthDayCount = DateDiff("d", InitDate, DateSerial(Year(Date), Month(Date) + 1, 1))
   j = 1
   For i = 1 To 42
     Set edtDayBlock = Me.Controls("DayBlock" & i)
     Select Case i
        Case iFirstWeekday To iFirstWeekday + iMonthDayCount - 1
          edtDayBlock.SetFocus
          edtDayBlock.Text = j
          If IsEvent(DateSerial(Year(Date), Month(Date), j)) Then
              edtDayBlock.FontWeight = 600
          End If
          edtDayBlock.Enabled = False
          j = j + 1
        Case Else
          edtDayBlock.Visible = False
     End Select
   Next i
End Sub
В Аксесс 2016 все работает замечательно. В Аксесс 2003 выводит только первое число месяца. Из-за чего так может быть?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2016, 14:16
Ответы с готовыми решениями:

Календарь на текущий месяц
Привет, нашла код...и не совсем понимаю его, возможно вы уже видели его) select level, RTRIM...

Вывести календарь на текущий месяц
Нужна программа,которая выводит календарь на текущий месяц,так же нужны суммы по строкам и...

Напечатать календарь на текущий месяц
мне нужно курсовую сделать по теме :16. "Вечный календарь". По дате 23.04.2039 или другой дате XXI...

Циклы while, do while, for: показать календарь на текущий месяц
При помощи цикла показать на экран календарь текущего месяца (каждое число напротив...

11
Эксперт MS Access
2833 / 1375 / 215
Регистрация: 13.05.2011
Сообщений: 4,217
01.03.2016, 19:09 2
Цитата Сообщение от hawk1 Посмотреть сообщение
В Аксесс 2016 все работает замечательно. В Аксесс 2003 выводит только первое число месяца. Из-за чего так может быть?
Возможно, возможности 2003 и 2016 в этом разные.

Не по теме:

Должна же быть какая-то разница?

0
2 / 2 / 0
Регистрация: 11.01.2013
Сообщений: 246
01.03.2016, 19:32  [ТС] 3
Но код-то очевидный
0
Эксперт MS Access
7398 / 4535 / 295
Регистрация: 12.08.2011
Сообщений: 14,023
02.03.2016, 09:06 4
Код да, а "Ближайшие мероприятия" нет
0
2 / 2 / 0
Регистрация: 11.01.2013
Сообщений: 246
02.03.2016, 09:15  [ТС] 5
Глюк в функции Calendar
0
шапоклякистка 8-го дня
3679 / 2239 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
02.03.2016, 09:30 6
Вы не хотите приложить образец базы в 2003, или на худой конец скриншот или хотя бы уточнить,что вы понимаете под "выводит только первое число". Остальные числа вообще не отображаются, т.е. edtDayBlock.Visible = False, или сами числа отобажаются, но не выделяеются жирным шрифтом числа с событиями или что?

Если edtDayBlock.Visible = False - то попробуйте в явном виде прописать edtDayBlock.Visible = True в ветке, отвечающей за отображение дат.
0
Эксперт MS Access
7398 / 4535 / 295
Регистрация: 12.08.2011
Сообщений: 14,023
02.03.2016, 10:05 7
Цитата Сообщение от hawk1 Посмотреть сообщение
Глюк в функции Calendar
в которую входит IsEvent, в которую входит Set qdfReminder = CurrentDb.QueryDefs("Ближайшие мероприятия")
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
02.03.2016, 10:43 8
Цитата Сообщение от hawk1 Посмотреть сообщение
В Аксесс 2016 все работает замечательно. В Аксесс 2003 выводит только первое число месяца. Из-за чего так может быть?
Я вижу, как мне кажется единственную возможность "странного" поведения в разной сортировке запроса "Ближайшие мероприятия" в разных БД. Попробуйте вместо рекордсета на кверидеф использовать рекордсет на скл-выражении с явной сортировкой по дате. Типа такого
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Function IsEvent(pDate As Date) As Boolean
'   Dim qdfReminder As QueryDef
   Dim rsReminder As DAO.Recordset
   Dim s
   
'   Set qdfReminder = CurrentDb.QueryDefs("Ближайшие мероприятия")
'   Set rsReminder = qdfReminder.OpenRecordset
   s="select * from [Ближайшие мероприятия] order by Дата"
   Set rsReminder = CurrentDb.OpenRecordset(s)
.................................................
.................................................
End Function
0
2 / 2 / 0
Регистрация: 11.01.2013
Сообщений: 246
02.03.2016, 10:44  [ТС] 9
Цитата Сообщение от texnik-san Посмотреть сообщение
уточнить,что вы понимаете под "выводит только первое число".
заполняется только один текстбокс, остальные пустые.
0
шапоклякистка 8-го дня
3679 / 2239 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
02.03.2016, 10:56 10
Значит, я вижу два вараинта:

1) либо 2003 аксес не знает конструкцию Case A To B, понимает только Case A, а остальной текст игрорирует

Case iFirstWeekday To iFirstWeekday + iMonthDayCount - 1

И при всех значениях, отличных от iFirstWeekday, попадает в ветку Case Else.

В этом случае заменить Select Case на If Then Else и переисать условие в понятных терминах

2) Либо в ветке Case iFirstWeekday To iFirstWeekday + iMonthDayCount - 1 следует в явном виде прописать edtDayBlock.Visible = True
1
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
02.03.2016, 10:58 11
Да и к тому же всю достаточно тяжелую функцию IsEvent со сканированием рекордсета можно заменить одним более быстрым в данной ситуации Dcount-ом
Visual Basic
1
2
3
4
5
Private Function IsEvent(pDate As Date) As Boolean
   Dim s
   s=Format(pDate, "\#mm\/dd\/yyyy\#")
   IsEvent=Dcount("*", "[Ближайшие мероприятия]", "Дата=" & s)
End Function
1
шапоклякистка 8-го дня
3679 / 2239 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
02.03.2016, 11:16 12
Таак. У меня появилась еще третья версия. Обратила внимание на очень странный способ заполнения ячеек

Visual Basic
1
2
edtDayBlock.SetFocus
edtDayBlock.Text = j
Что за бред, извините? Почему не

Visual Basic
1
edtDayBlock = j
? Исправляйте.
1
02.03.2016, 11:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2016, 11:16
Помогаю со студенческими работами здесь

Календарь на текущий месяц в виде таблицы
Изучаю книгу по PHP и после нужно сделать задание так вот я не могу сообразить, как выполнить...

Вывести календарь на текущий месяц в виде таблицы
Помогите решить задачу. Создайте скрипт,который выводил бы календарь на текущий месяц в виде...

Написать скрипт, который каждый раз при загрузке страницы генерировал бы календарь на текущий месяц
Написать скрипт, который каждый раз при загрузке страницы генерировал бы календарь на текущий месяц

Календарь в Access 2003
Доброго времени суток Всем, гиганты Access. На форме есть 2 поля в формате дата/время dd/mm/yyyy,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru