VB WINSOCK 客户端如何获取SQL返回记录的条数?

奇人轶事 2017-08-30 01:15:30
'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 这样子判断?
...全文
706 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2017-10-30
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
百度搜相关关键字。
赵四老师你这句话很有魔力,就跟你的个人魅力一样有
赵4老师 2017-10-30
  • 打赏
  • 举报
回复
引用 11 楼 abc1234679 的回复:
引用 1 楼 zhao4zhong1 的回复:
百度搜相关关键字。
赵四老师你这句话很有魔力,就跟你的个人魅力一样有
我的个人魅力就在于老说一些看似没用但实际也极有可能没用然而万一在某些极个别人身上以及在某些极个别的时机特别有用就如醍醐灌顶放之四海而皆准的“真理”。
奇人轶事 2017-09-03
  • 打赏
  • 举报
回复
谢谢七楼和九楼的朋友,有没有类似的源码提供下研究一下?水平不行,简单语句会,自定义规格有点难了
of123 2017-09-01
  • 打赏
  • 举报
回复
七楼的意思恰恰是不建议你从客户端发送 SQL 语句。你可以发送请求到服务器,它那里用事先定义好的 SQL 查询。然后,它发送数据给你,可以是某种格式的一个文件。 当然了,你一定要发送 SQL 语句,那么也可以在服务端加上安全过滤,对可能危害你安全的 SQL 语句拒绝执行。 总之,你的工作需要客户端和服务器端两头配合。
奇人轶事 2017-09-01
  • 打赏
  • 举报
回复
谢谢楼上说的很好,我是想客户端发送SQL语句,服务器处理后,客户端接收到数据集,如何放到各个地方,比如获取的数放到文本框,表格里或是提示信息。好处理就可以。度娘里搜什么关健字呢?
脆皮大雪糕 2017-08-31
  • 打赏
  • 举报
回复
引用 6 楼 jin1982253 的回复:
四楼的能帮忙只指下吗?先谢了。
贴了一堆代码,但是并没有说明你的业务场景。 1、客户端获取记录数的目的是啥?看你最后的问题貌似是为了判断记录数。如果仅仅是为了获取记录数就没必要返回记录集,服务端直接传递一个记录数就可以了。另外如果只是为了获取记录数,用select count更快。 2、目测你是想向服务端发送sql语句,然后服务端返回数据集,客户端接收以后处理。强烈不建议你这麼做,一旦你的这个通讯被别人识破,那么他就可以发送任意SQL语句。建议的方法是服务端开放若干个单一功能的服务接口,比如你例子里面取TOP 500 BillIndex 就封装成一个接口,暴露给客户端比如就是取 top n BillIndex 。客户端只要调用这个接口,并告知n值。至于获取的逻辑由服务端处理,访问什么数据库访问哪张表过滤条件业务逻辑全部封装在服务端,对于客户端来说只是一个黑盒子。 3、至于数据集怎么传递到客户端,建议基于TCP建立一套符合你产品特点的数据传输协议。这个上度娘也有不少现成的东西可以借鉴。
奇人轶事 2017-08-30
  • 打赏
  • 举报
回复
四楼的能帮忙只指下吗?先谢了。
赵4老师 2017-08-30
  • 打赏
  • 举报
回复
引用 4 楼 chewinggum 的回复:
[quote=引用 3 楼 zhao4zhong1 的回复:] 为什么不按照标准、通用的办法使用ADO呢?
这个年代还用客户端直连数据库就弱爆了。 随便抓抓内存里的连接串,你的数据库就送给别人了[/quote] 是吗? http://bbs.csdn.net/topics/392143402
脆皮大雪糕 2017-08-30
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
为什么不按照标准、通用的办法使用ADO呢?
这个年代还用客户端直连数据库就弱爆了。 随便抓抓内存里的连接串,你的数据库就送给别人了
赵4老师 2017-08-30
  • 打赏
  • 举报
回复
为什么不按照标准、通用的办法使用ADO呢?
奇人轶事 2017-08-30
  • 打赏
  • 举报
回复
水平太菜,百度了好多回,看不明所以,万请指点一下,帮忙改下代码
赵4老师 2017-08-30
  • 打赏
  • 举报
回复
百度搜相关关键字。

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧