Как сделать refresh для отдельного поля в форме access?

Создание форм в базе данных Access 2007

Учебная дисциплина
Информатика и компьютерная техника
Модуль 2. Офисные прикладные программы Microsoft Office 2007

2.4. Microsoft Access 2007

2.4.6. Создание и использование форм для ввода данных в таблицы базы данных Access 2007

В Access 2007 можно вводить данные непосредственно в таблицу в режиме таблица. Но обычно для ввода данных в БД Access 2007 используют формы (forms). Form ускоряет работу с базой данных. Form в БД — это структурированное интерактивное окно с элементами управления, в котором отображаются поля одной или нескольких таблиц или запросов.

Форму можно использовать для ввода, изменения или отображения данных из таблицы или запроса. В Microsoft Office Access 2007 предусмотрены новые средства, помогающие быстро создавать forms, а также новые типы форм и функциональные возможности.

Формы в БД Access можно создавать с помощью различных средств:

  • инструмента Form;
  • инструмента Разделенная form;
  • инструмента Несколько элементов;
  • инструмента Пустая form;
  • Мастера form;
  • Конструктора form.

Все средства создания форм помещены в группу forms на вкладке Создание (рис. 1).

Forms, которые используют таблицы целесообразно выполнять с помощью Мастера или указанных инструментов, а дорабатывать их, т.е. вносить необходимые изменения, можно в режиме макета или конструктора. В Microsoft Access 2007 предусмотрено два режима внесения изменений и дополнений в формы: режим макета и режим конструктора. Переход между режимами (открыть, режим макета, конструктор) можно выполнить, щелкнув правой кнопкой мыши форму в области переходов, а затем выбрать нужный режим в контекстном меню.

Режим макета — это более наглядный режим редактирования (изменения) форм, чем режим конструктора. В режиме макета изменения выполняются фактически в реальной форме, поэтому в этом режиме целесообразно выполнять более простые изменения, связанные с ее внешним видом.

В тех случаях, когда в режиме макета невозможно выполнить изменения в форме, целесообразно применять режим конструктора. Режим конструктора предоставляет пользователю более широкие возможности для редактирования (изменения) форм, в этом режиме можно добавлять поля, настраиваемые элементы и составлять программы.

Инструмент «Форма». Для быстрого создания формы, т.е. создания одним щелчком мыши можно воспользоваться инструментом Form. В этом случае надо выделить таблицу в области объектов. Затем перейти на вкладку Создание и щелкнуть на пиктограмме Form. На экране будет отображена form (рис 2).

Если Access обнаруживает одну таблицу, связанную отношением «один-ко-многим» с таблицей или запросом, который использовался для создания формы, Access добавляет таблицу данных в форму, основанную на связанной таблице или запросе. Если таблица данных в форме не нужна, ее можно удалить.

Средство «Разделенная форма». Разделенная form — новая возможность в Microsoft Access 2007, которая позволяет одновременно отображать данные в режиме формы и в режиме таблицы. В области объектов (переходов) выделить таблицу, например Успеваемость. Далее щелкнуть на пиктограмме «Разделенная forms» на вкладке Создать. На экране будет отображена form (3).

Инструмент «Несколько элементов». Форму, в которой отображается не одна, а одновременно несколько записей, можно создать инструментом «Несколько элементов» (рис. 4). Чтобы создать данную форму выделим в области объектов (переходов) одну из таблиц (например, Успеваемость). Затем перейдем на вкладку Создание и щелкнем на пиктограмме «Несколько элементов». На экране будет отображена form (рис. 4) в режиме макета.

Form похожа на таблицу, в ней одновременно отображаются несколько записей. Но эта form предоставляет возможности для настройки, так как она отображается в режиме макета. В режиме макета можно легко осуществлять доработку формы (например, добавлять элементы управления и т.д.).

Средство Пустая форма. Этот инструмент можно использовать в том случае, если необходимо быстро создать форму с несколькими полями. Form открывается в режиме «Работа с макетами форм» и при этом отображается область Список полей (рис. 5).

Мастер форм. Создание форм при помощи мастера форм осуществляется быстро, и это средство позволяет включить в форму поля из нескольких связанных таблиц или запросов. На вкладке Создание в группе Формы надо нажать кнопку Другие формы, а затем выбрать команду Мастер форм. Откроется окно диалога Создание форм, в котором необходимо отвечать на вопросы каждого текущего экрана Мастера и щелкать на кнопке Далее.

В первом окне необходимо выбрать поля из источника данных (таблиц или запросов). Для этого надо открыть список Таблицы и запросы, щелкнув на кнопку, справа. Например, выберем из списка таблицу Студенты.

Затем все «Доступные поля» переведем в «Выбранные поля», выделив их и щелкнув на кнопку >>. Необходимо отметить, что, если form создается на основе нескольких таблиц, необходимо повторить действия для каждой таблицы – источника. Затем необходимо щелкнуть на кнопке Далее. В следующем окне надо выбрать внешний вид, например в один столбец и щелкнуть Далее. В следующем окне выберем требуемый стиль — официальный

После выбора стиля, требуется перейти в последнее окно, щелкнув на кнопке Далее. В последнем окне Мастера требуется ввести имя (например, Студенты мастер_форм) и указать дальнейшие действия: Открыть форму для просмотра и ввода данных; Изменить макет формы.

После ввода имени формы (например, Студенты), выбора режима: «Открыть форму для просмотра и ввода данных» и щелчка на кнопке Готово, получим следующую форму для ввода и просмотра записей в таблицу Студенты.

Конструктор форм. Для создания новой пустой формы Студенты необходимо выполнить следующее:

  1. В окне приложения Access 2007 выбрать вкладку Создание. Выполнить щелчок на пиктограмме «Конструктор форм». В окне редактирования появится окно Form1 с пустой областью данных.
  2. Для отображения списка полей требуемой таблицы выполнить щелчок на пиктограмме «Добавить существующие поля», появится список таблиц. Щелкнув на знак «+» таблицы (например, Студенты), откроется список необходимых полей (рис.7).

3. Поля из списка переместить на форму. Добавление полей осуществляется при нажатой левой кнопки мыши.

4. Поместить поля на форму (рис. 9).

5. Перемещение полей и их имен по форме производиться следующим образом:

  • Выделить поле с именем щелчком мыши. Вокруг него появятся маркеры перемещения и изменения размеров. Перемещать поле можно вместе с привязанным к нему именем или отдельно от него.
  • Для перемещения поместить указатель мыши на квадратик, находящийся в левом верхнем углу элемента. Указатель мыши в виде четырех направленной стрелки позволяет перемещать объект.
  • Нажать кнопку мыши и, удерживая ее, буксировать поле или его имя в нужное место в форме. Затем отпустить кнопку мыши.
  • Для изменения надписи, связанной с полем необходимо выполнить на ней двойной щелчок мышью и выполнить необходимые изменения. Затем закрыть окно.
  • Для изменения размеров поместить курсор на размерные маркеры, при этом курсор примет вид двунаправленной стрелки. Нажать кнопку мыши, буксировать в нужном направлении, затем отпустить кнопку мыши.
  • Для удаления поля выделить его, нажать клавишу Delete или другим способом.

6. Сохранить форму.

7. Просмотреть форму Студенты_конструктор, выполнив на ней двойной щелчок в области переходов.

Если вид формы не удовлетворяет, ее можно открыть в режиме Конструктор и внести необходимые изменения, затем сохранить.

© Обучение в интернет, .
Обратная связь

Access! Добавление записей в подчиненную таблицу

1) Подскажите пожалуйста, как организовать добавление n записей (где n — значение поля в форме) в подчиненную таблицу(форму) автоматически (есть формула) при нажатии на кнопку в форме.

Читать еще:  Как сделать удаление в access?

2) Как при включении флажка (лог. поле в таблице) сделать всю запись нередактируемой?

3) Если в меню Access Add-Ins нет packaging Wizard, значит не сделать независимого приложения или?

19 ответов

Способов масса:
1. через DoCmd:
‘ переводим фокус в подч. форму (нак какой-нибудь элем.)
‘ делается это в 2 этапа
Forms![Главн_форма]![Подч_форма].SetFocus
Forms![Главн_форма]![Подч_форма].Form![Имя_Контрол].SetFocus
DoCmd.GoToRecord ,,acNewRec
‘ заполняем поля в новой записи и повторяем все дальше

Dim dbs As Database, rst As Recordset, rstClone As Recordset

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(«Таблица1», dbOpenDynaset)
With rst
.AddNew
!Поле1 = «ля-ля»
!Поле2 = «ля-ля»
.Update
End With

‘ обновление формы и переход на последнюю запись
Forms![Главн_форма].Requery
Set rstClone = Forms![Главн_форма].RecordsetClone
rstClone.MoveLast
Forms![Главн_форма].Bookmark = rstClone.Bookmark

rst.Close
rstClone.Close
Set dbs = Nothing

3. Практически также через ADO (только название методов чуть другие)

4. Если записи, которые необходимо добавить находятся в другой таблице, то добавление можно сделать через запрос на добавление записи:

Dim dbs As Database, strSQL as String

On Error GoTo Err_Execute
Set dbs = CurrentDb
strSQL=»INSERT INTO Таблица1( Поле1 ) » _
«SELECT Таблица2.Поле1 » _
«FROM Таблица2 » _
«GROUP BY Таблица2.Поле1 » _
«HAVING Таблица2.Поле1)=’aaaa'»

Exit_:
Set dbs = Nothing
Exit sub ‘ или Function

Err_Execute:
MsgBox «Error number: » & Err.Number & vbCr & Err.Description
Resume Exit_

Я так понимаю, что необх. запретить редактировать запись в форме:
Me.AllowEdits=False
это же свойство можно сразу установить в совйствах формы (в рус. Access: Данные->Разрешить изменение)

Можно еще открывать набор записей в форме не как динамический набор(по умолч.), а как статический набор.

Не знаю не использовал, но если его нет, то естественно сделать ничего нельзя. А зачем это? все равно твоя база будет только через Access работать, тайно или явно.
Может я конечно ошибаюсь, но что-то я не видел, чтобы базу на Access можно было так упаковать, чтобы таскать потом ее как отдельное приложение (это надо ядро засунуть туда, все библиотеки, тот еще монстр будет.. 🙂 )

Спасибо, что откликнулись, только у меня ничего не получилось. ( На данную строку Set dbs = CurrentDb сваливается ошибка о несоответствии типа (используя модель ДАО). А функцию OpenRecordset вообще не находит..(( В Tools->Referens поставлена галочка напротив Microsoft DAO 3.6 Object Library, а в object браузере функция находится. В чем тут может быть дело? Или может избрать другой путь решения? Если можно, напишите более подробно как решить такую задачу:

Необходимо добавить в подчиненную таблицу Col — количество (значение поля в главной форме) записей такого вида:

for i=1 to Col
[подчин. форма]!pdУник.=[главн. форма]!glУникПоле
[подчин. форма]!pdНомерПП = i
[подчин. форма]!pdДата1 = DateAdd(«m»,i,»[главн. форма]!glДата»)
[подчин. форма]!pdПоле3= [главн. форма]!glПоле00/[главн. форма]!glПоле01
.
[подчин. форма]!pdПоле6 = еще что-нибудь зависящее от i
next i

И еще, поподробнее насчет «галочки». Лог. поле есть в подчиненной таблице. По умолчанию — это поле равно False, но когда пользователь ставит галку, вся запись должна стать нередактируемой, вроде как ОТМЕЧЕНО/ОПЛАЧЕНО и боле не пригодится, но НЕ ВСЕ ЗАПИСИ в таблице, а только одна.

Спасибо.
PS: про самостоятельное приложение вычитала в книге, и вообще я только начинающий специалист, не судите строго. )))

Originally posted by natalia
Спасибо, что откликнулись, только у меня ничего не получилось. ( На данную строку Set dbs = CurrentDb сваливается ошибка о несоответствии типа (используя модель ДАО). А функцию OpenRecordset вообще не находит..(( В Tools->Referens поставлена галочка напротив Microsoft DAO 3.6 Object Library, а в object браузере функция находится. В чем тут может быть дело? Или может избрать другой путь решения? Если можно, напишите более подробно как решить такую задачу:

Необходимо добавить в подчиненную таблицу Col — количество (значение поля в главной форме) записей такого вида:

for i=1 to Col
[подчин. форма]!pdУник.=[главн. форма]!glУникПоле
[подчин. форма]!pdНомерПП = i
[подчин. форма]!pdДата1 = DateAdd(«m»,i,»[главн. форма]!glДата»)
[подчин. форма]!pdПоле3= [главн. форма]!glПоле00/[главн. форма]!glПоле01
.
[подчин. форма]!pdПоле6 = еще что-нибудь зависящее от i
next i

И еще, поподробнее насчет «галочки». Лог. поле есть в подчиненной таблице. По умолчанию — это поле равно False, но когда пользователь ставит галку, вся запись должна стать нередактируемой, вроде как ОТМЕЧЕНО/ОПЛАЧЕНО и боле не пригодится, но НЕ ВСЕ ЗАПИСИ в таблице, а только одна.

Спасибо.
PS: про самостоятельное приложение вычитала в книге, и вообще я только начинающий специалист, не судите строго. )))

Если бы мне надо было бы это сделать, то я пошел бы через DAO (хоть друг Билл и товарищ Гетц и призывает переходить на ADO, но DAO пока роднее). Но тут для тебя важна сама суть, а она такая же, что в DAO, что в ADO, а переписать не проблема.
Значит так это выглядит:

Dim dbs As DAO.Database, rst As DAO.Recordset

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(«Таблица1», dbOpenDynaset)
for i=1 to Col
With rst
.AddNew
!pdУник = Forms![главн. форма]!glУникПоле
!pdНомерПП = i
.
.Update
End With
Next i

rst.Close
rstClone.Close
Set dbs = Nothing

По поводу ругани на CurrentDb, давай разбираться. Значит говоришь Microsoft DAO 3.6 Object Library подключено — это хорошо. Тут может быть конфликт имен, это когда в разных библиотеках используют одинаковые имена объектов или методов, поэтому давай с тобой объявим переменные с указанием полного пути (в смысле всех родителей): DAO.Database и DAO.Recordset — так должно все сработать (конфликт может быть с одной из библиотек ADO), если не получится, пиши, подумаем. 🙂

Насчет галочки: Вопрос такой, как ты записи выводишь, через обычную форму или ленточную/табличную?

В первом случае пользователь видит только одну запись, ее мы блокируем (в пред. посте), при переходе на другую запись, проверяем и снимаем/устан. блокировку.

Во втором случае, можно работать также, при переходе к другой записи, в событии Current делаем проверку и опред. блокировать ли тек. запись или нет. В принципе также можно блокировать не всю запись, а только отд. поля (у них тоже есть свойства Доступ и Блокировка)

Получилось! Получилось! Спасибо! Вот только не с первого разу, вот это то я и упустила (дура глупая):

Forms![гл. форма].Requery
Set rstClone = Forms![гл. форма].RecordsetClone
rstClone.MoveLast
Forms![гл. форма].Bookmark = rstClone.Bookmark

и тут же вопрос — это дело я вставила в цикл до next i, может неправильно, а? А то записи ТО правильно добавляются, ТО их больше в два раза от того, что уникальное поле запоминается из предыдущей записи.. странно как-то. Подскажите этот момент поподробнее и эту часть кода, что она выполняет? Что за RecordsetClone? :)))

——
С галочкой я так поступаю, может вовсе некорректно:

Private Sub flag_Click()
If flag=True Then
Form_podForm1.pddate.Enabled = False
Else
Form_podForm1.pddate.Enabled = True
End If
End Sub

в итоге во ВСЕХ записях поле pddate становится недоступным. Как же сделать это Enabled только для той записи, в которой я ставлю галочку?

Простите, что повторяюсь с вопросами, хочу разобраться, и немного туплю.. Но я стараюсь..))))
Спасибо. Жду.

Originally posted by natalia
Получилось! Получилось! Спасибо! Вот только не с первого разу, вот это то я и упустила (дура глупая):

Forms![гл. форма].Requery
Set rstClone = Forms![гл. форма].RecordsetClone
rstClone.MoveLast
Forms![гл. форма].Bookmark = rstClone.Bookmark

и тут же вопрос — это дело я вставила в цикл до next i, может неправильно, а? А то записи ТО правильно добавляются, ТО их больше в два раза от того, что уникальное поле запоминается из предыдущей записи.. странно как-то. Подскажите этот момент поподробнее и эту часть кода, что она выполняет? Что за RecordsetClone? :)))

Этот кусок кода я опустил в последнем примере, потому как подумал, что для твоей ситуации он не очень критичен.

Читать еще:  Как сделать запросы в access 2007?

А смысл его вот какой:

Когда ты обращаешься к таблице программно напрямую (через DAO, ADO и т.д.), а в это же время эта таблица показывается в форме, то все твои изменения в таблице не будут отображены, пока ты принудительно не заставишь Access обновить выводимую таблицу в форме через метод формы — Requery.

Т.е. в твоем случае надо в конце написать:
Forms![Гл_форма]]![Подч_форма].Form.Requery

И вот тут одна нехорошая такая вещь после этого происходит — записи загружаются заново и по умолчанию фокус устанавл. на первую запись. Т.е. ты добавил записи и после этого ты попадаешь на начало. Чтобы не заставлять пользователя вручную возвращаться, можно сразу добавить такой код:
DoCmd.GoToRecord ,,acLast

Но у этого метода такой недостаток, чтобы так написать, надо (ОБЯЗАТЕЛЬНО) перевести фокус на элемент (любой) этой подчин. формы., т.е. в итоге:

Forms![Гл_форма]]![Подч_форма].Form.Requery
Forms![Главн_форма]![Подч_форма].SetFocus
Forms![Главн_форма]![Подч_форма].Form![Имя_Контрол].SetFocus
DoCmd.GoToRecord ,,acLast

Тебе такой вариант может подойти.

Но вот существуют ситуации когда переводить фокус на форму ради этого действия очень не хочется.
Например: пользователь работает с одной подч. формой (главный экран), нажимает кнопки, обрабатывает что-то, а на этой же форме, но на другой вкладке другая подчин. форма где ведется лог. И вот в этот лог надо добавить запись и перейти в конец (на последнюю запись, чтобы опять же не прокручивать всю эту форму).
Если мы будем действовать по приведенному выше коду, то у пользователя быстро переключится вид на форму с логом, добавиться запись, обновиться, перескочет на последнюю и только потом его бедного опять вернут к своей любимой форме. 🙂
Приятного мало.

Подитожу. Процесс добавления записей и Requery можно производить с неактивной (ее вообще может быть не видно) формой, а вот для того что перейти в этой НЕАКТИВНОЙ форме на последнюю запись, я и применяю этот код:
Set rstClone = Forms![Главн_форма].RecordsetClone
rstClone.MoveLast
Forms![Главн_форма].Bookmark = RecordsetClone.Bookmark

Делает он следующее.
У каждой формы есть свойство RecordsetClone, которое возвращает объект Recordset (набор записей, про него в справке лучше почитай), в котором находятся записи этой формы. По сути Recordset эта таже таблица, только в виде объекта DAO для того чтобы можно было делать всякие вещи с полями и записями как с обычными объектами в языках программирования.
В этом rstClone мы по умолчанию стоим на первой записе. Переходим на последнюю — rstClone.MoveLast
Теперь используем свойство Bookmark — закладка. Эта Bookmark для того, чтобы можно было поставить закладку, а потом быстро вернуться на нужную запись в Recordset или в форме (она тоже поддерживает закладки). Вот и мы и переходим в форме на ту же запись, что уже перешли в объекте RecordsetClone.

Это свойство Bookmark может немного смутить. У него такая хитрость:
Когда мы обращаемся (ЧИТАЕМ) к свойству -RecordsetClone.Bookmark — то оно возвращает закладку на активную запись в объекте RecordsetClone. Мы например, можем эту закладку сохранить в отд. переменной:
Dim bk as Bookmark
Set bk=RecordsetClone.Bookmark
и потом ее использовать где-нибудь дальше.

А вот когда мы присваиваем (ПИШЕМ) этому свойству RecordsetClone.Bookmark = bk другую закладку, это значит, мы меняем активную запись на ту, которая была активна, когда считывалась эта закладка (bk), т.е. просто переходим на указанную запись.
В нашем примере эти два действия сразу в одной строке получились:
Forms![Главн_форма].Bookmark = RecordsetClone.Bookmark

——
С галочкой я так поступаю, может вовсе некорректно:

Private Sub flag_Click()
If flag=True Then
Form_podForm1.pddate.Enabled = False
Else
Form_podForm1.pddate.Enabled = True
End If
End Sub

в итоге во ВСЕХ записях поле pddate становится недоступным. Как же сделать это Enabled только для той записи, в которой я ставлю галочку?

А оно и будет заблокировано во всех выводимых записях, но так пользователь не может работать сразу с несколькими, а только с одной, то как только он будет переходить к следующей записи, мы будем решать: блокировать ее или нет.

К твоему коду, надо добавить еще код обработчик событии формы Current (возникает при ЛЮБОМ переходе польз. к другой записе):

Private Sub Form_Current()
If flag=True Then
Form_podForm1.pddate.Enabled = False
Else
Form_podForm1.pddate.Enabled = True
End If
End Sub

Так что мы всегда его опередим и пользователь от нас не уйдет 🙂

Как сделать refresh для отдельного поля в форме access?

Как сделать переход по записям формы с помощью поля со списком в Access? Есть форма, в ней отображаются записи таблицы с полями id, name. Нужно чтобы можно было перемещаться по записям формы путем выбора из выпадающего списка одного из значений поля name.

Вот я создаю форму, на ней оказывается два поля id и name. Далее я преобразовываю name в выпадающий список, указываю в качестве data запрос select name from table. Все отображается в списке, можно выбирать. Но не происходит смена записи. Иду другим путем — кидаю на форму новый комбо-бокс, там в мастере указываю что значение его будет использовано для перехода по записям формы. Все ввожу как надо, открываю форму, комбобокс содержит нужные значения поля name, но блин, не разрешает себя изменять, потому что автоматом к нему добавляется поле id (скрытое), а т.к. оно ключевое, аксесс не разрешает его изменять.

Bas, не получилось — результат тот же. А разве с помощью гуи-средств нельзя это сделать? Ведь все сделано в акцессе так чтобы и секретарша могла базы делать, все автоматом добавляется, все само понимает куда чего дописать.

Добавлено 03.04.07, 14:22
Кроме того, когда кидаешь на форму комбобокс, появляется мастер, и если выбрать вариант поиск записи в форме на основе значения, которое содержит поле со списком он же сразу создается с такой процедурой как ты указал

Добавлено 03.04.07, 14:27
Кроме того, после попытки добавления на форму комбобокса, базу начинает страшно плющить — постоянно по десять раз при каждом действии вызывающем сохранение формы появляется сообщение «Введенное в поле своства или макросва формы содержит ошибки или указывает на несуществующую форму«

Добавлено 03.04.07, 14:30
В общем я понял что это не мой тупизм, а какие то ошибки с СУБД. Потому что в справке все указано так, как я и делаю, только ничего не выходит, а появляются ошибки которые я указал выше.

Поиск записи по выбранному в списке значению
Показать все
Скрыть все
В форме можно создать список Список. Элемент управления, позволяющий выполнять выбор из списка значений. Элемент «список» состоит из списка и необязательной надписи.) или поле со списком (Поле со списком. Элемент управления в форме, являющийся комбинацией поля и раскрывающегося списка. Пользователь может ввести значение в поле или раскрыть список и выбрать значение из списка.) для поиска записи по значению из списка.

Откройте форму в режиме конструктора (Режим конструктора. Окно, в котором отображается макет следующих объектов базы данных: таблицы, запросы, формы, отчеты, макросы и страницы доступа к данным. В режиме конструктора пользователь создает новые объекты базы данных или изменяет макеты существующих.).
Нажмите кнопку Мастера на панели элементов (Панель элементов. Набор инструментов для создания элементов управления в форме, отчете или на странице доступа к данным в режиме конструктора. Набор инструментов для страницы доступа к данным в режиме конструктора отличается от набора инструментов для формы и отчета в режиме конструктора.), если эта кнопка еще не нажата.
На панели элементов нажмите кнопку Список или Поле со списком .
Щелкните в форме место, в которое нужно поместить список или поле со списком.
В первом диалоговом окне мастера выберите параметр для поиска записи по значению, выбранному в списке или поле со списком.
Выполняйте инструкции, выводящиеся в диалоговых окна мастера. В последнем диалоговом окне нажмите кнопку Готово для вывода списка или поля со списком в режиме конструктора.
Для просмотра процедуры обработки события (Процедура обработки события. Процедура, автоматически выполняемая в ответ на событие, возникающее в результате действий пользователя, выполнения программы или генерируемое системой.), обеспечивающей работу списка или поля со списком, откройте окно свойств элемента управления и нажмите кнопку Построить рядом с ячейкой свойства После обновления (AfterUpdate).

Читать еще:  Как сделать программу в access?

Основы создания многотабличных форм для ввода и редактирования данных

Многотабличная форма может не иметь включаемых форм. В этом случае в форму, кроме полей таблицы-источника, добавляются поля из связанной таблицы, являющейся главной относительно основной таблицы формы.

Многотабличная форма может быть создана в режиме конструктора или с помощью мастера форм.

При создании многотабличной формы средствами Access используются различные приемы. Наиболее технологичным является первоначальное создание форм с помощью мастера с последующей их доработкой в режиме конструктора. Мастер упрощает процесс создания формы, т.к. в этом режиме большинство требуемых операций выполняется автоматически.

Мастер форм предоставляет возможность выбрать включаемые в форму поля из нескольких взаимосвязанных таблиц и запросов и выбрать стиль ее оформления. При этом используются различные способы построения многотабличной формы. Полученная с помощью мастера форма при необходимости может быть отредактирована в режиме конструктора.

Способы построения многотабличной формы

Явное включение подчиненной формы

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

Вызов связанной формы нажатием кнопки

Мастер форм позволяет создать связанные формы, которые не включаются непосредственно в форму. При этом вместо подчиненной формы включается лишь кнопка, представляющая связанную форму. Если необходимо просмотреть подчиненные записи, связанная подчиненная форма вызывается на экран нажатием этой кнопки. Открывающееся содержимое связанной формы синхронизировано с текущей записью формы. Этот способ построения многотабличной формы удобен в сложных формах, перегруженных большим числом элементов управления, а также в случае, когда пользователю нет необходимости постоянно видеть связанные данные.

Многотабличная форма без подчиненных и связанных форм

Составная многотабличная форма, построенная мастером, может не включать подчиненных и связанных форм. Такая форма создается, если необходимо отображать записи подчиненной таблицы, дополненные полями из одной или нескольких главных таблиц. В этом случае записеобразующим источником выводимых в форме данных является запись подчиненной таблицы. В одной отображаемой в форме записи содержатся значения полей из записи подчиненной таблицы и полей из единственной связанной с ней записи главной таблицы.

Многотабличная форма на основе запроса

Создание формы на основе полей из нескольких взаимосвязанных таблиц с помощью мастера является для пользователя достаточно простой процедурой. Однако если в базе данных уже имеется запрос с выбранными для получения результата таблицами, определены поля, которые необходимо включить в результат, то целесообразно строить форму на основе ранее созданного запроса. В этом случае мастер использует ранее проделанную пользователем работу.

Создание многотабличной формы в режиме конструктора и ее редактирование

Средства конструктора форм достаточны для полного создания многотабличных форм. Конструктор позволяет в любой момент модифицировать ранее разработанную и сохраненную форму. При создании и редактировании формы может производиться добавление новых полей и надписей, включение полей со списком, создание кнопок, добавление подчиненных форм, внедрение объектов из других приложений (например, рисунков, диаграмм и т.п.), изменение расположения отдельных полей, их отображения и подписей. При редактировании могут быть выполнены любые изменения имеющихся элементов и их свойств, удаление элементов, добавление новых элементов.

Вычисления в форме

Вычисления в каждой записи формы

Чтобы произвести вычисления на основе данных в каждой записи, в форме необходимо создать вычисляемый элемент управления, в который записывается выражение. Для создания вычисляемого элемента управления откройте форму в режиме конструктора и, нажав на панели элементов кнопку Поле, разместите этот свободный элемент управления в нужном месте области данных. Затем в элемент управления Свободный необходимо ввести выражение. Выражение должно начинаться со знака равенства (=). В качестве операндов выражения чаще всего используются имена полей, константы, а в качестве операторов — знаки арифметических операций.

Пример вычисляемого поля

Пусть таблица или запрос, на основе которых строится форма, содержат данные о кафедре и имеют поля: нагрузка — количество часов, которое должны выполнить преподаватели всей кафедры; числопреп — число преподавателей на кафедре. В форме можно подсчитать и вывести среднюю нагрузку преподавателя для каждой кафедры, создав вычисляемый элемент управления и записав в него выражение:

Выражение может быть введено на вкладке Данные в поле Данные в окне свойств созданного элемента управления. Можно воспользоваться построителем выражений, используя появляющуюся кнопку Построить сразу за полем свойства Данные, который позволяет упростить создание выражения.

При формировании выражения в левой панели построителя открывается нужная форма (кафедра) в группе Форма, а в средней панели выбираются необходимые для выражения поля.

Вычисление итоговых значений

Вычисление итоговых значений для записей формы выполняется с помощью встроенных статистических функций, записываемых в качестве выражения в вычисляемых элементах управления. В однотабличной форме вычисляемый элемент управления, создаваемый для расчета итогового значения по всем записям, необходимо размещать в области примечания формы. Например, можно создать поле для суммирования нагрузки всех кафедр по полю нагрузка

Вычисление итогового значения для связанных записей подчиненной формы и вывод его в текущей записи основной формы

Основная форма и ее подчиненная форма чаще всего строятся на основе таблиц, между которыми установлена связь типа один-ко-многим. При этом в основной форме выводится одна текущая запись, а в подчиненной форме доступны несколько подчиненных записей. При расчете итогового значения для группы записей подчиненной формы, связанных с текущей записью основной формы, вычисляемое поле может быть отображено в записи основной формы.

Ограничения доступа к данным через форму

Защита данных поля от изменений

Для защиты данных поля от изменения используется свойство Блокировка. Блокировка может быть установлена для любого поля формы. Чтобы защитить, таким образом, поле, установите курсор в его рамке и с помощью контекстно-зависимого меню вызовите окно его свойств. В окне свойств на вкладке Данные в раскрывающемся списке Блокировка выберите значение Да. После установки этого свойства поле доступно только для чтения.

Установка ограничений на корректировку записей через форму

Для того, чтобы при работе через форму записи были доступны только для чтения, следует в свойствах всей формы на вкладке Данные в раскрывающихся списках Разрешить добавление, Разрешить удаление и Разрешить изменение выбрать значение Нет. Сделать записи доступными только для чтения можно также, выбрав для свойства Тип набора записей, значение Статический набор. Указанные свойства могут устанавливаться независимо друг от друга.

Свойство Ввод данных при установленном значении Да определяется режим открытия формы, при котором разрешен только ввод новых записей, просмотр существующих записей при этом не доступен. При открытии формы будет выводиться только пустая запись, которую можно заполнять.

Защита данных подчиненной формы от изменений

В этом случае технология загрузки данных в БД предполагает запрет обновления справочных данных через подчиненную форму. Защитить содержимое всех полей подчиненной формы, сделав его доступным только для чтения, позволяет свойство Блокировка, установленное для подчиненной формы.

Ссылка на основную публикацию
Adblock
detector