以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何生成随机不重复时间?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=176817)

--  作者:lgz518
--  发布时间:2022/4/27 18:56:00
--  如何生成随机不重复时间?
如何根据“上班时间表”在“考勤表”指定“列”,随机生成时间,在同一天随机生成时间不能重复?


If e.DataCol.Name = "班别" Then 
    If e.NewValue Is Nothing Then \'
        e.DataRow("第1段") = Nothing      
    Else
        Dim dr As DataRow
        
        dr = DataTables("上班时间表").Find("[班别] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing Then 
\'            e.DataRow("第1段") = dr("第1段")
\' 取随机数据,("第1段")的时间-15分钟,提前15分钟,("第1段")的时间+10分钟,延后10分钟,
            e.DataRow("第1段") = dr(Rand.Next((("第1段") - 900), (("第1段")) + 600 ) )
          
        End If
    End If
End If
红字报错

错误所在事件:表,考勤表, DataColChanged
详细错误信息:
调用的目标发生了异常。
从字符串“第1段”到类型“Double”的转换无效。
输入字符串的格式不正确。


--  作者:有点蓝
--  发布时间:2022/4/28 9:01:00
--  
怎么样的随机时间?当天任何一秒都可以?
--  作者:lgz518
--  发布时间:2022/4/28 9:16:00
--  
老师:
《上班时间表》
班别    第1段    第2段    第3段      第4段         第5段      第6段
正常    8:00   12:00   13:00    17:00     18:00    20:00

考勤表

比如:《考勤表》的“第1段”是《上班时间表》的“班别” ,第1段” 8:00  的随机数范围(7:30,8:10),生成时间,不重复,秒可重复

班别    第1段              第2段    第3段      第4段         第5段      第6段
正常    7:30 :02      12:00   13:00    17:00     18:00    20:00
正常    7:31:03             12:00   13:00    17:00     18:00    20:00
正常    8:00 :00           12:00   13:00    17:00     18:00    20:00
正常    8:10  :01           12:00   13:00    17:00     18:00    20:00


--  作者:有点蓝
--  发布时间:2022/4/28 9:20:00
--  
意思是(7:30,8:10)这个范围内的任何一秒都可以?那么8:10  :01不是已经超出这个范围了吗?
--  作者:lgz518
--  发布时间:2022/4/28 9:27:00
--  
是的,谢谢
--  作者:z769036165
--  发布时间:2022/4/28 9:29:00
--  
用Timespan把时间转换成数字,然后随机这数字范围内的值,然后在反过来把值转为时间
--  作者:有点蓝
--  发布时间:2022/4/28 9:37:00
--  
生成随机时间值

Dim d As Date = New Date(1, 1, 1, 7, 30, 0)
Dim max As Integer = 2401
Dim 随机时间 As Date = d.AddSeconds(rand.Next(2400))
msgbox(随机时间)

至于是否重复,可以通过查表的方式,比如使用find查询是否有这个时间的数据,如果有,重新生成时间即可

--  作者:lgz518
--  发布时间:2022/4/28 10:05:00
--  
问题一:
生成随机时间值

Dim d As Date = New Date(1, 1, 1, 7, 30, 0)
Dim max As Integer = 2401
Dim 随机时间 As Date = d.AddSeconds(rand.Next(2400))
msgbox(随机时间)

至于是否重复,可以通过查表的方式,比如使用find查询是否有这个时间的数据,如果有,重新生成时间即可

这种会是固定方法,能否根据跨表的值产生成随机数

比如:
If e.DataCol.Name = "班别" Then 
    If e.NewValue Is Nothing Then \'
        e.DataRow("第1段") = Nothing      
    Else
        Dim dr As DataRow
        
        dr = DataTables("上班时间表").Find("[班别] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing Then 
\'            e.DataRow("第1段") = dr("第1段")
\' 取随机数据,("第1段")的时间-15分钟,提前15分钟,("第1段")的时间+10分钟,延后10分钟,
            e.DataRow("第1段") = dr(Rand.Next((("第1段") - 900), (("第1段")) + 600 ) )
          
        End If
    End If
End If

问题二:
Dim d As Date = New Date(1, 1, 1, 7, 30, 0)
Dim max As Integer = 2401
Dim 随机时间 As Date = d.AddSeconds(rand.Next(2400))
如何实现,《考勤表》的第1段,第2段,用上面代码,文本框1,文本框2批量赋值?







--  作者:有点蓝
--  发布时间:2022/4/28 10:25:00
--  
填入的是什么数据?
msgbox(e.NewValue)


--  作者:lgz518
--  发布时间:2022/4/28 10:34:00
--  
上实例,请老师帮助实现,谢谢
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:随机时间.zip