2015-12-09 37 views
0

我對編程非常陌生,所以我需要一些額外的幫助來弄清楚這一點。我有一個VB .NET應用程序,它爲64位應用程序提供了一個加載項。我試圖完成的任務是打開到32位MS Access數據庫的連接並從表中查找數據。在這種情況下,64位應用程序無法與32位數據庫連接。你可以從我的解釋中得知我幾乎不知道我在說什麼。在64位VB.Net應用程序中連接到32位MS Access DB

我對這個主題的所有研究都得出了相同的結論,我需要使用進程間通信,但不解釋這是如何完成的以及我需要做什麼來實現此目的。

這裏是在VB .NET應用程序我的連接設置:

Public Class MSDatabase 
    Dim provider As String 
    Dim dataFile As String 
    Dim connString As String 
    Public myConnection As OleDbConnection = New OleDbConnection 
    Public dr As OleDbDataReader 

    Public Sub LoadDatabase() 
     provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" 
     dataFile = "\\server3\databases\Quotes.accdb" 
     connString = provider & dataFile 
     myConnection.ConnectionString = connString 
    End Sub 

    Public Function LookUpPart(D As Double, E As Double, F As Double, G As Double, Grade As String) As Boolean 

     myConnection.Open() 
     Dim str As String 
     str = "SELECT PartNumber, D, E, F, G, Grade FROM Parts" 
     Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection) 
     dr = cmd.ExecuteReader 
     While dr.Read() 
      If D = dr("D") And E = dr("E") And F = dr("F") And G = dr("G") And Grade = dr("Grade") Then 
       Return True 
      End If 
     End While 
     myConnection.Close() 
     Return False 
    End Function 
End Class 

這當我嘗試打開與該錯誤消息,指出提供商Microsoft.ACE.OLEDB.12.0未註冊的連接失敗在本地機器上。

我想知道的是如何使用進程間通信將它設置爲從我的64位應用程序調用的32位應用程序。

任何幫助,非常感謝!

+0

有沒有這樣的事情作爲一個32位的訪問表。桌子就是。它是32位或64位的OLE DB提供程序。爲什麼不簡單地編譯應用程序來定位x86平臺並在32位進程中運行? IPC獲取Access數據聽起來相當愚蠢。 – jmcilhinney

+0

嗯,仔細閱讀這個問題,我現在看到了這個問題。我可以假設安裝64位ACE是不可能的嗎? – jmcilhinney

+0

對不起,我應該採取不同的措辭。我必須使用32位OLE DB提供程序,因爲正在使用的MS Access應用程序是32位。我無法以x86爲目標,因爲這樣的話,Add-In的dll必須註冊爲32位,並且不會爲其編寫的64位程序運行。比你的回覆!這很快! – Steve771

回答

1

感謝jmcilhinney他們幫助解決這個問題。閱讀問題下的評論,看看我們如何到達這個解決方案。

解決方案:使用通過TCP套接字連接進行的進程間通信,無論主機和客戶端的位置如何,都可以來回傳遞數據。在這種情況下,爲附加到其他軟件而編寫的64位vb.net程序可以設置TcpClient,它使用Process.Start首先在爲x86平臺開發的控制檯應用程序中運行TcpListener,然後將偵聽器信息發送給數據庫通信。作爲32位控制檯應用程序的偵聽器能夠找到並使用32位提供程序進行OLEDB連接,並從Access DB中提取所需的數據。然後將數據發送回64位應用程序中的客戶端。

對於TCP套接字連接,您可以在vb.net的客戶端/服務器TCP連接上使用簡單的YouTube教程。

對於發送數據,我使用了分隔符,以便使用Split可以很容易地在另一端分隔數據。

+0

是的你是對的。我已更新答案,不包括鏈接。 – Steve771

+0

好動:-) .. – GhostCat

0

我們遇到了同樣的問題,並按照the instructions found here(查找標題爲「解決方案」一節)解決問題。在那裏你可以找到你需要安裝的適當驅動程序的鏈接。

安裝似乎是必要的,因爲在Office 2010中,Microsoft更改了訪問Access,Excel等的驅動程序。所以它不是你的代碼的問題,但它的運行環境。

+0

謝謝你的解決方案。不幸的是,我已經嘗試過,並沒有成功。機器上存在32位辦公產品時,無法安裝64位驅動程序。由於我的應用程序必須在64位平臺上運行,因此它只會查找64位提供程序(這是我的理解)。 – Steve771

+0

這是一個問題。我也遇到了這個問題,只能通過更換32位辦公室來解決這個問題。我最終提供了我的產品的32位和64位版本。我希望你找到更好的解決方案。 – Sascha

+0

感謝您花時間幫助。非常感謝您的回答! – Steve771

相關問題