2012-10-11 79 views
0

我通過COM連接到SAP,使用拖動到表單中的ActiveX控件。 在VB6我寫:SAP COM VB6 VB.NET行爲差異

Private Sub Form_Terminate() 
    SAPBAPIControl.Connection.Logoff 
End Sub 

Private Sub SAPLogonControl_Click() 
    Set SAPBAPIControl.Connection = SAPLogonControl.NewConnection 
    SAPBAPIControl.Connection.Client = "100" 
    If SAPBAPIControl.Connection.Logon(0, False) Then 
     MsgBox SAPBAPIControl.Connection.IsConnected 
    End If 
End Sub 

2010年VB.NET我寫:

Public Class MainForm 
    Private Sub MainForm_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing 
    AxSAPBAPIControl1.Connection.Logoff() 
End Sub 

    Private Sub AxSAPLogonControl1_ClickEvent(sender As Object, e As System.EventArgs) Handles  AxSAPLogonControl1.ClickEvent 
     AxSAPBAPIControl1.Connection = AxSAPLogonControl1.NewConnection() 
     AxSAPBAPIControl1.Connection.Client = "100" 
     If AxSAPBAPIControl1.Connection.Logon(0, False) Then 
      MsgBox(AxSAPBAPIControl1.Connection.IsConnected) 
     End If 
    End Sub 
End Class 

,並結了:

EINE Ausnahme(一個吧機率)DES Typs「系統。 AccessViolationException「mstlib.dll aufgetreten中的ist。 in .Client =「100」

VB6正常工作。

有沒有人有一個想法如何連接對象

由於轉移到其他類VB.NET的幫助。

+1

獲取有關訪問衝突導致COM服務器崩潰的幫助需要供應商提供支持。 –

+0

謝謝你的建議。但供應商聯繫的將是:微軟和SAP。對於讓他們解決問題的機會會有什麼猜測?因此,在關閉連接時可能會更好,並且每次需要不同的功能時重新打開連接。我只是想避免這一點。 –

回答

-2

而不是VB.NET 2010嘗試與C#並讓我們知道你是否仍然有同樣的問題。當我嘗試使用vb.net進行低通信時,我的程序崩潰,然後將一些代碼部分更改爲dll在C#中,一切正常。

之前,您將創建一個DLL,你應該嘗試翻譯的例子發佈到C#,然後看它是否固定

歡呼

+0

這個評論的目的是什麼? –

+0

而你的評論的目的是什麼。在我發生的一個程序的開發過程中,這就是我解決這個問題的方法。如果有人在我沒有浪費那麼多時間之前告訴我的話。現在,如果這不適合你,但也許有人會服務。該想法是添加不減 –

+0

感謝您的建議,我嘗試了C#,但遇到了不同的問題,這導致我離我的目標太遠。 –

0

在猜測: 您在舊VB6代碼中使用集,我覺得影響對象,在VBA中發揮作用。 你可以嘗試像

AxSAPBAPIControl1 = AxSAPBAPIControl1.Connection = AxSAPLogonControl1.NewConnection() 

我想AxSAPBAPIControl1給你一個連接對象,並不會修改本身 - 所以你打開一個新的連接,這是從來沒有使用過,然後再「未連接」使用AxSAPBAPIControl1 。 我不知道SAP-Com,但這種類型的krad有時會發生在msoffice.interop中。 請給我一些反饋。

+0

謝謝,我試過這個,但VB拒絕了,因爲類型錯誤。添加CTYPE tpyecast導致語法錯誤。 –