⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmrwcard.frm

📁 一个功能比较完善的远程抄表软件
💻 FRM
📖 第 1 页 / 共 2 页
字号:
VERSION 5.00
Object = "{00028C01-0000-0000-0000-000000000046}#1.0#0"; "DBGRID32.OCX"
Begin VB.Form frmRWCard 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "IC卡数据采集"
   ClientHeight    =   4140
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   7230
   ControlBox      =   0   'False
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MDIChild        =   -1  'True
   MinButton       =   0   'False
   ScaleHeight     =   4140
   ScaleWidth      =   7230
   Begin VB.Data datCard 
      Connect         =   "Access"
      DatabaseName    =   ""
      DefaultCursorType=   0  '缺省游标
      DefaultType     =   2  '使用 ODBC
      Exclusive       =   0   'False
      Height          =   345
      Left            =   3360
      Options         =   0
      ReadOnly        =   0   'False
      RecordsetType   =   1  'Dynaset
      RecordSource    =   "temCardData"
      Top             =   3120
      Width           =   3855
   End
   Begin VB.CommandButton cmdReturn 
      Caption         =   "返回"
      Height          =   375
      Left            =   5520
      TabIndex        =   4
      Top             =   3600
      Width           =   1455
   End
   Begin VB.CommandButton cmdRead 
      Caption         =   "读取数据卡"
      Height          =   375
      Left            =   2400
      TabIndex        =   3
      Top             =   3600
      Width           =   1455
   End
   Begin VB.CommandButton cmdSave 
      Caption         =   "保存至数据库"
      Enabled         =   0   'False
      Height          =   375
      Left            =   3960
      TabIndex        =   2
      Top             =   3600
      Width           =   1455
   End
   Begin VB.CommandButton cmdClear 
      Caption         =   "清空数据卡"
      Height          =   375
      Left            =   840
      TabIndex        =   1
      Top             =   3600
      Width           =   1455
   End
   Begin VB.ComboBox cmbTermID 
      Height          =   300
      Left            =   1200
      Style           =   2  'Dropdown List
      TabIndex        =   0
      Top             =   3120
      Width           =   2175
   End
   Begin MSDBGrid.DBGrid grdCard 
      Bindings        =   "frmRWCard.frx":0000
      Height          =   3015
      Left            =   0
      OleObjectBlob   =   "frmRWCard.frx":0016
      TabIndex        =   5
      Top             =   0
      Width           =   7215
   End
   Begin VB.Label Label1 
      BackStyle       =   0  'Transparent
      Caption         =   "采集板序号:"
      Height          =   255
      Left            =   120
      TabIndex        =   6
      Top             =   3240
      Width           =   1095
   End
End
Attribute VB_Name = "frmRWCard"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'****************************************************************************
'人人为我,我为人人
'枕善居收藏整理
'发布日期:2007/07/09
'描    述:CBB三表户外计量系统 Ver 5.2
'网    站:http://www.Mndsoft.com/  (VB6源码博客)
'网    站:http://www.VbDnet.com/   (VB.NET源码博客,主要基于.NET2005)
'e-mail  :Mndsoft@163.com
'e-mail  :Mndsoft@126.com
'OICQ    :88382850
'          如果您有新的好的代码别忘记给枕善居哦!
'****************************************************************************
Dim curUserID As Integer
Dim curDevID As Integer

Function chkDataCard() As Boolean
Dim flag1 As String * 4
Dim flag2 As String * 4
Dim errCode As Integer
Dim i As Integer

    chkDataCard = False
        errCode = IC_Read_Hex(ByVal icdev, IC_BaseAddr + 1, 1, flag1)
        If errCode < 0 Then
            MsgBox "读卡错误,错误码:" + Format(Abs(errCode)), , "读卡"
            Exit Function
        End If
        flag1 = "&H" + Trim(flag1)
        
        errCode = IC_Read(ByVal icdev, IC_BaseAddr + 2, 1, flag2)
            If errCode < 0 Then
            MsgBox "读卡错误,错误码:" + Format(Abs(errCode)), , "读卡"
            Exit Function
        End If
        flag2 = "&H" + Trim(flag2)
        
    If Val(flag1) = &HFC And Val(flag2) = &H0 Then
        chkDataCard = True
    End If
End Function


Sub ClearCard()
Dim WriteChar As String * 2
Dim WriteBack As Integer
'status
    AppendStatusInfo "清空当前数据卡", icoBLUE
    SaveLog "清空当前数据卡", 0

    WriteChar = "ff"
    For i = 1 To 256
        WriteBack = IC_Write_Hex(icdev, IC_BaseAddr + i - 1, 1, WriteChar)
        If WriteBack < 0 Then
'status
            AppendStatusInfo "IC卡数据写错误 " + "错误码:" + Format(WriteBack), icoRED
            SaveLog "IC卡数据写错误 " + "错误码:" + Format(WriteBack), 1
            MsgBox "IC卡数据写错误" + Chr(10) + "错误码:" + Format(WriteBack)
            Exit Sub
        End If
    Next i
    
    WriteChar = "fc"
    WriteBack = IC_Write_Hex(icdev, IC_BaseAddr + 1, 1, WriteChar)
    If WriteBack < 0 Then
'status
        AppendStatusInfo "IC卡数据写错误 " + "错误码:" + Format(WriteBack), icoRED
        SaveLog "IC卡数据写错误 " + "错误码:" + Format(WriteBack), 1
        MsgBox "IC卡数据写错误" + Chr(10) + "错误码:" + Format(WriteBack)
        Exit Sub
    End If
    
    WriteChar = "00"
    WriteBack = IC_Write_Hex(icdev, IC_BaseAddr + 2, 1, WriteChar)
    If WriteBack < 0 Then
'status
        AppendStatusInfo "IC卡数据写错误 " + "错误码:" + Format(WriteBack), icoRED
        SaveLog "IC卡数据写错误 " + "错误码:" + Format(WriteBack), 1
        MsgBox "IC卡数据写错误" + Chr(10) + "错误码:" + Format(WriteBack)
        Exit Sub
    End If
    
    WriteChar = "04"
    WriteBack = IC_Write_Hex(icdev, IC_BaseAddr + 3, 1, WriteChar)
    If WriteBack < 0 Then
'status
        AppendStatusInfo "IC卡数据写错误 " + "错误码:" + Format(WriteBack), icoRED
        SaveLog "IC卡数据写错误 " + "错误码:" + Format(WriteBack), 1
        MsgBox "IC卡数据写错误" + Chr(10) + "错误码:" + Format(WriteBack)
        Exit Sub
    End If
    
    MsgBox "数据卡清空完毕!", 64, "清空数据卡"
End Sub

Function GetCardData(curTermNum As Integer, curCardUserID As Integer) As Long
Dim ReadChar As String * 4
Dim ReadBack As Integer
Dim ReadInt As Long
Dim i As Integer

    ReadInt = 0
    For i = 1 To 3  '每表占2.5个字节,读三个字节
        If (curCardUserID Mod 2) = 0 Then   '卡内用户号为偶数
            ReadBack = IC_Read_Hex(icdev, IC_BaseAddr + 4 + (curTermNum - 1) * 42 + 2 + Int((curCardUserID - 1) / 2) * 5 + 2 + i - 1, 1, ReadChar)
            If ReadBack < 0 Then
                MsgBox "IC卡数据读取错误" + Chr(10) + "错误码:" + Format(ReadBack)
                GetCardData = -1
                Exit Function
            End If
            If i = 1 Then
'                ReadChar = Trim(Right(Left(ReadChar, 2), 1))
                ReadChar = "&H" + Trim(ReadChar)
                ReadInt = ReadInt * 10 + (Val(ReadChar) And &HF)
            Else
                ReadChar = "&H" + Trim(ReadChar)
                ReadInt = ReadInt * 10 + (Val(ReadChar) And &HF0) \ 16
                ReadInt = ReadInt * 10 + (Val(ReadChar) And &HF)
            End If
        Else        '奇数
            ReadBack = IC_Read_Hex(icdev, IC_BaseAddr + 4 + (curTermNum - 1) * 42 + 2 + Int((curCardUserID - 1) / 2) * 5 + i - 1, 1, ReadChar)
            If ReadBack < 0 Then
                MsgBox "IC卡数据读取错误" + Chr(10) + "错误码:" + Format(ReadBack)
                GetCardData = -1
                Exit Function
            End If
            If i = 3 Then
'                ReadChar = Trim(Left(ReadChar, 1))
                ReadChar = "&H" + Trim(ReadChar)
                ReadInt = ReadInt * 10 + (Val(ReadChar) And &HF0) \ 16
            Else
                ReadChar = "&H" + Trim(ReadChar)
                ReadInt = ReadInt * 10 + (Val(ReadChar) And &HF0) \ 16
                ReadInt = ReadInt * 10 + (Val(ReadChar) And &HF)
            End If
        End If
    Next i
    GetCardData = ReadInt
End Function

Function GetTerm(curNum As Integer) As Integer
Dim ReadChar As String * 2
Dim ReadBack As Integer
Dim ReadInt As Integer
Dim i As Integer

    ReadInt = 0
    For i = 1 To 2
        ReadBack = IC_Read_Hex(icdev, IC_BaseAddr + 4 + (curNum - 1) * 42 + i - 1, 1, ReadChar)
        If ReadBack < 0 Then
            MsgBox "IC卡数据读取错误" + Chr(10) + "错误码:" + Format(ReadBack)
            GetTerm = -1
            Exit Function
        End If
        ReadChar = Trim(ReadChar)
        ReadInt = ReadInt * 10 + Val(ReadChar)
    Next i
    GetTerm = ReadInt
End Function

Function GetTermSum() As Integer
Dim ReadBack As Integer
Dim ReadChar As String * 4
Dim NextTermAddr As Integer

    ReadBack = IC_Read_Hex(icdev, IC_BaseAddr + 3, 1, ReadChar)
    If ReadBack < 0 Then
        MsgBox "IC卡数据读取错误" + Chr(10) + "错误码:" + Format(ReadBack)
        GetTermSum = 0
        Exit Function
    End If
    ReadChar = "&H" + Trim(ReadChar)
    NextTermAddr = Val(ReadChar)
    GetTermSum = (NextTermAddr - 4) / 42    '每终端占&H2A(42)byte,16个表,每表20BIT,终端号占2字节
End Function

Function ReadCard() As Boolean
Dim TermSum As Integer
Dim curTerm As Integer
Dim curCardUserID As Integer
Dim curDevName As String
Dim CardValue As Long
Dim i As Integer
Dim SQL As String
Dim rcTemUser As Recordset
Dim rcDevsMap As Recordset
Dim curType As Integer

    cmbTermID.Clear
    Set rcDevsMap = dbCbb.OpenRecordset("DevsMap", dbOpenSnapshot)
    
    TermSum = GetTermSum()
    If TermSum <= 0 Then
'status
        AppendStatusInfo "当前数据卡中没有有效的终端数据", icoBLUE
        SaveLog "当前数据卡中没有有效的终端数据", 0
        MsgBox "当前数据卡中没有有效的终端数据", 64, "读取数据卡"
        ReadCard = False
        Exit Function
    End If
    
    cmbTermID.AddItem "全部"
    For i = 1 To TermSum
        curTerm = GetTerm(i)
        cmbTermID.AddItem curTerm
        
        If curTerm <= 0 Then
            GoTo Next_Term
        End If
        
        SQL = "select UserMap.BuildID,UserMap.Unit,UserMap.Door,UserDev.CardUserID,UserDev.devType "
        SQL = SQL + "from UserMap,UserDev "
        SQL = SQL + "where UserMap.UserID=UserDev.UserID "
        SQL = SQL + "and UserDev.CardTermID=" + Format(curTerm) + " "
'        SQL = SQL + "and UserDev.devType=" + Format(curType) + " "
        SQL = SQL + "order by UserDev.CardUserID "
        
        Set rcTemUser = dbCbb.OpenRecordset(SQL)
        
        If rcTemUser.EOF Or rcTemUser.RecordCount <= 0 Then
            GoTo Next_Term
          End If
        
'status
        AppendStatusInfo "读终端" & curTerm & "卡数据", icoBLUE
        SaveLog "读终端" & curTerm & "卡数据", 0
        rcTemUser.MoveLast
        rcTemUser.MoveFirst
        For curCardUserID = 1 To rcTemUser.RecordCount

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -