Foxtable(狐表)用户栏目专家坐堂 → 如何生成随机不重复时间?


  共有5419人关注过本帖树形打印复制链接

主题:如何生成随机不重复时间?

帅哥哟,离线,有人找我吗?
lgz518
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
如何生成随机不重复时间?  发帖心情 Post By: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”的转换无效。
输入字符串的格式不正确。


 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2022/4/28 9:27:00 [显示全部帖子]

是的,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By: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批量赋值?







 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2022/4/28 10:34:00 [显示全部帖子]

上实例,请老师帮助实现,谢谢
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:随机时间.zip



 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2022/4/28 11:07:00 [显示全部帖子]

二个方法
方法1,从《考勤表》从《上班时间表》按“班别”,取值,取值是可以,但根据《上班时间表》按“班别”,取值,从生成随机时间。
方法2,窗口上按键单击事件,根据窗口的查询,文本档的值条件,《考勤表》生成随机时间。

图片点击可在新窗口打开查看此主题相关图片如下:随机时间.jpg
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2022/4/28 14:28:00 [显示全部帖子]

Dim drs As List(Of DataRow)
drs = DataTables("考勤表").Select("[班别] = 'ComboBox1' And [工作日类型]= 'ComboBox2'")

For Each dr As DataRow In drs
    
    dr("第1段") = Rand.Next((("文本1") - ("文本7")), (("文本1") - ("文本8"))) 
     dr("第2段") = Rand.Next((("文本2") - ("文本7")), (("文本1") - ("文本8"))) 
     dr("第3段") = Rand.Next((("文本3") - ("文本7")), (("文本1") - ("文本8"))) 
     dr("第4段") = Rand.Next((("文本4") - ("文本7")), (("文本1") - ("文本8"))) 
     dr("第5段") = Rand.Next((("文本5") - ("文本7")), (("文本1") - ("文本8"))) 
     dr("第5段") = Rand.Next((("文本6") - ("文本7")), (("文本1") - ("文本8"))) 
    
Next

老师,如何实现,红字代码是随机时间?狐表有没有“取随机数(范围)”的函数?


 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2022/4/28 14:59:00 [显示全部帖子]

问题一:
看您的实例,写2401是一个时间,不是什么时间,是8:00的意思?如果是那24个小时,还分钟是其数字是多少?

问题二:
没有随机时间这种东西,只能是指定一个开始时间,然后增加随机的秒数
那就是固定写法,没有让别人来随意设定时间,比如文本框的值?
问题三:

Dim drs As List(Of DataRow)
drs = DataTables("考勤表").Select("[班别] = 'ComboBox1' And [工作日类型]= 'ComboBox2'")

For Each dr As DataRow In drs
    
    dr("第1段") = Rand.Next((("文本1") - ("文本7")), (("文本1") - ("文本8"))) 
     dr("第2段") = Rand.Next((("文本2") - ("文本7")), (("文本1") - ("文本8"))) 
     dr("第3段") = Rand.Next((("文本3") - ("文本7")), (("文本1") - ("文本8"))) 
     dr("第4段") = Rand.Next((("文本4") - ("文本7")), (("文本1") - ("文本8"))) 
     dr("第5段") = Rand.Next((("文本5") - ("文本7")), (("文本1") - ("文本8"))) 
     dr("第5段") = Rand.Next((("文本6") - ("文本7")), (("文本1") - ("文本8"))) 
    
Next

您提供网址我看,红字代码,也以此凑了,但执行不了,请您帮助实现,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2022/4/28 18:31:00 [显示全部帖子]

问题一:下面是生成随机数,如何实现时间?

根据"开始时间和"结束时间",生成随机时间
Select Case e.DataCol.Name
    Case "开始时间, "结束时间"    '比如:开始时间:7:30, "结束时间:8:10
        Dim d As Double = Rand.Next(e.DataRow("结束时间") * 100, e.DataRow("开始时间") * 100) / 100
        e.DataRow("卡一时间") = d

End Select

问题二:网上找看不是很明白

VB生成某范围内的随机时间

Private Sub Command1_Click()
Dim x As Date, x1 As Date, x2 As Date
If IsDate(Text1.Text) And IsDate(Text2.Text) Then
x1 = CDate(Text1.Text)
x2 = CDate(Text2.Text)
If x1 < 1 And x2 < 1 And x2 > x1 Then
Randomize
Do
x = CDate(Rnd)
Loop Until x >= x1 And x <= x2
MsgBox x
Else
MsgBox "输入的时间格式有误!"
End If
Else
MsgBox "输入的时间格式有误!"
End If
End Sub

这是一种比较巧妙的实现方法,利用的是时间变量的时分秒部分和随机函数Rnd的值
都是大于等于0小于1的数这个特性。

h1=hour(text1):h2=hour(text2)
m1=minute(text1):m2=minute(text2)
s1=second(text1):s2=second(text2)
h=int(rnd*(h2-h1+1))+h1
m=int(rnd*(m2-m1+1))+m1
s=int(rnd*(s2-s1+1))+s1
text3=timeserial(h,m,s)



问题三,关于我也没看懂【((("文本1") - ("文本7")), (("文本1") - ("文本8"))) 】这个表达的是什么意思
意思是如图


图片点击可在新窗口打开查看此主题相关图片如下:随机时间1.jpg
图片点击可在新窗口打开查看




 回到顶部