2012-10-28 54 views
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 

我有一個VBA代碼,我需要轉換爲C#上面爲什麼某些事情正在做或發生VBA混淆爲什麼這個值在存儲過程執行時返回?

例如上面的代碼是在Private Sub CmdValid_Click()並在但是我不能夠得到儘可能給予此按鈕的屬性單擊forecolor設置爲值-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

感謝和問候

+0

既然你從來沒有表現出什麼'aaExecuteSP'的樣子,這是不可能知道爲什麼這麼巧其返回值是什麼。 – Tomalak

+0

我已添加代碼 – vini

+0

閱讀[KB185125:如何使用VBA/C++/Java調用帶有ADO查詢的存儲過程](http://support.microsoft.com/kb/185125/en-us)。主要是代碼示例中的「Open recordset.'部分。 – Tomalak

回答

0

由於joe指出返回值被看到是一個錯誤號,所以更新答案來反映這一點,而不僅僅是一個隨機的負整數。

如果這個值被直接用來改變任何東西,它可能是安全的,只是將它轉換爲C#如何最好地看到適合。,沒有在長時間使用VBA,但它充滿了有趣的東西

UPDATE 存儲的刪除程序名稱不相同。代碼中的代碼與您提供的存儲過程代碼段不同。

+0

最奇怪的部分是這個刪除過程沒有得到執行:O – vini

+0

你是否已經通過代碼來查看它是否可能失敗,比如在包裝存儲過程調用的函數中插入一個斷點 – Modika

+0

我指的是第二個過程不是第一個StrSql =「EXEC SpDelGenLedDetTmp」&str(Me.GLHode) LngExec = aaExecuteSP(StrSql) – vini

0

它看起來像函數aaExecuteSP中的行cnn.Execute正在引發錯誤-2147483630。在aaExecuteSP返回此錯誤代碼給調用者的錯誤處理程序,而是將其捨棄了很多其他有用的信息,這將有助於你調試此:

Err.Message 
cnn.Errors collection 

我建議你一步通過與調試,在線路下面的突破「ErrGetData:」在aaExecuteSP中,並檢查這些屬性。

BTW,我認爲這只是錯誤代碼正好是一樣的按鈕的前景色屬性(這是vbButtonText = &H80000012 = -2147483630

+0

ErrGetData: 如果Err.Number的<> 0,則 aaExecuteSP = Err.Number的 結束如果 恢復FinGetData – vini

+0

燁u的右其來差錯部分和不執行 – vini

相關問題