以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  车辆管理数据库(带串口的)的一个功能问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=21546)

--  作者:fanwei1111
--  发布时间:2012/7/16 21:44:00
--  车辆管理数据库(带串口的)的一个功能问题
     要做一套车辆管理系统(带串口的),我已经做到串口刷卡有数据就接收,然后把接收的数据放入表中(这个表有接收串口数据的时间),现在想做这样的功能,要求每张卡20分钟内不能重复刷卡,20分钟后才可以再次刷卡,输入数据到表中。如何实现间隔一段时间才能再次输入数据到表中,请高手指教!!!
--  作者:lihe60
--  发布时间:2012/7/16 22:21:00
--  

如果是请教,应发附件。

如果是定制软件,应留下你的联系方式。


--  作者:blackzhu
--  发布时间:2012/7/17 7:53:00
--  
楼主的要求到是没有碰到过,过一会做个例子看看.
--  作者:狐狸爸爸
--  发布时间:2012/7/17 8:10:00
--  

如果每张卡都有ID,那么每次刷卡记录一下刷卡时间,并检测最近一次刷卡的时间,如果没有超过20分钟,就给出提示,并拒绝登记本次刷卡。

关于如何找出最后一次刷卡的数据,可以看看:

http://www.foxtable.com/help/topics/0396.htm

 


--  作者:blackzhu
--  发布时间:2012/7/17 8:13:00
--  
代码如下,你试试:

If e.DataTable.DataRows.Count = 0 Then \'如果是一个空表
    Return \'那么返回
End If
Dim dr As DataRow = e.DataTable.DataRows(e.DataTable.DataRows.Count - 1) \'获得最后一行
Dim d As Date = Date.Now   \'定义目前的时间
Dim i As Integer = DateDiff("n",d,dr("第一列"))  \'获取两个时段的时间
If i < 20 Then   \'如果小于20分钟
    MessageBox.Show("不足20分钟,不能新增行")  \'提示 时间不到不能新增
    e.Cancel = True    \'取消新增
End If

BeforeAddDataRow  放在表事件中执行

增加一行之前执行。



 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:不到时间不能新增.foxdb


--  作者:狐狸爸爸
--  发布时间:2012/7/17 8:22:00
--  
呵呵,老朱的代码有不足,你这样的话,20分钟内只能刷一张卡,而不是一张卡20分钟内只能刷一次。
 
比较合理的大概如此:

Dim id As String = “本次刷卡获得的ID”
dr = DataTables("xxx").Find("卡ID = \'" & Id & “\'", "刷卡时间 Desc") \'找出最后一次订购PD01产品的记录
if dr IsNot Nothing Then
        Dim dt As Date = dr("刷卡时间")
        if (Date.Now - dt) .TotalSeconds < 20 Then
            MessageBox.Show("一张卡20分钟内只能刷一次")
            Return
        End If
End f
dr = DataTables("xxx").AddNew
dr("卡ID") =ID
dr("刷卡时间") = Date.Now
[此贴子已经被作者于2012-7-17 8:22:48编辑过]

--  作者:blackzhu
--  发布时间:2012/7/17 9:11:00
--  
对哦.
--  作者:飞
--  发布时间:2012/7/17 9:16:00
--  

这个用SQLCommand会好一点吧,因为可能不同的刷卡机连接不同的客户端,直接取后台数据来对比

 

 

Dim SQLCmd As New SQLCommand

SQLCmd.ConnectionName = "数据源"

SQLCmd.CommandText = "SELECT COUNT([_Identify]) FROM 表名 WHERE ID = \'" & "接收到的卡号" & "\' AND DATEDIFF(MI,刷卡时间,GETDATE()) < 20"

Dim Cnt As Integer = SQLCmd.ExecuteScalar

If Cnt > 0 Then Msgbox("您已经在20分钟内刷过卡啦,不能再重复刷了!",64,"提示") : Return

[此贴子已经被作者于2012-7-17 9:22:29编辑过]

--  作者:狐狸爸爸
--  发布时间:2012/7/17 9:20:00
--  

嗯,如果几台电脑的话,只能用sql判断的了。

不过也可以刷卡前AppendLoad一下这个用户的最新数据。


--  作者:blackzhu
--  发布时间:2012/7/17 10:53:00
--  
如果是外部数据源,应该用飞的