一个VB 的优化案例 关劲松 PMP 关于测试软件,ComboBox读取数据库生成下拉列表的算法简化。 原有代码: 要遍历整个表的数据。使用了两次嵌套循环,加if判断,加标志位处理。而且代码繁复,不易理解维护。 Combo1(1).Clear Combo1(1).AddItem 6, 0 strSelect

一个VB 的优化案例

关劲松 PMP

关于测试软件,ComboBox读取数据库生成下拉列表的算法简化。

原有代码:
要遍历整个表的数据。使用了两次嵌套循环,加if判断,加标志位处理。而且代码繁复,不易理解维护。
Combo1(1).Clear
Combo1(1).AddItem "6", 0
strSelect = "select * from Code_21 ORDER BY TX_MIN_FREQ_min asc "
Set rs = daev.sys.Execute(strSelect)

if rs.RecordCount > 0 Then
exist_flag = False
rs.MoveFirst
For i = 1 To rs.RecordCount
For j = 0 To Combo1(1).ListCount - 1
If Combo1(1).List(j) = rs.Fields("frequencyband") Then
exist_flag = True
End If
Next j
If exist_flag = False Then
Combo1(1).AddItem rs.Fields("frequencyband"), Combo1(1).ListCount
ElseIf exist_flag = True Then
exist_flag = False
End If
rs.MoveNext
Next i
End If

Combo1(1).Text = Combo1(1).List(0)

改进代码:
关键使用SQL中distinct 仅显示不相同的记录字段,同时用Clng将数据库定义为文本的frequencyband字段,类型转换为长整形,这样distinct后就可以自动排序。之后的代码就可以简化为一次循环,遍历返回的数据集即可。而且返回的数据集较小。
Access的别名定义也要留意,不能与当前表的字段重名。因此需要将frequencyband定义为frequency。

strSelect = "select distinct CLng(frequencyband) as frequency from Code_21 "
Set rs = daev.sys.Execute(strSelect)

Combo1(1).Clear
If rs.RecordCount > 0 Then
rs.MoveFirst
For i = 1 To rs.RecordCount
Combo1(1).AddItem rs.Fields("frequency"), Combo1(1).ListCount
rs.MoveNext
Next i
End If

Combo1(1).Text = Combo1(1).List(0)

09-05 02:05