Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: 97
 
 автор: Борис_Пермь   (24.11.2008 в 13:03)   личное сообщение
6 Кб.
 
 

Прошу помочь?!
Существует таблица с полем Дата (для меня не критично ключевое оно или нет). На основе таблицы и данного поля создана простая форма, открывающаяся на первой из существующих записей. В форме разместил стандартный календарь (ActiveX). Пытаюсь заставить форму: 1) Открываться для всех записей, но на записи соответствующей текущей системной дате; 2) При выборе любой иной даты в календаре, чтоб форма "перелисталась" на запись с соответствующей датой.
И еще, возможно ли - таблицу предварительно можно наполнить датами на несколько лет вперед, но считаю это плохим решением, но... если таблица пустая, то как форма откроется на запись = текущей системной дате, если такой записи еще нет?!
Помогите пожайлуста!!!

  Ответить  
 
 автор: Кабан   (24.11.2008 в 13:29)   личное сообщение
 
 

1. да поможет вам bookmark
2. а что вам мешает преварительно заполнить таблицу на несколько лет вперед?

  Ответить  
 
 автор: Борис_Пермь   (24.11.2008 в 13:49)   личное сообщение
 
 

с первым пунктом щас буду знакомиться, а вот по второму считаю это очень простым "детским" решением, при котором теряется универсальность. Один из вариантов это открытие формы на новой записи, а значение по умолчанию = текущей дате?!

  Ответить  
 
 автор: Кабан   (24.11.2008 в 14:11)   личное сообщение
 
 

>>простым "детским" решением, при котором теряется универсальность
порой простое детское решение и есть самым универсальным.

>>а значение по умолчанию = текущей дате?!
ну, если вам так нужно, то да

  Ответить  
 
 автор: Борис_Пермь   (24.11.2008 в 14:41)   личное сообщение
 
 

сейчас буквально попробовал и получилось, на событие Загрузка поставил DoCmd.GoToRecord , , acNewRec, а значение по умолчанию =Date() - просто когда в таблица начата пару лет назад и форма открывается на первой записи, то приходится вручную листать в конец, много лишних движений. Но здесь ладно еще, а вот главное никак не получается - это задействовать календарь, чтоб нажав в нем на любую дату форма тут же переходила на соответствующую запись???

  Ответить  
 
 автор: Lukas   (24.11.2008 в 14:58)   личное сообщение
 
 


Private Sub Calendar_AfterUpdate()
    Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[DateItem] = " & Format$(Me![Calendar], "\#mm\/dd\/yyyy\#")
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Слегка измененный вариант поиска записи на ленточной форме, предлагаемый мастером добавления ComboBox.

Только штатный календарь у меня не отрабатывает событие Calendar8_Updated.

  Ответить  
 
 автор: Кабан   (24.11.2008 в 15:04)   личное сообщение
 
 

>>

If Not rs.EOF Then Me.Bookmark = rs.Bookmark 
чёто я... забыл.... а не

If Not rs.nomatch Then Me.Bookmark = rs.Bookmark 

?
или нема такого?

  Ответить  
 
 автор: Борис_Пермь   (25.11.2008 в 06:27)   личное сообщение
 
 

Спасибо за содействие!
Попробую реализовать, надеюсь все получится! очитаюсь!

  Ответить  
 
 автор: Борис_Пермь   (25.11.2008 в 10:35)   личное сообщение
 
 

Пробовал пробовал, но толку мало.
Мозги кипят - результата нет.
По вашему варианту не получается, что то не то и не так наверное делаю!
Визуально добился поиска записи в форме по выбранной в календаре дате, но только так работает:

Private Sub data_GotFocus()
DoCmd.FindRecord [ЭлементActiveX1], , True, , True
End Sub

Приходится тыкать в календарь, потом еще в поле чтоб поиск сработал! Может подскажете более изящное решение? плиз!

  Ответить  
 
 автор: Кабан   (25.11.2008 в 11:09)   личное сообщение
 
 

Calendar_AfterUpdate()
а не Got_focus

  Ответить  
 
 автор: Борис_Пермь   (25.11.2008 в 11:53)   личное сообщение
 
 

Если бы!
у него даже нет акого события, есть только При обновлении "_Updated", но на нем не работает

  Ответить  
 
 автор: Кабан   (25.11.2008 в 12:54)   личное сообщение
 
 

странно... а точку останова если там поставить? когда срабатывает?
может всетаки есть? или куда он дату вписывает? может вотдельный текстбокс? тогда там проверять.... както-так

  Ответить  
 
 автор: Lukas   (25.11.2008 в 13:00)   личное сообщение
59 Кб.
 
 

Ложь и клевета.
Мой код 100% рабочий.
Подтверждение:

Событие AfterUpdate нужно выбрать в редакторе кода.

А может в 97 действительно нет?

  Ответить  
 
 автор: Борис_Пермь   (27.11.2008 в 07:03)   личное сообщение
 
 

Спасибо за настойчивость!
но... 97 действительно отличается
Дорабатывая свою идею получилось все что хотел, а именно:

Private Sub ЭлементActiveX1_Click() 'обявляем название события для календаря "клик мышкой"
formdata.SetFocus ' переводим фокус с календаря в нужное поле формы
DoCmd.FindRecord [ЭлементActiveX1], , True, , True ' ищем в поле значение, равное значению календаря, соотвественно "перелистывая" форму на нужное значение
End Sub
' как это работает, я так и непонял, т.к. не программист, но работает правильно!

Всем спасибо! надеюсь и сам кому нибудь помог!

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList