现在我需要把ORACLE数据库中名为TEMP的表中字段a的值,通过WINSOCK发送到另一台服务器,接收其返回的结果,我要根据返回的结果来更新本地数据库表中的内容。
可是,现在不管发送多少个值过去(在数据库操作的循环中用winsock1.senddata 变量),可按了执行按钮后只能获得第一个发送值所返回的结果。
这种情况具体应该怎样写?
我的代码:
Private Sub Form_Load()
'Winsock 控件的名字为 winsock1
winsock1.RemoteHost = "*.*.*.*"
winsock1.RemotePort = 4000
End SubPrivate Sub cmdConnect_Click()
'调用 Connect 方法,初始化连接。
'数据库循环开始
winsock1.Connect "*.*.*.*"
winsock1.senddata 数据库中取出的字段值
winsock1.close
'数据库循环结束
End SubPrivate Sub winsock1_DataArrival (ByVal bytesTotal As Long)
Dim strData As String '我是在这里得到对应的返回值吗?怎样获得?
winsock1.GetData strData
text3.Text = strData
End Sub
可是,现在不管发送多少个值过去(在数据库操作的循环中用winsock1.senddata 变量),可按了执行按钮后只能获得第一个发送值所返回的结果。
这种情况具体应该怎样写?
我的代码:
Private Sub Form_Load()
'Winsock 控件的名字为 winsock1
winsock1.RemoteHost = "*.*.*.*"
winsock1.RemotePort = 4000
End SubPrivate Sub cmdConnect_Click()
'调用 Connect 方法,初始化连接。
'数据库循环开始
winsock1.Connect "*.*.*.*"
winsock1.senddata 数据库中取出的字段值
winsock1.close
'数据库循环结束
End SubPrivate Sub winsock1_DataArrival (ByVal bytesTotal As Long)
Dim strData As String '我是在这里得到对应的返回值吗?怎样获得?
winsock1.GetData strData
text3.Text = strData
End Sub
'------发送端------
'最好是将每一条数据组成一个字符串,比如:
'数据库的表Table1有字段ID、Name
Dim strData As String
'数据库数据集循环
Do Until objRs.EOF=True
strData="[Data][ID]1[/ID][Name]中国人[/Name][/Data]"
Winsock1.SendData strData
Doevents'一定要有,让Winsock1把缓冲中的数据发出去
objRs.MoveNext
Loop
'------接收端------
'不用多说了
请问你说的那段代码是放在Private Sub cmdConnect_Click()里吗,那我应怎样接收呢,可以发一个,接收一个,例如:
Private Sub cmdConnect_Click()
Dim Data1 As String
Do Until objRs.EOF=True
winsock1.Connect "*.*.*.*"
strData=value1 '这里的value1代表表中的一个字段,我只要发送表中这一个字段的值
Winsock1.SendData strData
Doevents'一定要有,让Winsock1把缓冲中的数据发出去
'在这里就可以把返回的值取出来吗?因为在这里把返回值取出来,我就可以直接在这里根据返回值进行 ‘其它操作
winsock1.close
objRs.MoveNext
Loop
End Sub谢谢!
private bSend as booleanPrivate Sub cmdConnect_Click()
'调用 Connect 方法,初始化连接。
'数据库循环开始
winsock1.Connect "*.*.*.*"
bSend=true
winsock1.senddata 数据库中取出的字段值
do while(bSend)
doevents
loop
winsock1.close
'数据库循环结束
End Sub'利用数据发送成功触发的发送成功的事件来改变发送状态
'我的这台机子上没有VB,可能事件名写得不对,你自己改一下就可以了
private sub winsock1_sendcompleted()
bSend=false
end sub
Const MsrdcUserName = "aa"
Const MsrdcPassword = "aa"
Const MsrdcConnect = "database=aa"
Dim gdb As rdoConnection
Dim a As String
Dim b As String'winsock控件名为winsock1,我用的是UDP协议Private Sub Command1_Click()
Dim sendvalue As String Set FDS = gdb.OpenResultset("SELECT fielda,fieldb FROM tmpdb where rownum<50000", rdOpenStatic) '要处理上万条数据
If Not FDS.EOF Then
FDS.MoveFirst
While Not FDS.EOF
a = CStr(FDS("fielda"))
b = CStr(FDS("fieldb"))
sendvalue = a + b + " "
Winsock1.SendData sendvalue
DoEvents
Winsock1.Close
FDS.MoveNext
Wend
End If
End SubPrivate Sub Form_Load()
Set gWorkspace = rdoEngine.rdoEnvironments(0)
gWorkspace.CursorDriver = rdUseOdbc
Set gdb = gWorkspace.OpenConnection(MsrdcDataSourceName, rdDriverNoPrompt, False, "UID=" & MsrdcUserName & ";" & "PWD=" & MsrdcPassword & ";" & MsrdcConnect)
With Winsock1
.RemoteHost = "*.*.*.*"
.RemotePort = 4000
.Bind 1001
End With
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim strdata As String
Winsock1.GetData strdata '运行到这里出错,“实时错误10054:连接由远程端重新设置”
'根据返回的结果更新此条记录
If strdata='yes' then
gdb.execute "Update tmpdb set field3='1' where fielda=a and fieldb=b " '对应更新发送数据的那条记录
else
gdb.execute "Update tmpdb set field3='0' where fielda=a and fieldb=b "
End if
End Sub
由这段代码,大家应该明白我的需求,请大侠看看这段代码,将当中的错误纠正一下,谢谢!