0
Private Sub CmdValid_Click()
On Error GoTo ErrValid:
Dim LngExec As Long
Dim varCie

Dim ret As VbMsgBoxResult
Dim StrSql
Dim DblBalance
    If Me.SF.Form.Dirty Then
        Me.SF.Form.Refresh
    End If
    DblBalance = aaRound(aaRound(Me.SF.Form.TxtCreditTotal.Value, 2) - aaRound(Me.SF.Form.TxtDebitTotal.Value, 2), 2)


    If DblBalance <> 0 Then

        MsgBox "Credit must be equal to credit. Press Delete if you want to delete this journal entry, or enter the appropriate values", vbCritical, "Validation refused"
    Else
    '---- We have to create the two record into the General ledger detail

        StrSql = "EXEC SpValidGenLedDet " & str(Me.GLHCode)
        LngExec = aaExecuteSP(StrSql)
        If LngExec = 0 Then
            DoCmd.SetWarnings (False)
            StrSql = "EXEC SpDelGenLedDetTmp " & str(Me.GLHCode)
            LngExec = aaExecuteSP(StrSql)
            DoCmd.SetWarnings (True)
            ret = MsgBox("This entry is successfully validated. Do you want to create another entry ?" & Chr(13) & Chr(10) & "click YES to add a new one , NO to close this form", vbInformation + vbYesNo, "validation accepted")
            If ret = vbYes Then
                varCie = Me.CboGlHInternalCie
                DoCmd.GoToRecord , , acNewRec
                If Not IsNull(varCie) Then
                    Me.GlHInternalCie = CLng(varCie)
                End If
            Else
                DoCmd.Close acForm, Me.Name
            End If
        Else
            MsgBox "There was an error while Writing the accounting lines into the General ledger, retry to validate or press delete to cancel the transaction"
        End If
    End If
finValid:
    Exit Sub
ErrValid:
    MsgBox "Error during validation", vbCritical, "Error"
    Resume finValid

End Sub

上記のようにC#に変換する必要があるVBAコードがありますが、特定のことが行われている、または起こっている理由を理解できません

たとえば、上記のコードの下Private Sub CmdValid_Click()にあり、このボタンのプロパティをクリックすると、前色が -2147483630 の値に設定されます。コードを実行してブレークポイントでチェックすると、 LngExec で値 -2147483630 が得られます。

ただし、プロシージャ SpDelGenLedDetTmp は、where 句を使用した単純な削除プロシージャです。

    **

    /****** Object:  StoredProcedure [dbo].[SpDelGenLedTmp]    Script Date: 10/28/2012 12:27:47 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    ALTER  PROCEDURE [dbo].[SpDelGenLedTmp]
        (@GHDHeader_1   [int])
    AS DELETE [ABOUSQL].[dbo].[TblGenLedDetTmp] 
    WHERE 
        ( [GHDHeader]    = @GHDHeader_1)

**

Function aaExecuteSP(StrSql) As Long
On Error GoTo ErrGetData
Dim cnn As ADODB.Connection
Dim isok
Set cnn = aaDbConnect()

cnn.Execute (StrSql)

aaExecuteSP = 0
FinGetData:
    Exit Function
ErrGetData:
   If Err.Number <> 0 Then
    aaExecuteSP = Err.Number
End If
    Resume FinGetData



End Function

私はVBAが初めてです

感謝と敬意

4

2 に答える 2

0

joeが指摘したように、表示される戻り値はエラー番号であるため、ランダムな負の整数だけでなく、これを反映するように回答を更新します。

その値を直接使用して何かを変更する場合は、C#に変換するだけで安全かもしれません。長い間VBAを使用したことはありませんが、面白いことがたくさんあります。

UPDATE 削除用に保存されているプロシージャ名が同じではありません。コード内のものは、提供した保存されたプロシージャスニペットとは異なります。

于 2012-10-28T07:45:59.463 に答える
0

cnn.Execute関数の行でaaExecuteSPエラー -2147483630 が発生しているようです。のエラー ハンドラーは、aaExecuteSPこのエラー コードを呼び出し元に返しますが、これをデバッグするのに役立つ他の多くの有用な情報を破棄します。

Err.Message 
cnn.Errors collection

デバッガーをステップ実行し、 の "ErrGetData:" に続く行で中断し、aaExecuteSPこれらのプロパティを調べることをお勧めします。

ところで、エラー コードがたまたまボタンの ForeColor プロパティ ( vbButtonText = &H80000012 = -2147483630 )と同じであるのは偶然だと思います。

于 2012-10-28T09:21:38.950 に答える