设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1626|回复: 0
打印 上一主题 下一主题

[Access本身] [讨论] (续) 用Access做套“一卡通”管理

[复制链接]
跳转到指定楼层
1#
发表于 2006-9-25 15:55:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                                                     用Access做套“一卡通”管理(续)

续上一篇:http://www.office-cn.net/forum.php?mod=viewthread&tid=47942

五. 读卡器的以太网接口

     上次简单介绍了Access通过电脑串口连接读卡器的例子。一般RS232传输距离不过数米,通常就用RS232转换为RS485作长距离传输这样可以达到一千米左右。由于以太网传输更为方便,传输距离更远,所以读卡器一般在RS232的基础上加装一个TCP/IP转换组件,读卡器的数据就非常方便地通过网络传给电脑终端了。近来这种以太网通讯传输数据的读卡器就成为读卡器的主流发展方向了。

六. Access、Winsocket控件、TCP/IP协议

     在Access中使用网络通讯最简单有效的办法就是引用 Winsocket控件 ——Mswinsck.ocx 。Winsocket是个常用通讯控件,在Access2002控件引用列表中存在但需要版权注册,那么安装一次VB6.0,就算安装后再卸载也行,版权问题就自然解决了。(有关Winsockt控件的应用资料在安装MSDN中有详细说明。)

      在Access程序中将Winsockve设定工作在TCP/IP协议模式 ,通过握手应答机制数据可以可靠地得以传递。每个读卡器都设置有一个IP地址。每次读卡后通过设定端口向网络的特定IP地址发送读卡器的设备号、IP地址号和卡号;Access编程中将其中一个控件-Winsocket0设定为侦听状态,当侦听到有关读卡器连接请求即转由下一控件Winsocket(n)负责连接,Winsocket0再次侦听。当已经连接的控件接受到读卡器传来的数据后随即发送接受确认应答,读卡器收到接受完成确认后进入处理下次刷卡。

七.  ACCESS用TCP/IP协议连接的一个例子:

1.引用MicroSoft Winsock Control 6.0                  '引用Mswinsck.ocx
2.在窗口中新建n个Winsock控件——Winsock0(侦听) 和 Winsock1……n(接受)
   
Private Sub Form_Load()                                   '加载窗体
    Winsock0.LocalPort = 3000                            '读卡器设定端口
    Winsock0.Listen                                             'Socket在程序启动时监听端口
   
End Sub


                                                                             '偶发故障后继续侦听
Private Sub Winsock0_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal

HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    Winsock0.Close
    Winsock0.Listen                                                '关闭连接后继续监听
End Sub

Private Sub Winsock0_ConnectionRequest(ByVal requestID As Long) '当读卡器请求连接时出现事件
On Error GoTo Err_错误
    Dim sID As Byte
    Dim sIP As String
    sIP = Winsock0.RemoteHostIP                           '获得终端IP地址 查询读卡器序号 sID
    sID = CurrentProject.Connection.Execute("select ID from yyd where IP =" & Chr$(34) & sIP & Chr$(34))("ID")
                                                                              '与相应终端重新建立连接
    If Me("winsock" & sID).State <> sckClosed Then Me("winsock" & sID).Close
    Me("winsock" & sID).Accept requestID
                                                                              '保持侦听状态
    If Winsock0.State <> sckClosed Then Winsock0.Close: Winsock0.Listen

    Me.状态.Selected(sID) = True                            '显示读卡器已经上线连接
         
Exit_错误:
    Exit Sub

Err_错误:
    Winsock0.Close
    Winsock0.Listen
    Resume Exit_错误
End Sub


Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) '1 (数据抵达事件)

    Dim rb As Byte
    Dim B As Integer
    Dim Content As String
    For B = 1 To Winsock1.BytesReceived
    Winsock1.GetData rb, vbByte, 1                        '接收内容并指定类型
    Content = Content + " " + String(2 - Len(Hex(rb)), "0") + Hex(rb)
    Next B
    Content = Trim(Content)                                     '去掉前后空格
   
'…… 此处按各自的要求处理获得的数据包  Content

    Me("Winsock1").SendData &HFF                        '记录收到后向读卡器发送确认应答

End Sub

   如果连接读卡器不多,在窗体上多用
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-9 06:12 , Processed in 0.091324 second(s), 24 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表