Обновление объекта запроса в списке с помощью формы. (MS-Access) - PullRequest
0 голосов
/ 05 июля 2018

Цель состоит в том, чтобы создать форму, которая запрашивала бы все объекты таблицы, которые определены как «активные». Этот запрос отображается в виде списка в форме. Я хотел бы, чтобы пользователь, который обращается к этой форме, мог выбрать объект этого запроса, а затем обновить таблицу, выбрав действие из второго списка и затем нажав кнопку «Отправить».

Визуально: enter image description here

Я полагаю, что при клике VBA будет выглядеть примерно так:

Private Sub ActionAdminbtn_Click()
Set Actiontbl = CurrentDb.OpenRecordset("SELECT * FROM [Actiontbl]")
Actiontbl.Edit
Actiontbl![Progress] = Me.AdminActionSelect
Actiontbl.Update
Actiontbl.Close
Me.Refresh
End Sub

Это почти работает для меня, однако мне не хватает строки кода, которая выбирает объект из списка. Прямо сейчас, щелкнув действие и отправив сообщение, я изменяю только первую запись в таблице. Не желаемый. Любые предложения о том, как изменить выбранный объект?

Изменить ниже, чтобы включить больше: Вот моя таблица, которую я пытаюсь редактировать. enter image description here

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Предполагая, что ваш первый список привязан к уникальному ключу ID вашего скриншота (скрытого в форме), рассмотрите вопрос об обновлении SQL с предложением WHERE. Ниже демонстрируется параметризованный запрос, вызываемый с использованием объекта QueryDef .

SQL (сохранить как сохраненный запрос)

PARAMETERS [ProgressParam] TEXT(255), [ActionIDParam] Long;
UPDATE [Actiontbl] SET [Progress] = [ProgressParam]
WHERE ID = [ActionIDParam]

* VBA 1014 *

Private Sub ActionAdminbtn_Click()
    Dim qdef As QueryDef

    Set qdef = CurrentDb.QueryDefs("myUpdateQuery")
    ' BIND PARAMS
    qdef![ProgressParam] = Me.AdminActionSelect
    qdef![ActionIDParam] = Me.FirstListBoxName

    ' EXECUTE ACTION
    qdef.Execute dbFailOnError

    Set qdef = Nothing

    Me.Requery
End Sub

В качестве альтернативы, если вы хотите остаться с вашим подходом Recordset Update, откройте запрос, относящийся к элементу ActionID , все еще предполагая, что значение списка связано с полем скрытого идентификатора.

Private Sub ActionAdminbtn_Click()
   Dim strSQL As String
   Dim Actiontbl As Recordset

   strSQL = "SELECT * FROM [Actiontbl] WHERE ID=" & Me.FirstListBoxName

   Set Actiontbl = CurrentDb.OpenRecordset(strSQL)

   Actiontbl.Edit
   Actiontbl![Progress] = Me.AdminActionSelect
   Actiontbl.Update
   Actiontbl.Close

   Set Actiontbl = Nothing

   Me.Refresh
End Sub
0 голосов
/ 05 июля 2018

Не ясно, как называется ваш элемент управления ListBox, но предполагается, что ListBox - это имя:

Dim iSel As Integer

iSel = ListBox.Value

Это даст вам выбранную строку для списка. Тогда вы можете использовать метод обновления набора записей или более простое обновление RowSource.

Для каких-либо конкретных предложений нам потребуется просмотреть примеры данных и имена столбцов рассматриваемой таблицы.

ПРИМЕЧАНИЕ. Эти типы обновлений значительно проще использовать поле ключа ID.

...