毕业设计文章2 Winsock控件实现远程数据库查询
2007-05-10 17:53:48.0

VB中用Winsock控件实现远程数据库查询

VB中用Winsock控件实现远程数据库查询
日期:2002年10月19日 作者:贾万兴 人气:457 查看:[大字体 中字体 小字体]

  你可能已经习惯了在自己的电脑中查询本机数据库中的信息,但当你身处异地想获得一位客户的详细资料时你该怎么办呢?这时你就要借助远程数据库查询软件才能实现了。下面本文将介绍如何利用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企业版。


文章评论
[以下网友留言只代表其个人观点,不代表中华网的观点或立场]
发表评论
昵 称:
主 页:
内 容:
心 情: