就是说用鼠标单击某一格单元格的时候,RecordSet的游标会不会同时移动到对应该行的Record?我发现有时候是同步的,有时候又不是。晕了……不同步的时候,我写了下面的代码来手动的维持同步Private Sub dgProduct_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Dim row As Long
Set db_rst = deSell.rstblProduct
row = dgProduct.row
db_rst.MoveFirst
db_rst.Move row '<-----Stack Overflow!!!
End Sub有时候工作的很好,有时候又会出现堆栈溢出。这又是为什么?db_rst.Move到底会不会引发DataGrid的RowColChange事件?
Dim row As Long
Set db_rst = deSell.rstblProduct
row = dgProduct.row
db_rst.MoveFirst
db_rst.Move row '<-----Stack Overflow!!!
End Sub有时候工作的很好,有时候又会出现堆栈溢出。这又是为什么?db_rst.Move到底会不会引发DataGrid的RowColChange事件?
Call dgProduct_RowColChange(0,0)
End SubPrivate Sub dgProduct_RowColChange()
'......你的代码
End Sub
--------------------------------------------------------
单击某一单元格的时候,首先触发的是Click事件(记录集还没移动),然后才触发RowColChange事件(记录集已经移动了)
------------------------------------Private Sub dgProduct_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Dim row As Long
Set db_rst = deSell.rstblProduct
row = dgProduct.row
db_rst.MoveFirst
db_rst.Move row '<-----执行这句的时候,记录集会移动,同时会触发RowColChange事件,所以相当一个死循环在执行
End Sub
' Dim row As Long
' Set db_rst = deSell.rstblProduct
' row = dgProduct.row
' db_rst.MoveFirst
' db_rst.Move row
Debug.Print db_rst.Fields(0).Value
End Sub结果我单击单元格时出现3021的Runtime Error,RecordSet还处于EOF或者BOF状态,Cursor没有移动。
Dim row As Long
Set db_rst = deSell.rstblProduct
row = dgProduct.row
db_rst.MoveFirst
db_rst.Move row
Debug.Print db_rst.Fields(0).Value
End Sub这可以说明:
1. 发生RowColChange事件时,Cursor没有移动,而必须手动移动
2. 没有发生溢出,说明Move方法没有引发RowColChange事件
我发现,当我点的是固定列(也就是第1列,没有数据的那列)时,Move方法会造成死循环,知道提示错误,推出
如果点的是有数据的单元格,Move方法不会出发RowColChange事件
db_rst.filter="关键字='" & 当前行关键字的值 & "'"