我在子窗体的数据表视图中有一个查询,其中包含用户需要添加的信息。具体来说,需要编辑2列。由于大量的GROUP BY子句,因此该查询不可编辑。有没有一种方法我可以添加这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进行。