'Option Explicit ‘WINSOCK 客户端代码
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Byte, Source As Byte, ByVal Length As Long)
Dim strSQL As String
Private Sub Command1_Click()
If sockClient.State <> sckClosed Then sockClient.Close
If txtServerName.Text <> vbNullString Then
sockClient.RemoteHost = txtServerName.Text '设置远程计算机名称
Else
MsgBox "必须输入服务器名称或IP地址", vbInformation, "提示"
Exit Sub
End If
If txtServerPort.Text <> vbNullString Then
sockClient.RemotePort = txtServerPort.Text '设置远程端口名称
Else
MsgBox "必须输入远程端口", vbInformation, "提示"
Exit Sub
End If
sockClient.Protocol = sckTCPProtocol '设置 Winsock 控件所使用的协议是TCP。
sockClient.Connect '要求连接到远程计算机
Me.Label3.Caption = "已连接"
End Sub
Private Sub Command2_Click()
strSQL = Me.Text1.Text
If sockClient.State = sckConnected Then
sockClient.SendData strSQL
DoEvents
End If
End Sub
Private Sub Form_Load()
Me.Label3.Caption = "未连接"
txtServerName.Text = "112.74.36.215"
Text1.Text = "QFII815,select TOP 500 * from BillIndex" 'QFII815是数据库名字
End Sub
Private Sub sockClient_DataArrival(ByVal bytesTotal As Long)
Dim tmpData() As Byte
Dim Finis As String, FinisData(3) As Byte '存取结尾标志
Static rsLength As Long
Static iCount As Integer
Static rsData() As Byte '记录集数组
Dim arrData() As Byte
Dim objRec As Recordset
sockClient.GetData tmpData, vbArray + vbByte
'把接收的数据保存在rsData中
If iCount = 0 Then '第一次接收
rsData = tmpData
iCount = 1
Else
ReDim Preserve rsData(rsLength + bytesTotal)
CopyMemory rsData(rsLength + 1), tmpData(0), bytesTotal
End If
rsLength = UBound(rsData) 'rsData的长度
CopyMemory FinisData(0), rsData(rsLength - 3), 4
Finis = FinisData
If Finis = "`!" Then '假如是结尾,截断结尾标志数据
ReDim Preserve tmpData(rsLength - 4)
Set objRec = BinToRs(rsData) '还原记录集
Set MSHFlexGrid1.DataSource = objRec ' 显示数据 '客户端表显示倒是成功了
Erase rsData
iCount = 0
rsLength = 0
End If
End Sub
Public Function BinToRs(vData As Variant) As Recordset '将服务器返回的二进制转换为记录集
Dim objStream As Stream
Dim objRs As Recordset
Set objRs = New Recordset
Set objStream = New Stream
objStream.Open
objStream.Type = adTypeBinary
objStream.Write vData
objStream.Position = 0
objRs.Open objStream
Set BinToRs = objRs
Set objRs = Nothing
Set objStream = Nothing
End Function
如题:就是如何像本机直连一样,获取记录数据,如 rs1.Open strsql01, cnn1, adOpenKeyset,执行后,If rs1.RecordCount > 0 Then 这样子判断?