如何从两个来源制作可编辑的Recordsource

时间:2019-07-09 09:03:28

标签: ms-access access-vba

我不太确定标题的用词,但我希望我能在这里很好地描述问题。我之前也发表过两篇文章。在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),并用表中的值填充其他两列(因此不是只读的)。正如您在屏幕截图中看到的那样,它实际上并不起作用。所以我的问题是:如何获取每个复选框和每个文本字段(地址)要显示的默认值并使它们可编辑,以便用户可以打开此表单和复选框并为地址栏输入值?用户是否还可以编辑其他列也没关系,因为它们将不会被使用。

0 个答案:

没有答案