【问题标题】:Get recordset from selected records on datasheet从数据表上的选定记录中获取记录集
【发布时间】:2014-02-12 23:31:25
【问题描述】:

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

我能够使用 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 条记录。 Filters 和 Sorts 处于表单级别,不能应用于基础记录集。

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

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

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

我怎样才能得到一个排序、过滤的记录集并只找到用户在数据表视图中选择的那些记录?

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

【问题讨论】:

    标签: ms-access ado


    【解决方案1】:

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

    • 向我的子表单添加了一个未绑定(到我的记录集)复选框控件。
    • 将其命名为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
    

    这可行,但它闪烁且不理想。我更喜欢另一个答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 2017-04-22
      • 2018-03-18
      • 1970-01-01
      相关资源
      最近更新 更多