现在我需要把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

解决方案 »

  1.   

    '这种程序我写过!
    '------发送端------
    '最好是将每一条数据组成一个字符串,比如:
    '数据库的表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
    '------接收端------
    '不用多说了
      

  2.   

    如果还有不清楚,请EMail:[email protected]
      

  3.   

    海牛猪猪,您好!
                请问你说的那段代码是放在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谢谢!
      

  4.   

    ’放个全局变量表示发送状态
    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
      

  5.   

    Const MsrdcDataSourceName = "aa"
    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
      由这段代码,大家应该明白我的需求,请大侠看看这段代码,将当中的错误纠正一下,谢谢!