我用VB6 + SQL SERVER 写了一个C/S系统,中间有主从表的保存用到了事务:
1、取得表的编号
2、保存主表
3、保存从表,从表有12条记录少于5个用户的时候比较正常,用户达到10个时,由于网速慢,一个用户保存可能要1秒中,如果第一个保存还没有返回,第二个用户跟上,系统则不能保存。
提示:不能启动更多的事务
如何解决???

解决方案 »

  1.   

    private sub command1_click()
    dim ac_tmp as new adodb.connection
    ac_tmp.open ...on error goto err_proc
        ac_tmp.begintrans    '开始事务
        
        '用代码实现以下功能 
        1、取得表的编号
        2、保存主表
        3、保存从表
         
        ac_tmp.committrans    '提交事务
        msgbox "保存成功!",vbinformation,"提示"
        exit sub'错误处理
    err_proc:
        ac_tmp.rollbacktrans   '回滚事务
        msgbox "保存失败!",48,"提示"
        exit sub
    end sub   
      

  2.   

    Public Function SaveNew(ByRef aRstMain As ADODB.Recordset, ByVal aRstSub As ADODB.Recordset) As String
        
        Dim strNO As String
        Dim strSql As String
        Dim rstTmp As ADODB.Recordset
        
        On Error GoTo ErrTrans
        
        SaveNew = ""
            
        gAdoCon.BeginTrans
        
        strSql = "SELECT SN, MaxCount FROM SN WHERE SN='N'"
        Set rstTmp = CreateObject("ADODB.Recordset")
        
        With rstTmp
            .CursorLocation = adUseClient
            .Open strSql, gAdoCon, adOpenStatic, adLockBatchOptimistic
            If .RecordCount = 0 Then
                .AddNew
                .Fields("SN").Value = "N"
                .Fields("MaxCount").Value = 0
            End If
            .Fields("MaxCount").Value = .Fields("MaxCount").Value + 1
            .UpdateBatch
            strNO = "N" & Format(.Fields("MaxCount").Value, "0000")
            
        End With
        
        aRstMain.Fields("NUM").Value = strNO
        aRstMain.UpdateBatch
        
        With aRstSub
            .MoveFirst
            Do While Not .EOF
                .Fields("NUM").Value = strNO
                .MoveNext
            Loop
            .UpdateBatch
        End With
        
        gAdoCon.CommitTrans
        
        SaveNew = strNO
        
        Exit Function
        
    ErrTrans:
        gAdoCon.RollbackTrans
        Err.Raise Err.Number, Err.Source, Err.Description
            
    End Function
      

  3.   

    服务器端写COM吗?这个程序用的时间不多,但用的时候数据录入的人比较多?要怎样规划简单?能否给点思路?