我不太确定标题的用词,但我希望我能在这里很好地描述问题。我之前也发表过两篇文章。在this one中,我描述了我的方法已经解决的另一个问题。帖子中有指向该问题之前的链接。这可能有助于理解我的问题,而无需重复所有操作。 Here是我正在查看的表单的当前状态。在下面的代码中,您可以看到我如何填写表格。复选框和“ Zieladresse”字段的默认值为 No 和 Null 。
Dim cpRS As New ADODB.Recordset, rs As DAO.Recordset, otherRS As DAO.Recordset, cb As checkBox, addr As String
'Creating copy of previously displayed result table
Set cpRS = New ADODB.Recordset
With cpRS
.Fields.Append "val1", adInteger
.Fields.Append "val2", adInteger
'...
'new Fields for editable purpose
'########################################
.Fields.Append "auswahl", adBoolean
.Fields.Append "Zieladresse", adVarChar, 50, adFldIsNullable
.CursorLocation = adOpenKeyset
.Open , , adOpenDynamic, adLockOptimistic, 8
End With
'Dim argv() As String
'Dim argRest As String - not used in this excerpt
Dim qdef As DAO.QueryDef
Dim restrictedQuery As String
Dim i As Long
restrictedQuery = "some SQL"
Set qdef = CurrentDb.CreateQueryDef("")
qdef.SQL = restrictedQuery
Set rs = qdef.OpenRecordset
Set rs = CurrentDb.OpenRecordset(restrictedQuery, dbOpenSnapshot)
rs.MoveLast
rs.MoveFirst
If rs.RecordCount = 0 Then
MsgBox "error", vbOKOnly, "error"
DoCmd.Close acForm, Me.Name
Exit Sub
End If
'populate new recordset with data from table in previous form
Do Until rs.EOF
cpRS.AddNew
cpRS.Fields("val1") = rs("val1")
'...
cpRS.Update
rs.MoveNext
Loop
Set otherRS = CurrentDb.OpenRecordset("tbl_Auswahl")
otherRS.MoveFirst
Do Until cpRS.EOF
cpRS.Fields("auswahl") = otherRS("auswahl")
cpRS.Fields("Zieladresse") = otherRS("Zieladresse")
cpRS.Update
cpRS.MoveNext
Loop
在vba中,我打开Recordset,然后首先使用来自查询的值填充该记录集,该查询是按查询分组的(因此是只读的)。然后,我打开另一个Recordset(otherRS),并用表中的值填充其他两列(因此不是只读的)。正如您在屏幕截图中看到的那样,它实际上并不起作用。所以我的问题是:如何获取每个复选框和每个文本字段(地址)要显示的默认值并使它们可编辑,以便用户可以打开此表单和复选框并为地址栏输入值?用户是否还可以编辑其他列也没关系,因为它们将不会被使用。