微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题VB中用Winsock控件实现远程数据库查询
栏目软件世界
作者贾万兴
发布2001年6期
  你可能已经习惯了在自己的电脑中查询本机数据库中的信息,但当你身处异地想获得一位客户的详细资料时你该怎么办呢?这时你就要借助远程数据库查询软件才能实现了。下面本文将介绍如何利用Visual Basic来编写远程数据库查询软件。
  编程思路:
  客户端利用Winsock的SendData方法将待查内容发送到服务器端,服务器端利用data控件对数据库进行查询,最终利用Winsock的SendData 方法将查询结果发送到客户端。
  绘制窗体:
  一、服务器端(界面如

1)
  新建一个工程在窗体中加入:
  Winsock控件,名称为sckServer,procotol为scktcpprocotol
  DATA控件,名称为data1 connect为Access,databasename为D:\shenfen.mdb
  shenfen.mdb包含姓名、性别、身份证、民族、地址5个字段其类型均为文本。
  TEXTBOX控件,共加入6个TEXTBOX控件名称为TEXT1—TEXT6,其中TEXT2—TEXT6分别与DATA1控件中的各字段相关联
  二、客户端(界面如

2)
  新建一个工程在窗体中加入:
  winsocK控件,名称为sckClient,procotol为scktcpprocotol
  TEXTBOX控件,共加入两个TEXTBOX控件名称为TEXT1—TEXT2
  COMMANDBUTTON控件,名为cmdSendData
  程序源码:
  1.服务器端
  Option Explicit
  Private retname As String
  Private retsex As String
  Private retold As String
  Private all As String
  Private Sub Command1_Click()
  Print all
  End Sub
  Private Sub Form_Load()
  sckServer.LocalPort = 1975 '设置端口号
  sckServer.Listen '开始监听1975号端口
  '读取当前服务器信息,并显示
  MsgBox “服务器的IP地址为:” & sckServer.LocalIP, vbOKOnlx,“提示”
  MsgBox “服务器的名称为:” & sckServer.LocalHostName, vbOKOnly,“提示”
  End Sub
  Private Sub Form_Unload(Cancel As Integer)
  If sckServer.State <> sckClosed Then sckServer.Close
  '退出时中断连接
  End Sub
  Private Sub sckServer_ConnectionRequest(ByVal requestID As Long)
  '当新的连接请求来到时,检查是否已经与其他计算机建立过连接
  '如果已经连接关闭连接
  If sckServer.State <> sckClosed Then sckServer.Close
  '建立新的连接(如果使用控件数组,则可以在不关闭当前连接的情况下与多台计算机建立连接)
  sckServer.Accept requestID
  End Sub
  Private Sub sckServer_DataArrival(ByVal bytesTotal As Long)
  Dim Received As String
  Dim jj As String
  Dim ww As String
  '当有数据来到时将数据保存在Received中,并显示
  sckServer.GetData Received, vbString
  Text1.Text = Received
  ww = Mid(Received, 3)
  jj = Mid(Received, 1, 2)
  '判断待查字段
  If jj = Chr(33) & Chr(33) Then GoTo shefen
  Data1.Recordset.FindFirst “姓名 = '” & ww & “'”
  GoTo last
  shefen:Data1.Recordset.FindFirst “身份证 = '” & ww & “'”
  last:  retname = Text1.Text
  retsex = Text3.Text
  retold = Text4.Text
  If Data1.Recordset.NoMatch Then
  all = “”
  Else
  all=Text6.Text+Text2.Text+Text3.Text+Text4.Text + Text5.Text
  End If
  sckServer.SendData all
  '将符合条件的纪录的所有字段信息打包发回客户端,字段间可用特殊字符隔开以便客户端处理
  End Sub
  2.客户端
  Option Explicit
  Private SendTime As Integer
  Private name1 As String
  Private sex As String
  Private old As String
  Private Sub cmdSendData_Click()
  Dim jwx As String
  name1 = “”
  sex = “”
  old = “”
  If Text1.Text <> “” Then
  name1 = Chr(63) & Chr(63) & Text1.Text
  '将待查姓名前加入两个Chr(63)使服务器端可判断待查字段为姓名
  ElseIf Text2.Text <> “” Then
  name1 = Chr(33) & Chr(33) & Text2.Text
  '将待查姓名前加入两个Chr(33)使服务器端可判断待查字段为身份证号
  Else: MsgBox “输入不得为空”,,“警告”
  End If
  sckClient.SendData name1
  '发送name1
  End Sub
  Private Sub Form_Load()
  '远程主机名可在“控制面板-网络-标识”中查到或输入服务器的IP地址
  sckClient.RemoteHost = “jwx”
  sckClient.RemotePort = 1975 '设置远程端口与服务器端一致
  '开始连接
  sckClient.Connect
  Do
  DoEvents
  Loop Until sckClient.State = sckConnected Or _
  sckClient.State = sckError
  '监测连接状态
  If sckClient.State = sckError Then
  MsgBox “无法连接到服务器”, 48, “提示”
  cmdSendData.Enabled = False
  GoTo sj
  End If
  MsgBox “成功连接到服务器:” & sckClient.RemoteHostIP, vbOKOnly, “提示”
  sj:
  End Sub
  Private Sub Form_Unload(Cancel As Integer)
  If sckClient.State <> sckClosed Then sckClient.Close
  End Sub
  Private Sub sckClient_Close()
  '关闭连接
  sckClient.Close
  cmdSendData.Enabled = False
  End Sub
  Private Sub sckClient_DataArrival(ByVal bytesTotal As Long)
  Dim Received As String
  '当有数据来到时将数据保存在Received中,并显示
  sckClient.GetData Received, vbString
  Text1.Text = Received
  cmdSendData.Enabled = False
  End Sub
  Private Sub Text1_Change()
  cmdSendData.Enabled = True
  End Sub
  Private Sub Text2_Change()
  cmdSendData.Enabled = True
  End Sub
  关于Winsock控件的详细使用方法请参考MSDN,本程序调试环境:Win98第二版,Access 97, Visual Basic6.0企业版。