从数据表上的选定记录中获取记录集

时间:2014-02-12 23:31:25

标签: ms-access ado

我有一个带有数据表视图的子表单。在父表单上,我尝试根据子数据表中选择的内容编辑记录。表单不使用主/子字段链接。

我能够使用SelTop和SelHeight获取所选的顶行和所选行的数量,如下所示。

Dim rs As New ADODB.Recordset
Set rs = Me.Child_Form.Form.RecordsetClone
If SelHeight > 0 Then
    rs.MoveFirst
    rs.Move SelectionTop - 1
    For i = 1 To SelectionHeight
        If Not rs.EOF Then
            Debug.Print rs("ID")
            rs.MoveNext
        End If
    Next i
End If

如果我对表单进行过滤或排序,那么我不能做的就是获取在子表单上选择的10条记录。 FilterSort位于表单级别,无法应用于基础记录集。

我尝试使用像这样的查询创建一个新的记录集

sql = "Select * from [" & Me.RecordSource & "] where " & Replace(Me.Filter, """", "'") & " order by " & Me.OrderBy

但这里存在多个问题。 1)ADO不支持表单过滤器有时会生成的IN子句,2)订单顺序并不总是相同且可预测。

如何获取已排序的过滤记录集并仅查找用户在数据表视图中选择的记录?

我使用ADP文件连接到Sql Server。

1 个答案:

答案 0 :(得分:0)

我提出了一个令人沮丧的解决方案,但似乎有效。

  • 在我的子表单中添加了一个未绑定的(到我的记录集)复选框控件。
  • 将其命名为chkSelect
  • 制作了控制源=IsChecked(ID)

我在子表单中运行此代码

Dim selectedRecords As Dictionary


Private Sub chkSelect_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If selectedRecords.Exists(Me("Analytical_ResultID").Value) Then
        selectedRecords.Remove Me("Analytical_ResultID").Value
    Else
        selectedRecords.Add Me("Analytical_ResultID").Value, Me("Analytical_ResultID").Value
    End If
    chkSelect.Requery
End Sub

Private Function IsChecked(Analysis_ResultID As Long) As Boolean
    IsChecked = selectedRecords.Exists(Analysis_ResultID)
End Function

Private Sub Form_Load()
     If selectedRecords Is Nothing Then
        Set selectedRecords = New Dictionary
    End If
End Sub

这有效,但它是闪烁而不理想。我更喜欢另一个答案。