急!!!请帮忙解决用WINSOCK从服务器的SQLSERVER数据库表中的记录传给客户端的ACCESS表中.
我的方法是:客户端的界面中输入的数据通过WINSOCK保存的服务器中的的SQLSERVER数据库中的表中,若保存成功,就读出表中的所有记录(很多条)传给客户端接收,并分条保存在ACCESS表中,传完后,读到界面的网格中.
我写的不行的程序(写出来,让高手更明白我想解决的问题)
原程序:
服务器:
'接受并处理数据
Private Sub SockToCln_DataArrival(Index As Integer, ByVal bytesTotal As Long)
            Dim StrArrival As String, StrGet() As String
            Dim strBack As String
            Dim RdrID As String
            Dim bkNum As Long
            Dim StatNum As Integer
            Dim UsrID As String
            Dim UsrPwd As String
   
    '接受数据
    Me.SockToCln(Index).GetData StrArrival, vbString
    If Len(StrArrival) < 1 Then Exit Sub
    
    '拆分接收到的数据
    StrGet() = Split(StrArrival, ",", -1)
    
    '判断类型
    Select Case StrGet(0)
                     Case "gs"  '窗体的客户
                               If StrGet(1) = 2 Then '保存公司用户集合
                     CheckUsergsSave StrGet(2), StrArrival, Index
                     Exit Sub
                End If
                End Select
    
    '检验sock连接
    If Me.SockToCln(Index).State <> sckConnected Then
        Exit Sub
    End If
    '发送返回信息
    Me.SockToCln(Index).SendData strBack
    
End SubPrivate Function CheckUsergsSave(ByVal Flag As Integer, ByVal smE As String, indexM As Integer) As String
                 Dim rsCheck As New ADODB.Recordset
                 Dim DBstr As String, i As Integer, Z As Double, M As Double
                 Dim bEnter As Boolean
                 Dim FindItm As ListItem, LtItm As ListItem
                 Dim SqlStr As String, Smlllq As String
                 Dim StrGet() As String
                 On Error GoTo Errork
     '1.读出数据库中的记录
     '4.返回响应信息
       '拆分接收到的数据
         StrGet() = Split(smE, ",", -1)
'连接数据库
         SqlStr = LinkSql(0, IDNAmeS, PwdNameS, "(local)", "infoN")
         LinKServerLogin SqlStr, 1
      Select Case Flag
             Case 0  '保存
                  DBstr = "select  * from gs_info  where gs_n='" & StrGet(2) & "' and gs_name='" & StrGet(4) & "' "
                  '打开数据集
                  rsCheck.Open DBstr, DBCnn, adOpenStatic, adLockOptimistic, -1
            
                 '查找到的记录数为0
                 With rsCheck
                 If (rsCheck.EOF And rsCheck.BOF) Then     '找不到该管理员名
                      DBCnn.BeginTrans
                     .AddNew
                     For i = 3 To UBound(StrGet)
                       If Trim(StrGet(i)) <> "" Then
                           .Fields(i - 3) = StrGet(i)
                       Else
                             If .Fields(i - 3).Type = adTinyInt Then
                              .Fields(i - 3) = 0
                            Else
                              .Fields(i - 3) = " "
                            End If
                       End If
                     Next
                     .Update
                     DBCnn.CommitTrans
                Else
                     DBCnn.BeginTrans
                     For i = 2 To UBound(StrGet)
                       .Fields(i) = StrGet(i + 2)
                     Next
                     .Update
                     DBCnn.CommitTrans
                   
                End If
               End With
                '关闭数据集
                rsCheck.Close
                '----------------------------------
                 '//读出记录数总数
                  DBstr = "select  * from gs_info  order by gs_n"
                 rsCheck.Open DBstr, DBCnn, adOpenStatic, adLockReadOnly, -1
                   With rsCheck
                      If Not (rsCheck.EOF And rsCheck.BOF) Then
                         DBCnn.BeginTrans
                         .MoveLast
                          ZCount = .RecordCount
                          DBCnn.CommitTrans
                         Else
                           Z = 0
                         End If
                  End With
                    rsCheck.Close
                 '----------------------------------
                   '读出记录
                   ReDim CheckData(ZCount)
                  DBstr = "select  * from gs_info  "
                  rsCheck.Open DBstr, DBCnn, adOpenStatic, adLockReadOnly, -1
                     DBCnn.BeginTrans
                    With rsCheck
                       If Not (rsCheck.EOF And rsCheck.BOF) Then
                           .MoveFirst
                            M = 0
                        Do While Not .EOF
                            '返回响应信息
                            CheckUsergsSave = "gs,gs,"
                            CheckUsergsSave = CheckUsergsSave + "2,1," + Str(ZCount)
                            CheckUsergsSave = CheckUsergsSave + "," + Str(M)
                           For i = 0 To .Fields.Count - 1
                              If IsNull(.Fields(i).Value) = True Or Trim(.Fields(i).Value) = "" Then
                                CheckUsergsSave = CheckUsergsSave + ", "
                              Else
                                CheckUsergsSave = CheckUsergsSave + "," + Trim(.Fields(i).Value)
                              End If
                           Next
                                                 '检验sock连接
                          If Me.SockToCln(indexM).State <> sckConnected Then Exit Function
                          '发送返回信息
                          Me.SockToCln(indexM).SendData CheckUsergsSave 
                          deepN (300) '延时程序
                       
                          .MoveNext
                          M = M + 1
                          Loop
                        Else
                          CheckUsergsSave = CheckUsergsSave + "2,1," + Str(Z)
                            '检验sock连接
                          If Me.SockToCln(indexM).State <> sckConnected Then
                              Exit Function
                          End If
                          '发送返回信息
                          Me.SockToCln(indexM).SendData CheckUsergsSave
                        End If
                  End With
                     DBCnn.CommitTrans
                '关闭数据集
                rsCheck.Close
                 LinKServerLogin SqlStr, 0 '关闭数据库
                
                          
    End Select
    Exit Function
Errork:
      MsgBox Err.Description
End Function
'客户
'接收
Private Sub SockToSvr_DataArrival(ByVal bytesTotal As Long)
            Dim StrArrival As String, StrGet() As String
            Dim Start As Integer
            Dim I As Integer, j As Integer, k As Integer
            Dim LtItm As ListItem
            Set mText = New TimerState
    '接收数据,String类型
    Me.SockToSvr.GETdata StrArrival, vbString
    If Len(StrArrival) < 1 Then Exit Sub
    
    '拆分接收到的数据
    StrGet() = Split(StrArrival, ",", -1)
    
    '得到帧头,按不同类型做响应的处理
    Select Case StrGet(0)
       Case "gs"    '读出公司名
         Select Case StrGet(2)
                 Case 2
             If StrGet(3) = 1 Then '保存成功
                 '写数据库的表
                    If Trim(StrGet(5)) = m Then  '第一次接收,清空表
                        '//删除表中记录
                        DeleteM App.Path & "\" & PathGsMDB, "gs"
                    End If
                        If m = Val(StrGet(5)) Then '分条保存记录表中
                             SaveTabeL App.Path & "\" & PathGsMDB, "gs", StrArrival
                             m = m + 1
                             Me.SockToSvr.SendData StrGet(0) & ",4," & StrGet(5) '发送
                        End If
                    If m = Val(StrGet(4)) Then
                         '-----
                         Call mText.TimerTask(StrGet(1) + "," + StrGet(2) + "," + StrGet(3), StrArrival) '产生事件将数据显示到网格中
                   End If
              
             End If
  End Select
    
End Sub

解决方案 »

  1.   

    问一句离题的话:为什么要用winsock?,SQL不是提供数据服务吗?
      

  2.   

    同意楼上的!
    两个数据库中间为什么要加个winsock????
    SQL本来就支持网络访问,何必要多加个控件呢?
      

  3.   

    Winsock完全可以远程访问SQLServer.LZ找些例子看看吧。
      

  4.   

    谢谢你们的回复!!!
    1: 你现在运行到哪里有问题,是收不到还是写不进数据库还是回传有问题??
    答:写收到的数据串不是一条,而是写了好几条记录连在一起,我要传一条,接收一条并保存一条.
     2. 两个数据库中间为什么要加个winsock???? 
    SQL本来就支持网络访问,何必要多加个控件呢?
    原因是:我这个网络中的第一层结构,我要用三层结构(并且数据还要进行后台运算后分层上传,后再传给客户机),并且以后可能要连上INTER,这个问题总要会的有.
    3.Winsock完全可以远程访问SQLServer.LZ找些例子看看吧。
    例子我就是没找到,找到的只是发文件
    4.我有例子,留下Email.
    谢谢你,我的Email:[email protected],请将例子发给我
      

  5.   

    不清楚你的用途,SQL上互联网也没问题
    用winsock那可真够你写的,呵呵
      

  6.   

    To LZ,
      我的例子难度等级Advance Level.研究透它,你就能搞顶Winsock & remote Databace的应用。
    Good Luck!