如何快速在指定的栏col中查找所需要的首个符合条件的记录,
通常使用for进行的查询太慢了。
我知道在vsflexgrid中有个.FindRow的方法,速度非常快,
不知其是用的什么好的算法进行的。各位有没有什么好的方法。谢谢!
通常使用for进行的查询太慢了。
我知道在vsflexgrid中有个.FindRow的方法,速度非常快,
不知其是用的什么好的算法进行的。各位有没有什么好的方法。谢谢!
解决方案 »
- 关于combobox的listindex的问题
- MSFlexGrid1从剪贴板读取数据后Row和Col不会自动增加并显示数据
- 请问VB中如何为文件夹创建快捷方式?
- 急---datareport中 下标越界???
- 每天顶一次,因为这是在China(公益)
- with……end with是如何实现它的功能?
- 请教高手:怎样用VB控制系统音量控制中,麦克风属性的静音选项.谢谢
- 请问大家如何制作同时容纳图标和文字的工具栏?
- 怎么样才能已最快速度了解全面的API?太大了。我不知道怎么学啊~给点经验行吗?
- 请问大师们这道题的输出结果是什么
- run-time error '429'
- 刚才的问题解决了,现在再问一个,谢谢大家
我需要的查找结果是,获得指定栏col符号条件的行row所在的位置例如我要查找name为"小明"的行name information
张三 ************
李四 ************
王佬六 ************
小明 ************小华 ************
... ............
返回的值为4,因为小明在第四行。
以上我通常使用
for
if name="小明" then
...
exit for
end if
next
的方法,但如果数据量太多、查询结果较为靠后的话,查询的速度将非常慢.请各位帮忙想想有没有更快速的办法。谢谢!
Dim sColumn As String, i As Long
With MSFlexGrid1
'获取一整列
.Col = 1
.ColSel = 1
.Row = 1
.RowSel = .Rows - 1
sColumn = .Clip
'格式化以便查找
sColumn = vbCr & Replace(sColumn, vbLf, vbNullString) & vbCr
'查找
i = InStr(sColumn, vbCr & "小明" & vbCr)
If i > 0 Then
Debug.Print "行号:", UBound(Split(Left(sColumn, i), vbCr))
End If
End With
End Sub
我的电脑赛扬1.5,测试两万条数据,根本感觉不到延迟
Private Sub Command1_Click()'填充测试数据
Dim i As Long
MSHFlexGrid1.Redraw = False
For i = 1 To 20000
MSHFlexGrid1.AddItem CStr(i) & vbTab & CStr(i)
Next
MSHFlexGrid1.Redraw = True
End SubPrivate Sub Command2_Click()'查找倒数第二条
Dim i As Long
For i = 1 To 20000
If MSHFlexGrid1.TextMatrix(i, 1) = "19999" Then
MsgBox i & "--" & MSHFlexGrid1.TextMatrix(i, 1)
End If
Next
End Sub
我不明白我以前使用这种办法测试为何会感觉很慢,我将再次进行测试。谢谢yachong !
就一次循环
假设你的GRID有6列,你要找的是第3列
那么从大致代码为:
WITH GRID1
N=.ROWS*COLS-1
FOR I=2 TO N STEP 6
IF .TEXTARRAY(I)="..." THEN ...
NEXT
END WITH
假设满足条件时的I=X
那么X/6就是行数
Private Sub Command2_Click() '查找倒数第二条
Dim i As Long
For i = 1 To Grid1.Rows - 1
If Grid1.TextMatrix(i, 1) = CStr(Grid1.Rows - 2) Then
MsgBox i & "--" & Grid1.TextMatrix(i, 1)
Exit For
End If
Next
End Sub
Private Sub Command3_Click()
With Grid1
N = .Rows * .Cols - 1
For i = 2 To N Step 4
If .TextArray(i) = CStr(Grid1.Rows - 2) Then
MsgBox "找到了" & .TextArray(i)
Exit For
End If
Next
End With
End Sub结果找查的时间相同,都大约为10秒钟。所以以上的方法速度应该是相同的。
测试代码无所谓,正式代码就必须注意了