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

📄 frmmain.frm

📁 <Visual Basic 数据库开发实例精粹(第二版)>一书首先介绍了Visual Basic(简称VB)开发的技巧和重点技术
💻 FRM
📖 第 1 页 / 共 4 页
字号:
VERSION 5.00
Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "mswinsck.ocx"
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "mscomctl.ocx"
Begin VB.Form FrmMain 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "图书馆管理系统服务器"
   ClientHeight    =   3990
   ClientLeft      =   45
   ClientTop       =   360
   ClientWidth     =   7710
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   ScaleHeight     =   3990
   ScaleWidth      =   7710
   StartUpPosition =   3  '窗口缺省
   Begin MSComctlLib.StatusBar StatusBar1 
      Align           =   2  'Align Bottom
      Height          =   375
      Left            =   0
      TabIndex        =   3
      Top             =   3615
      Width           =   7710
      _ExtentX        =   13600
      _ExtentY        =   661
      _Version        =   393216
      BeginProperty Panels {8E3867A5-8586-11D1-B16A-00C0F0283628} 
         NumPanels       =   1
         BeginProperty Panel1 {8E3867AB-8586-11D1-B16A-00C0F0283628} 
            Alignment       =   1
            Object.Width           =   3528
            MinWidth        =   3528
            Text            =   "客户端连接数:"
            TextSave        =   "客户端连接数:"
         EndProperty
      EndProperty
   End
   Begin VB.CommandButton CmdCancel 
      Cancel          =   -1  'True
      Caption         =   "退出"
      Height          =   375
      Left            =   6360
      TabIndex        =   2
      Top             =   3120
      Width           =   1215
   End
   Begin MSComctlLib.ListView LvCnn 
      Height          =   2535
      Left            =   120
      TabIndex        =   0
      Top             =   480
      Width           =   7455
      _ExtentX        =   13150
      _ExtentY        =   4471
      View            =   3
      Arrange         =   2
      Sorted          =   -1  'True
      LabelWrap       =   -1  'True
      HideSelection   =   -1  'True
      FullRowSelect   =   -1  'True
      GridLines       =   -1  'True
      _Version        =   393217
      ForeColor       =   -2147483640
      BackColor       =   -2147483643
      BorderStyle     =   1
      Appearance      =   1
      NumItems        =   4
      BeginProperty ColumnHeader(1) {BDD1F052-858B-11D1-B16A-00C0F0283628} 
         Text            =   "管理员ID"
         Object.Width           =   2893
      EndProperty
      BeginProperty ColumnHeader(2) {BDD1F052-858B-11D1-B16A-00C0F0283628} 
         SubItemIndex    =   1
         Text            =   "连接状态"
         Object.Width           =   2540
      EndProperty
      BeginProperty ColumnHeader(3) {BDD1F052-858B-11D1-B16A-00C0F0283628} 
         SubItemIndex    =   2
         Text            =   "时间"
         Object.Width           =   4304
      EndProperty
      BeginProperty ColumnHeader(4) {BDD1F052-858B-11D1-B16A-00C0F0283628} 
         SubItemIndex    =   3
         Text            =   "通道号"
         Object.Width           =   2117
      EndProperty
   End
   Begin MSWinsockLib.Winsock SockToCln 
      Index           =   0
      Left            =   7080
      Top             =   0
      _ExtentX        =   741
      _ExtentY        =   741
      _Version        =   393216
   End
   Begin VB.Label Label1 
      Caption         =   "客户端连接状态:"
      BeginProperty Font 
         Name            =   "楷体_GB2312"
         Size            =   12
         Charset         =   134
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      ForeColor       =   &H00FF0000&
      Height          =   375
      Left            =   240
      TabIndex        =   1
      Top             =   120
      Width           =   3855
   End
End
Attribute VB_Name = "FrmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Private Sub CmdCancel_Click()   '退出
Dim i As Integer

    '检查sock连接是否关闭
    For i = 1 To ClMax
        If Me.SockToCln(i).State <> sckClosed Then
            Me.SockToCln(i).Close
        End If
    Next i
    '结束程序
    End
End Sub

Private Sub Form_Load()
Dim SqlStr As String

    '设置网络属性
    '服务器端口
    SvrPort = "1234"
    '设置侦听Winsock
    Me.SockToCln(0).LocalPort = SvrPort
    Me.SockToCln(0).Listen
    
    '连接数据库
    SqlStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
              App.Path & "\mdb\library.mdb;Persist Security Info=False"
    DBCnn.Open SqlStr
    
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim i As Integer
    '关闭还没有关闭的Winsock连接
    For i = 1 To ClMax
        If Me.SockToCln(i).State <> sckClosed Then
            Me.SockToCln(i).Close
        End If
    Next i
End Sub

'网络连接关闭
Private Sub SockToCln_Close(index As Integer)
Dim i As Integer
Dim FindItm As ListItem

    For i = 1 To ClMax
        '找到该连接
        If Client(i).index = index Then
            Set FindItm = Me.LvCnn.FindItem(Client(i).UsrID)
                FindItm.SubItems(1) = "断开"
                FindItm.SubItems(2) = Now
            Exit For
        End If
    Next i
    
End Sub

'接受连接请求
Private Sub SockToCln_ConnectionRequest(index As Integer, ByVal requestID As Long)
Dim i As Integer
    
    '查询是否有关闭的空闲控件
    For i = 1 To MaxSvrSock
        If SockToCln(i).State = sckClosed Then
            SockToCln(i).LocalPort = 0
            '不能占用侦听端口
            If SockToCln(i).LocalPort = SvrPort Then
                Exit Sub
            End If
            SockToCln(i).Accept requestID
            Exit Sub
        End If
    Next i
       
    '没有空闲的控件,原有socket都被占用,需要新增Winsock
    MaxSvrSock = MaxSvrSock + 1             '控件数增加
    Load SockToCln(MaxSvrSock)              '动态生成一个winsock控件
    SockToCln(MaxSvrSock).LocalPort = 0     '设置新端口
    SockToCln(MaxSvrSock).Accept requestID  '接受连接请求

End Sub

'接受并处理数据
Private Sub SockToCln_DataArrival(index As Integer, ByVal bytesTotal As Long)
Dim StrArrival As String, StrGet() As String
Dim strBack As String
Dim RdrID As String
Dim bkNum As Long
Dim StatNum As Integer
Dim UsrID As String
Dim UsrPwd As String
    
    '接受数据
    Me.SockToCln(index).GetData StrArrival, vbString
    If Len(StrArrival) < 1 Then Exit Sub
    
    '拆分接收到的数据
    StrGet() = Split(StrArrival, ",", -1)
    
    '判断类型
    Select Case StrGet(0)
    
    '图书借阅
    Case "Lend"
        '得到RdrID和BkNum
        RdrID = StrGet(1)
        bkNum = Val(StrGet(2))
        '回复客户端
        strBack = CheckLend(RdrID, bkNum)
        
    '图书归还
    Case "Return"
        '得到BkNum
        bkNum = Val(StrGet(1))
        '回复客户端
        strBack = CheckReturn(bkNum)
        
    '缴纳欠款
    Case "Pay"
        '得到RdrID
        RdrID = StrGet(1)
        '回复客户端
        strBack = CheckPay(RdrID)
        
    '操作图书类别
    Case "Type"
        '调用BookType函数处理图书管理命令
        strBack = BookType(StrGet, index)
        
    '图书管理
    Case "Book"
        '调用BookInfo函数处理图书管理命令
        strBack = BookInfo(StrGet, index)
        
   '读者管理
   Case "Rdr"
        '调用Reader函数处理图书管理命令
        strBack = Reader(StrGet, index)
        
    '管理员管理
    Case "Usr"
        '调用User函数处理图书管理命令
        strBack = User(StrGet, index)
        
    Case "Stat"
        '得到StatNum
        StatNum = Val(StrGet(1))
        '回复客户端
        strBack = CheckStat(StatNum)
    
    '连接信息
    Case "Cnn"
        '得到UsrID和UsrPwd
        UsrID = StrGet(1)
        UsrPwd = StrGet(2)
        '回复客户端
        strBack = CheckUsr(UsrID, UsrPwd, index)
        
    End Select
    
    '检验sock连接
    If Me.SockToCln(index).State <> sckConnected Then
        Exit Sub
    End If
    '发送返回信息
    Me.SockToCln(index).SendData strBack
    
End Sub

'
'以下为DataArrival()过程中用到的函数
'

'*****************************************************************************
'检验图书类别信息管理的函数 BookType
'功能:检验客户端发送来的图书类别管理信息,处理数据库后返回信息。
'输入:StrGet(),String类型,客户端传送的协议数组,
'      index,Integer类型,客户端连接Winsock下标。
'输出:BookType,String类型,返回的响应信息。
'*****************************************************************************
Private Function BookType(ByRef StrGet() As String, index As Integer) As String
Dim iType As Integer
Dim TypeName As String
Dim TypeNum As Integer

    '得到类型
    iType = StrGet(1)
    If iType = 1 Then
        '得到TypeName
        TypeName = StrGet(2)
        '回复客户端
        BookType = CheckType1(TypeName, index)
        
    ElseIf iType = 2 Then
        '回复客户端
        BookType = CheckType2()
    End If
    
End Function

'*****************************************************************************
'检验图书信息管理的函数 BookInfo
'功能:检验客户端发送来的图书管理信息,处理数据库后返回信息。
'输入:StrGet(),String类型,客户端传送的协议数组,
'      index,Integer类型,客户端连接Winsock下标。
'输出:BookInfo,String类型,返回的响应信息。
'*****************************************************************************
Private Function BookInfo(ByRef StrGet() As String, index As Integer) As String
Dim iType As Integer
Dim BkName As String, BkAuthor As String, BkPress As String
Dim BkPrsNum As Integer
Dim BkPrsDate As Date
Dim BkType As Integer

    iType = StrGet(1)
    Select Case iType
    Case 1
        '得到BkName,BkAuthor,BkPress,BkPrsNum,BkPrsDate,BkType,
        BkName = StrGet(2)
        BkAuthor = StrGet(3)
        BkPress = StrGet(4)

⌨️ 快捷键说明

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