vb6记录后的返回-1值

  • 本文关键字:返回 记录 vb6 vb6 ado
  • 更新时间 :
  • 英文 :


我正在尝试修复旧的VB6应用程序错误。当我尝试将数据保存/插入数据库时,记录返回> -1 的值。
我尝试在 .execute 方法之前和之后插入消息框。在 .execute 方法之前,值为 1,然后 .execute 命令值返回-1。你们知道为什么它返回-1?我不知道这是否是记录相关的 options 参数返回负值。

Private Function jsSave() As Boolean
Dim Cmd(0 To 1) As New ADODB.Command
Dim Prm(0 To 1, 0 To 14) As New ADODB.Parameter
Dim RetVal As Long
Dim Succeeded As Long
Dim i As Integer
On Error GoTo R
Screen.MousePointer = vbHourglass
If Me.Toolbar.Buttons("secure").Image = "lock" Then
Err.Raise 1000, , "This record is currently in lock state. You cannot alter anything in this record unless you first unlock it. For more details how to unlock this record, please refer to IT."
End If
RetVal = 1
Succeeded = 0
No = Me.txtSONo.Text    'SONo
DtlId = GetLastNo(35)    'SODtlId
'------Start Saving Main-------------------------------------------------------
Select Case CurrentStatus
Case adInsert
    Id = GetLastNo(33) + 1       'PO Id
    With Cmd(0)
        .ActiveConnection = Conn
        .CommandType = adCmdText
        .CommandText = "INSERT INTO tb_SO (" _
                        & "SONo," _
                        & "SId," _
                        & "PId," _
                        & "totAmt," _
                        & "advAmt," _
                        & "Prepared," _
                        & "Recommended," _
                        & "Approved," _
                        & "Noted," _
                        & "Remarks," _
                        & "TRDate," _
                        & "UpdatedBy," _
                        & "UpdatedDate," _
                        & "SOId) VALUES (?,?,?,?,?,?,?,?,?,?,?,SYSTEM_USER,getdate(),?)"
    '--------------------------------------------------------------------
    Set Prm(0, 1) = .CreateParameter(, adInteger, adParamInput, , Me.txtSONo.Text)
    .Parameters.Append Prm(0, 1) 'SONo
    '--------------------------------------------------------------------
    Set Prm(0, 2) = .CreateParameter(, adInteger, adParamInput, , Me.cmbSupplier.Value)
    .Parameters.Append Prm(0, 2) 'SId
    '--------------------------------------------------------------------
    Set Prm(0, 3) = .CreateParameter(, adSmallInt, adParamInput, , Me.cmbPayTerm.Value)
    .Parameters.Append Prm(0, 3) 'PId
    '--------------------------------------------------------------------
    Set Prm(0, 4) = .CreateParameter(, adCurrency, adParamInput, , Me.StatusBar.Panels(3))
    .Parameters.Append Prm(0, 4) 'totAmt
    '--------------------------------------------------------------------
    Set Prm(0, 5) = .CreateParameter(, adCurrency, adParamInput, , 0)
    .Parameters.Append Prm(0, 5) 'advAmt
    '--------------------------------------------------------------------
    Set Prm(0, 6) = .CreateParameter(, adVarChar, adParamInput, 30, Me.txtPreparedBy)
    .Parameters.Append Prm(0, 6) 'Prepared
    '--------------------------------------------------------------------
    Set Prm(0, 7) = .CreateParameter(, adVarChar, adParamInput, 30, pubVPres)
    .Parameters.Append Prm(0, 7) 'Recommended
    '--------------------------------------------------------------------
    Set Prm(0, 8) = .CreateParameter(, adVarChar, adParamInput, 30, Me.txtApprovedBy)
    .Parameters.Append Prm(0, 8) 'Approved
    '--------------------------------------------------------------------
    Set Prm(0, 9) = .CreateParameter(, adVarChar, adParamInput, 30, Me.txtNotedBy)
    .Parameters.Append Prm(0, 9) 'Noted
    '--------------------------------------------------------------------
    Set Prm(0, 10) = .CreateParameter(, adVarChar, adParamInput, 50, IIf(Trim(Me.txtRemarks) = "", Null, Me.txtRemarks))
    .Parameters.Append Prm(0, 10) 'Remarks
    '--------------------------------------------------------------------
    Set Prm(0, 11) = .CreateParameter(, adDBTimeStamp, adParamInput, , Me.mskDate.Text)
    .Parameters.Append Prm(0, 11) 'TRDate
    '--------------------------------------------------------------------
    Set Prm(0, 0) = .CreateParameter(, adInteger, adParamInput, , Id)
    .Parameters.Append Prm(0, 0) 'SOId
    '--------------------------------------------------------------------
    MsgBox "Retval Before execute: " & RetVal      
    .Execute RetVal    
    MsgBox "Retval After execute: " & RetVal
    Call SetLastNo(33, Id)
    Call SetLastNo(34, No)
End With

i在同一条船上,发现所设定的nocount正在引起问题,因此在SQL开始时添加SET NOCOUNT OFF允许返回正确的记录计数。<<<<<<<<<<<<<</p>

-1的返回值确实有意义,如果您将其视为ADO,告诉呼叫者无法返回受影响的记录计数,但这只是我的假设。

这是一篇相关文章,讨论了设置Nocount对各个方面的效果,但主要集中在性能上。

最新更新