Как напрямую обновлять запись в базе данных из номера формы (Access 2007). Vba обновить форму access
Макрокоманда «Обновление» - Access
Макрокоманда Обновление для баз данных Access позволяет обновлять данные в указанном элементе управления активного объекта путем отправки запроса к его источнику. Если элемент управления не указан, макрокоманда отправляет запрос к источнику самого объекта. С помощью этой макрокоманды можно обеспечить отображение актуальных данных в активном объекте или элементе управления.
Настройка
Макрокоманда Обновление имеет следующие аргументы:
Аргумент макрокоманды |
Описание |
Имя элемента |
Имя элемента управления, который требуется обновить. Имя вводится в окне конструктора макросов в поле Имя элемента. Следует указать только имя элемента, а не полный идентификатор (такой как Forms!ИмяФормы!ИмяЭлемента). Чтобы отправить повторный запрос к источнику данных активного объекта, оставьте это поле пустым. Если активным объектом является таблица или результирующий набор, значение этого аргумента нужно оставить пустым. |
Примечания
Макрокоманда Обновление выполняет одно из следующих действий:
-
Повторно выполняет запрос, на котором основан элемент управления или объект.
-
Отображает добавление, изменение и удаление записей в таблице, на которой основан элемент управления или объект.
Примечание: Выполнение макрокоманды Обновление не влияет на положение указателя записей.
-
списки и поля со списком;
-
элементы управления подчиненной формы;
-
объекты OLE, например диаграммы;
-
элементы управления с агрегатными функциями домена, например БДСУММ.
Если указанный элемент управления не основан на запросе или таблице, данная макрокоманда выполняет принудительный пересчет этого элемента управления.
Если поле Имя элемента не заполнено, выполнение макрокоманды Обновление имеет тот же эффект, что и нажатие клавиш SHIFT+F9 при установленном на объекте фокусе. Если фокус находится на элементе управления подчиненной формы, макрокоманда отправляет повторный запрос только к источнику данных этой подчиненной формы (как при нажатии клавиш SHIFT+F9).
Примечание: Макрокоманда Обновление отправляет запрос к источнику элемента управления или объекта. С другой стороны, макрокоманда ОбновитьОбъект обновляет элементы управления в указанном объекте, но не отправляет повторный запрос к базе данных и не отображает новые записи. Макрокоманда ПоказатьВсеЗаписи не только отправляет повторный запрос для активного объекта, но также удаляет все примененные фильтры, чего не делает макрокоманда Обновление.
Чтобы отправить повторный запрос для элемента управления, который не относится к активному объекту, следует использовать метод Requery в модуле Visual Basic для приложений (VBA), а не макрокоманду Обновление или соответствующий ей метод Requery объекта DoCmd. Метод Requery в VBA выполняется быстрее, чем макрокоманда Обновление или метод DoCmd.Requery. Кроме того, при использовании макрокоманды Обновление или метода DoCmd.Requery в Access запрос закрывается и повторно открывается из базы данных, тогда как при выполнении метода Requery Access повторно выполняет запрос без закрытия и перезагрузки. Обратите внимание на то, что метод Requery объекта данных ActiveX (ADO) работает аналогично методу Requery в Access.
support.office.com
Access 2007 VBA & SQL
Аннотация: Я использую VB для воссоздания запроса каждый раз, когда пользователь выбирает один из 3-х параметров из выпадающего меню, которое добавляет предложение WHERE Если они выбрали что-нибудь из списков со списком. Затем я пытаюсь обновить информацию, отображаемую в форме, тем самым фильтруя то, что отображается в таблице, на основе ввода пользователем.
1) Динамически созданный запрос с использованием VB.
Private Sub BuildQuery() ' This sub routine will redefine the subQryAllJobsQuery based on input from ' the user on the Management tab. Dim strQryName As String Dim strSql As String ' Main SQL SELECT statement Dim strWhere As String ' Optional WHERE clause Dim qryDef As DAO.QueryDef Dim dbs As DAO.Database strQryName = "qryAllOpenJobs" strSql = "SELECT * FROM tblOpenJobs" Set dbs = CurrentDb ' In case the query already exists we should deleted it ' so that we can rebuild it. The ObjectExists() function ' calls a public function in GlobalVariables module. If ObjectExists("Query", strQryName) Then DoCmd.DeleteObject acQuery, strQryName End If ' Check to see if anything was selected from the Shift ' Drop down menu. If so, begin the where clause. If Not IsNull(Me.cboShift.Value) Then strWhere = "WHERE tblOpenJobs.[Shift] = '" & Me.cboShift.Value & "'" End If ' Check to see if anything was selected from the Department ' drop down menu. If so, append or begin the where clause. If Not IsNull(Me.cboDepartment.Value) Then If IsNull(strWhere) Then strWhere = strWhere & " AND tblOpenJobs.[Department] = '" & Me.cboDepartment.Value & "'" Else strWhere = "WHERE tblOpenJobs.[Department] = '" & Me.cboDepartment.Value & "'" End If End If ' Check to see if anything was selected from the Date ' field. If so, append or begin the Where clause. If Not IsNull(Me.txtDate.Value) Then If Not IsNull(strWhere) Then strWhere = strWhere & " AND tblOpenJobs.[Date] = '" & Me.txtDate.Value & "'" Else strWhere = "WHERE tblOpenJobs.[Date] = '" & Me.txtDate.Value & "'" End If End If ' Concatenate the Select and the Where clause together ' unless all three parameters are null, in which case return ' just the plain select statement. If IsNull(Me.cboShift.Value) And IsNull(Me.cboDepartment.Value) And IsNull(Me.txtDate.Value) Then Set qryDef = dbs.CreateQueryDef(strQryName, strSql) Else strSql = strSql & " " & strWhere Set qryDef = dbs.CreateQueryDef(strQryName, strSql) End If2) Основная форма, где пользователь выбирает элементы из поля со списком.
картина основной форме и к югу от формы http://i48.tinypic.com/25pjw2a.png
3) Подформа указал на запрос, созданный на шаге 1.
цепь событий: 1) Пользователь выбирает элемент из выпадающего списка на основная форма. 2) Старый запрос удаляется, создается новый запрос (то же имя). 3) Подформация, указанная в запросе, не обновляется, но если вы сами открываете запрос, отображаются правильные результаты.
Название запроса: qryAllOpenJobs имя подчиненной: subQryAllOpenJobs Кроме того, ряд Источник subQryAllOpenJobs = qryAllOpenJobs Имя главной формы: frmManagement
sql ms-access ms-access-2007 access-vba 8,671
stackoverrun.com
Обновление или повторный запрос данных
Если к вашей базе данных открыт общий доступ по сети, Microsoft Access обновляет информацию через установленные промежутки времени. Чтобы просмотреть самые актуальные данные, обновите записи в режиме таблицы или в режиме формы: на вкладке <legacyBold></legacyBold><ui>Главная</ui> нажмите кнопку <legacyBold></legacyBold><ui>Обновить все</ui> и выберите команду ><legacyBold></legacyBold><ui>Обновить</ui>. Происходит обновление существующих данных в таблице или форме. Этот процесс не переупорядочивает записи, не отображает новые и не удаляет несуществующие записи или записи, которые больше не соответствуют указанным условиям. Чтобы сделать обновление более тщательным, выполните повторный запрос данных с помощью макроса.
Примечание: Повторный запрос может занять много времени в зависимости от размера записей.
В этой статье
<link xlink:href="76e8c8b5-b8b4-49eb-a7d5-a472e742366c#bm1">Обновление данных</link>
<link xlink:href="76e8c8b5-b8b4-49eb-a7d5-a472e742366c#bm1_5">Указание интервала обновления</link>
Повторный запрос данных с помощью макроса
Используйте код, чтобы повторно запросить данные
<link xlink:href="76e8c8b5-b8b4-49eb-a7d5-a472e742366c#requeryaccessapp">Повторный запрос данных в веб-приложении Access</link>
Обновление данных
<link xlink:href="76e8c8b5-b8b4-49eb-a7d5-a472e742366c#__top">К началу страницы</link>
Указание интервала обновления
Вы можете указать интервал, по которому Access будет обновлять данные.По умолчанию Access обновляет данные каждые 60 секунд.
-
Нажмите кнопку Office.Появляется Outspace.
-
На левой панели Outspace нажмите <ui>Параметры</ui>.
-
На левой панели диалогового окна <ui>Параметры Access</ui> щелкните элемент <ui>Расширенные параметры</ui>.
-
На правой панели под <ui>Расширенными параметрами</ui> уточните значение <ui>Интервала обновлений (в секундах)</ui>.
<link xlink:href="76e8c8b5-b8b4-49eb-a7d5-a472e742366c#__top">К началу страницы</link>
Повторный запрос данных с помощью макроса
Чтобы автоматически выполнять повторный запрос данных при возникновении события, можно создать макрос и связать его с событием. Предположим, вы хотите повторно запросить данные получением <token>TE000127438</token> в форме. Для этого можно создать макрос и связать его с событием формы <ui>Получение фокуса</ui> с помощью описанной ниже процедуры:
-
На вкладке <ui>Создание</ui> в группе <ui>Другие</ui> выберите <ui>Макрос</ui>. Если эта команда недоступна, нажмите стрелку под кнопкой <ui>Модуль</ui> или <ui>Модуль класса</ui>, а затем нажмите кнопку <ui>Макрос</ui>.
-
Щелкните стрелку в поле рядом с зеленым знаком плюса (+) и выберите пункт <ui>Запросить повторно</ui>.
-
Сохраните макрос, используя имя <literal>Повторный запрос</literal>, а затем закройте конструктор макросов.
-
Откройте нужную форму в <token>TE000126615</token>. Если страница свойств не отображается, нажмите клавишу F4.
-
Убедитесь, что сама форма выбрана.Затем нажмите на вкладку <ui>Событие</ui> на странице свойств.
-
На вкладке <ui>Событие</ui> щелкните стрелку в свойстве <ui>Получение фокуса</ui> и выберите макрос "Requery".
-
Сохраните форму.
<link xlink:href="76e8c8b5-b8b4-49eb-a7d5-a472e742366c#__top">К началу страницы</link>
Используйте код, чтобы повторно запросить данные
Чтобы автоматически выполнять повторный запрос данных при возникновении события, можно создать макрос и связать его с событием, например получением в форме. Для этого можно создать макрос и связать его с событием формы <ui>Получение фокуса</ui> с помощью описанной ниже процедуры:
-
Откройте нужную форму в Конструкторе. Если страница свойств не отображается, нажмите клавишу F4.
-
Убедитесь, что сама форма выбрана.Затем нажмите на вкладку <ui>Событие</ui> на странице свойств.
-
На вкладке <ui>Событие</ui> в свойстве <ui>Получение фокуса</ui> нажмите на кнопку <ui>Сборка</ui><mediaLinkInline><image xlink:href="d5f9f47b-bca3-42bd-9772-96ff011602bd"></image></mediaLinkInline>.
-
В диалоговом окне <ui>Выберите конструктор</ui> нажмите на <ui>Конструктор кода</ui>.
В редакторе Visual Basic откроется новый модуль.
-
Напечатайте <literal>Me.Requery</literal>, а затем закройте редактор Visual Basic.
-
Сохраните форму.
<link xlink:href="76e8c8b5-b8b4-49eb-a7d5-a472e742366c#__top">К началу страницы</link>
Повторный запрос данных в веб-приложении Access
Запросы в веб-приложении Access выполняются на сервере. Чтобы повторно запросить данные в веб-приложении Access, используйте макрос "ОбновитьЗапись". Этот макрос требует текущий набор записей.
-
Откройте необходимую форму, нажмите кнопку <ui>Макрокоманды</ui>, а затем выберите Текущая запись.
-
В <ui>Каталоге макрокоманд</ui> выберите <ui>ПовторноЗапроситьЗаписи</ui>. Если поле <ui>Выражение=</ui> оставить пустым, к результатам не будут применяться дополнительные фильтры, а если оставить пустым поле <ui>Порядок сортировки=</ui>, не будет применяться сортировка.<legacyBold></legacyBold>
-
Сохраните форму.
<link xlink:href="76e8c8b5-b8b4-49eb-a7d5-a472e742366c#__top">К началу страницы</link>
support.office.com
Macro для обновления таблицы из формы в Access
данных в Access связанной форме не будет записывать данные в таблицу, пока не закрыть базу данных или закрыть форму, или перейти к новой записи.
Однако вы можете просто поместить кнопку отправки в форму. Таким образом, код за кнопки отправки будет:
' code to submit data to table: Me.Dirty = falseПриведенный выше код случае форма для представления и записи данных в формы основной таблицы. Поэтому ВЫ МОЖЕТЕ писать код для отправки данных форм, если хотите. Это только одна строка.
Если пользователь закрывает форму или закрывает базу данных, и они НЕ попадают в submit, то что вы хотите сделать? Вы должны объяснить, что вы хотите в этом случае. Если вы ничего не сделаете, Access автоматически отправит данные в таблицу для вас. Или, может быть, вы хотите нагнать и пытать пользователя и рассказать им о том, что делать? И если вы скажете «нет», чтобы не сохранять данные, вы хотите вернуться к форме или продолжить закрытие этой формы? (пользователь будет думать, что если они не ударят, чтобы не сохранить, то они просят дать возможность редактировать данные формы еще немного, а не отбрасывать ввод данных, который они сделали для).
Вы также не объясняете, после того, как пользователь нажимает отправить более одного раза, а затем, что вы хотите? Если пользователь случайно нажал кнопку отправки два раза (ДЕЙСТВИТЕЛЬНО ЛЕГКО сказать двойным щелчком мыши, то вы хотите, чтобы данные форм записывались в таблицу два раза?
Таким образом, ОГРОМНОЕ ОГРОМНОЕ количество вопросов вы не ответил здесь.
Таким образом, если пользователь не попал представить, но закрывает форму (или базу данных), что вы хотите, чтобы произойти?
Если пользователь хитами аварии отправить два раза, вы хотите данные, которые должны быть записаны в таблицу два раза? Что вы хотите здесь сделать? Что остановит пользователя от ударов подавать несколько раз и не приведет к множественным reocrds?
Так что имейте в виду, что ONE LINE кода за кнопкой, называемой submit, будет отправлять данные в таблицу, но это более 100 других подробностей относительно того, что должно было произойти, когда пользовательский хит подал более одного раза, и что происходит, когда закрытие формы, не нажав submit, - это данные, которые вы еще не получили. И не только закрытие формы, но и закрытие приложения?
Так что имейте в виду, что только одна строка кода требуется представить данные в таблицу и код:
Me.Dirty = falsestackoverrun.com
access-vba - Как напрямую обновлять запись в базе данных из номера формы (Access 2007)
У меня есть система отслеживания заданий, и есть запрос, который возвращает результаты всех просроченных заданий. У меня есть форма, которая отображает каждое из этих заданий один за другим и имеет две кнопки (Иов завершен, а Job не завершен). Не завершено просто показывает следующую запись. Я не могу найти способ получить доступ к текущей записи, чтобы обновить ее содержимое, если нажата кнопка "Завершено", ближайший я могу получить это длинное число, которое представляет позицию записей в форме.
VBA, чтобы получить индекс записи в форме, выглядит следующим образом.
Sub Jobcompleted(frm As Form) Dim curr_rec_num As Long curr_rec_num = frm.CurrentRecord End SubЭто мой первый выстрел в VBA, и после часа поиска я не могу найти ничего, чтобы решить мою проблему. Неужели я об этом совершенно неправильно? Работа в Microsoft Access 2007
Дополнительная информация Все таблицы нормализованы
Таблица автомобилей: Содержит car_id (pk), а также рег и модель и т.д.
Таблица работы. Содержит job_id (pk), vehicle_id (fk) и другую информацию о том, что должно произойти, а также следующую дату завершения, дни между каждым заполнением задания (все повторные задания) и другая информация
Таблица истории работ: содержит job_history_id (pk), job_id (fk), дата и комментарии
Когда нажата кнопка завершения задания, она должна создать новую запись в таблице истории заданий с текущей датой, комментариями и идентификатором задания
Это script Я пытаюсь работать
Private Sub Command29_Click() Dim strSQL1 As String Dim strSQL2 As String Set Rs = CurrentRs Set db = CurrentDb strSQL1 = "INSERT INTO completed_jobs(JOB_ID, DATE_COMPLETED, COMMENTS) VALUES " & Rs!job.ID & ", " & Date db.Execute strSQL1, dbFailOnError strSQL2 = "UPDATE job SET JOB_NEXT_OCCURANCE = JOB_NEXT_OCCURANCE+JOB_RECURRANCE_RATE WHERE job.ID = Rs!job.ID" db.Execute strSQL2, dbFailOnError End SubПримечание. Строка Set Rs = CurrentRs полностью неверна, я считаю, что это то, что мне нужно выяснить? Это называется нажатием кнопки
Я размещаю изображение, которое показывает форму (не непрерывную).
@HansUp, я получаю то, что вы говорите, но я не думаю, что это применимо (я не представил достаточную информацию в первый раз, чтобы вы поняли, что я думаю)
@sarh Я считаю, что этот набор Recordset, о котором вы говорите, мне нужен, однако я не могу понять, как его использовать, какие-либо подсказки?
@Matt Я на 90% уверен, что использую связанную форму (Как я уже сказал, новый для Access, смотрел на все, что люди предлагали и учили, когда я иду). Конечно, есть идентификатор для задания (просто не показано, не нужно быть видимым), но как мне получить доступ к этому, чтобы выполнить операцию над ним? SQL, который я могу сделать, интегрируя с Access/VBA, я новичок в
qaru.site