我有一个带有数据表视图的子表单。在父表单上,我尝试根据子数据表中选择的内容编辑记录。表单不使用主/子字段链接。
我能够使用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条记录。 Filter
和Sort
位于表单级别,无法应用于基础记录集。
我尝试使用像这样的查询创建一个新的记录集
sql = "Select * from [" & Me.RecordSource & "] where " & Replace(Me.Filter, """", "'") & " order by " & Me.OrderBy
但这里存在多个问题。 1)ADO不支持表单过滤器有时会生成的IN子句,2)订单顺序并不总是相同且可预测。
如何获取已排序的过滤记录集并仅查找用户在数据表视图中选择的记录?
我使用ADP文件连接到Sql Server。
答案 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
这有效,但它是闪烁而不理想。我更喜欢另一个答案。