Как добавить редактируемый столбец в нередактируемый запрос - PullRequest
0 голосов
/ 17 мая 2019

У меня есть запрос в представлении таблицы данных в подчиненной форме, в котором содержится информация, которую пользователь должен добавить.В частности, 2 столбца должны быть отредактированы.Запрос недоступен для редактирования из-за множества предложений GROUP BY.Есть ли способ, которым я могу добавить эти 2 столбца и сделать их редактируемыми для каждой строки без изменения запроса / переписать его, чтобы сделать его редактируемым?

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

Ответы [ 2 ]

1 голос
/ 17 мая 2019

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

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

0 голосов
/ 17 мая 2019

Вы можете сделать это следующим образом: создать набор записей ADODB и заполнить его данными из набора записей вашей формы.

Это образец из моей базы данных:

Private Sub Form_Open(Cancel As Integer)
Dim RS As New adodb.Recordset, RST As DAO.Recordset, InvTotal As Currency

Set RS = New adodb.Recordset
With RS
    ' It's a free field that doesn't belong to form query:
    .Fields.Append "InvCounter", adInteger

    .Fields.Append "InvProduct", adVarChar, 255
    .Fields.Append "InvUnit", adVarChar, 3
    .Fields.Append "InvQuantity", adInteger
    .Fields.Append "InvPrice", adCurrency
    .Fields.Append "InvValue", adCurrency

    .CursorType = adOpenKeyset
    .CursorLocation = adUseClient
    .LockType = adLockPessimistic
    .Open
End With

Set RST = CurrentDb.OpenRecordset("SELECT * FROM tblWarehouse WHERE wOrder = " & idf, dbOpenSnapshot)
InvTotal = 0
If RST.RecordCount Then
    Do Until RST.EOF
        RS.AddNew
        ' I fill my free field with row number but i can edit it
        ' manually in form:
        RS.Fields("InvCounter") = RST.AbsolutePosition + 1
        RS.Fields("InvProduct") = RST("wProduct")
        RS.Fields("InvUnit") = "p"
        RS.Fields("InvQuantity") = RST("wQuantity")
        RS.Fields("InvPrice") = RST("wPrice")
        RS.Fields("InvValue") = RS.Fields("InvPrice") * RST("wQuantity")
        InvTotal = InvTotal + RS.Fields("InvValue")
        RS.Update
        RST.MoveNext
    Loop
    Set Me.Recordset = RS
    Me.InvTotal = InvTotal
    RST.Close
    Set RST = Nothing
    RS.Close
    Set RS = Nothing
End If
End Sub

Если вы хотите сохранить свои изменения в этом поле, вы должны сделать это и через VBA.

...