以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  解释代码  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=175166)

--  作者:lisangyu
--  发布时间:2022/2/22 17:00:00
--  解释代码

蓝总:以下是论坛<驾驶员理论考试模拟系统》的关于如何组组题的代码,就这个实现看的云里雾里,能不能将黄色部分关键代码解释下


Tables("试题库").Redraw = False

Tables("试题库").Filter = ""

Tables("试题库").Sort = ""

For i As integer = 0 to Tables("试题库").rows.count -1

    Tables("试题库").Rows(i)("随机值") = Rand.Next(10000)

Next \'排随机值

For Each dr As DataRow in DataTables("试题库").DataRows

    dr("信息") = Nothing

    dr("序号") = Nothing

Next \'清空指定列的数据

Dim fls As List(Of String) = DataTables("试题库").GetUniqueValues("","分类")

For Each fl As String In fls

    \'获得该分类的全部行

    Dim drs As List(Of DataRow) = DataTables("试题库").Select("[分类] = \'" & fl & "\'", "随机值")

    For n As integer = 0 To drs.Count - 1 \'遍历所有行

        drs(n)("组题") = n + 1 \'编号排序

    Next

Next

Dim Str As String

For Each fl As String In fls

    Dim dr As DataRow = DataTables("组题方式").Find("[试题] = \'" & fl & "\'")

    \'组合字符串

    str = str & " or [分类] = \'" & fl & "\' And [组题] <= " & dr(Vars("车型"))*100

Next \'筛选

Tables("试题库").Filter = str.SubString(4)

Tables("试题库").Sort = "随机值,题型"

For i As integer = 0 to Tables("试题库").rows.count -1

    Tables("试题库").Rows(i)("序号") = i + 1

Next \'对序号我按筛选行的顺序赋值

Tables("试题库").Redraw = True


--  作者:有点蓝
--  发布时间:2022/2/22 17:11:00
--  
这个最好是问做这个系统的人了,我也看的云里雾里


--  作者:lisangyu
--  发布时间:2022/2/23 9:57:00
--  


Dim Str As String

For Each fl As String In fls

    Dim dr As DataRow = DataTables("组题方式").Find("[试题] = \'" & fl & "\'")

    \'组合字符串

    str = str & " or [分类] = \'" & fl & "\' And [组题] <= " & dr(Vars("车型"))*100

Next \'筛选

Tables("试题库").Filter = str.SubString(4)

Tables("试题库").Sort = "随机值,题型"


蓝总:Tables("试题库").Filter = str.SubString(4)  从第四个字符开始 返回所有字符串,对试题库进行赛选,这个4从得来的?


--  作者:有点蓝
--  发布时间:2022/2/23 10:01:00
--  
拼接字符串后,去掉最前面的or

For Each fl As String In fls

    Dim dr As DataRow = DataTables("组题方式").Find("[试题] = \'" & fl & "\'")

    \'组合字符串

    str = str & " or [分类] = \'" & fl & "\' And [组题] <= " & dr(Vars("车型"))*100

Next \'筛选


可以这样测试一下,看效果

Dim Str As String

for i as integer = 0 to 2

str = str & " or 第一列=" & i

next

msgbox("没有去掉前的结果是:" & str)

msgbox("去掉后的结果是:" & str.SubString(4))