欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

ComboBox读取数据库生成下拉列表的算法简化

程序员文章站 2022-04-07 19:18:13
...

一个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)