Foxtable(狐表)用户栏目专家坐堂 → 车辆管理数据库(带串口的)的一个功能问题


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

主题:车辆管理数据库(带串口的)的一个功能问题

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


加好友 发短信
等级:婴狐 帖子:25 积分:318 威望:0 精华:0 注册:2012/2/10 21:02:00
车辆管理数据库(带串口的)的一个功能问题  发帖心情 Post By:2012/7/16 21:44:00 [只看该作者]

     要做一套车辆管理系统(带串口的),我已经做到串口刷卡有数据就接收,然后把接收的数据放入表中(这个表有接收串口数据的时间),现在想做这样的功能,要求每张卡20分钟内不能重复刷卡,20分钟后才可以再次刷卡,输入数据到表中。如何实现间隔一段时间才能再次输入数据到表中,请高手指教!!!

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


加好友 发短信
等级:狐神 帖子:6887 积分:43621 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2012/7/16 22:21:00 [只看该作者]

如果是请教,应发附件。

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


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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57640 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2012/7/17 7:53:00 [只看该作者]

楼主的要求到是没有碰到过,过一会做个例子看看.

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/7/17 8:10:00 [只看该作者]

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

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

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

 


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


加好友 发短信
等级:等待验证 帖子:3855 积分:20692 威望:0 精华:5 注册:2012/6/21 14:03:00
  发帖心情 Post By:2012/7/17 8:11:00 [只看该作者]

用户已被锁定

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57640 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By: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


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57640 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2012/7/17 9:11:00 [只看该作者]

对哦.

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


加好友 发短信
等级:三尾狐 帖子:732 积分:5491 威望:0 精华:14 注册:2011/8/28 12:49:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/7/17 9:20:00 [只看该作者]

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

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


 回到顶部
总数 13 1 2 下一页