VB6:拆分记录集代码匹配数组,获取Beacons表描述文本
问题说明
- 有一张名为
beacons的表,包含PrimaryCode、SecondaryCode、Description三个字段 - 需要从
data表获取完整代码(示例:000A0A003),把它拆成左6位和右3位 - 用拆分后的两个值,匹配数组
ABeacons里的PrimaryCode和SecondaryCode,拿到对应的Description - 试了下面这段VBA代码,但运行不正常:
If IsEmpty(VcurrentRecord(0).VOBeaconCodePrimary) = False Then fullvalue = (VcurrentRecord(0).VOBeaconCodePrimary) leftvalue = Left$(VcurrentRecord(0).VOBeaconCodePrimary, 6) rightvalue = Right$(VcurrentRecord(0).VOBeaconCodePrimary, 3) If ABeacons(I).PrimaryCode = leftvalue Then 'MsgBox ("found left value" & leftvalue) If leftvalue = ABeacons(I).PrimaryCode And rightvalue = ABeacons(I).SecondaryCode Then MsgBox (ABeacons(I).Description) End If End If End If
代码问题修复
这段代码的核心问题:
- 未遍历数组:直接使用
ABeacons(I)但未对索引I做循环遍历,根本没检查数组内的所有元素 - 冗余判断:外层已经判断主码匹配,内层又重复写了相同的主码判断逻辑,完全多余
- 空值判断可简化:
IsEmpty(...) = False改成Not IsEmpty(...)更简洁直观
修复后的代码:
' 遍历数组ABeacons的所有元素 For I = LBound(ABeacons) To UBound(ABeacons) If Not IsEmpty(VcurrentRecord(0).VOBeaconCodePrimary) Then fullvalue = VcurrentRecord(0).VOBeaconCodePrimary ' 拆分完整代码为左6位、右3位 leftvalue = Left$(fullvalue, 6) rightvalue = Right$(fullvalue, 3) ' 同时匹配主码和副码 If ABeacons(I).PrimaryCode = leftvalue And ABeacons(I).SecondaryCode = rightvalue Then MsgBox ABeacons(I).Description ' 找到匹配项就退出循环,避免不必要的遍历 Exit For End If End If Next I
注意事项
- 要确保
ABeacons数组已经正确从beacons表加载了所有数据,数组结构需和表字段对应 - 如果完整代码长度固定为9位,拆分逻辑没问题;如果长度不固定,建议先加
If Len(fullvalue) = 9 Then判断,防止拆分出错 - 找到匹配后用
Exit For跳出循环,能提升运行效率,除非你需要找出所有匹配的描述
内容的提问来源于stack exchange,提问作者ChrisR
相关产品推荐
相关产品推荐

