сравнивая таблицу и запрос - PullRequest
0 голосов
/ 08 июля 2019

У меня есть форма, таблица ("my_table") и запрос ("my_query").

Я хочу, чтобы функция смотрела, совпадают ли какие-либо идентификаторы записи таблицы («my_ID») с идентификаторами запроса (также «my_ID»), чтобы обновить поле («my_Property») данной записи со значением из форма.

Я скопировал и изменил этот код . Мой код вызывает ошибку (необходимо перевести): "Ошибка времени выполнения" 3061 ": ожидался 1 параметр, но передано слишком мало параметров."

Я думаю, что проблема в том, что в цикле if я не сравниваю tbl.Fields ("my_ID") с дискретным значением, но с установленными значениями. Может быть, я должен также перебрать все значения qry.Fields ("my_ID"), но я не вижу, как сделать код. Кроме того, это значительно замедлит и без того медленный процесс, поскольку my_Table содержит более 40 000 записей. Есть ли более быстрый способ сравнения идентификаторов?

Private Sub btn_Click()
    Dim db As Database
    Set db = CurrentDb

    Dim tbl As Recordset
    Set tbl = db.OpenRecordset("my_Table")

    Dim qry As QueryDef
    Set qry = db.OpenRecordset("my_Query")

    tbl.MoveFirst
    Do Until tbl.EOF
            If tbl.Fields("my_ID") = qry.Fields("my_ID") Then
                tbl.Edit
                tbl.Fields("my_Property") = Me!textbox1.Value
                tbl.Update
            End If
        tbl.MoveNext
    Loop
End Sub

1 Ответ

0 голосов
/ 08 июля 2019

Как @Harassed Dad и @Andre предложили, я просто скопировал «my_query» и изменил копию на запрос на обновление «my_updatequery» с полем обновления «my_Property», установленным в [Forms]! [My_Form]! [Tbx_my_Value].Затем я изменил код кнопки:

Private Sub btn_Click()
        DoCmd.OpenQuery "my_updatequery"
        Forms.my_Form.Subform2.Requery
End Sub

Forms.my_Form.Subform2.Requery обновляет в основном подчиненную форму, отображающую запрос "my_query".

Я поищу еще для другогоспособ вызова запроса на обновление, чтобы избежать двух запросов, которые всегда влекут за собой открытие запроса на обновление.

edit:

Чтобы избежать предупреждений, я просто отключил и снова включил Warnings:

Private Sub btn_Click()
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "my_updatequery"
    DoCmd.SetWarnings True
    Forms.my_Form.Subform2.Requery
End Sub

Не самый элегантный способ, но он справится с работой.

...