如何将可编辑的列添加到不可编辑的查询

时间:2019-05-17 12:05:48

标签: ms-access access-vba ms-access-2007

我在子窗体的数据表视图中有一个查询,其中包含用户需要添加的信息。具体来说,需要编辑2列。由于大量的GROUP BY子句,因此该查询不可编辑。有没有一种方法我可以添加这2列,并使它们每行可编辑,而无需更改查询/将其重写以使其可编辑?

到目前为止,我已经尝试添加未绑定的列,但这并不保存每一行的数据。现在,我设置了一个新表,其中有两列我要添加为“控制源”,但由于记录是只读的,因此我无法编辑数据表中的任何内容。

2 个答案:

答案 0 :(得分:1)

您无法在分组查询中进行编辑,因为无法告诉数据库您实际上在编辑哪些分组记录。您无需提及是否仅在表单上下文中需要这些列即可编辑(并且在关闭或重新加载其他数据后,这些列中的所有数据都会被丢弃),或者这些编辑是否有望以某种方式更新您的记录。

在任何一种情况下,都可以使用临时表并用查询数据填充它。这样,您就可以在数据表视图中对其进行编辑并维护每个记录的值。但是,如果您期望这些值会以某种方式永久影响原始数据,则您必须在VBA中手动处理该数据,可能会捕获表单关闭或重新加载事件,并使用临时表数据来更新原始表。

答案 1 :(得分:0)

您可以这样操作:创建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进行。

相关问题