2016-09-15 4 views
0

У меня проблема с объяснением проблемы при работе с VBA и VB.NET. Я запускаю проект в VBA с необходимыми данными доступа. Я использовал ADO (Активные данные объекта 6.1), все работает отлично с этим примером кода:Различные в VBA и VB.NET для объекта ADO

Option Explicit 
Private uConnect As ADODB.Connection 
Private uCommand As ADODB.Command 
Private uRecordset As ADODB.Recordset 
Public Sub openConnection() 
On Error GoTo ERRHANDLE: 
Dim sConnection As String 

sConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
       "Data Source=" & ThisWorkbook.Path & "\" & "database.xlsx;" & _ 
        "Extended Properties=Excel 12.0;" 

     'declare 

Set uConnect = New ADODB.Connection  'give memory 

uConnect.ConnectionString = sConnection 
uConnect.Open 

ERRHANDLE: 
If Err.Number <> 0 Then 
    MsgBox Err.Description, vbCritical, "Error" 
End If 

End Sub 

Когда я начинаю еще один проект с VB.NET с такой же ситуации. Сначала я пытаюсь COM ссылку на ADO (активные данные объекта 6.1) или с помощью ссылки на сборку ADODB и не работает с ошибкой «Provider не найден», код:

Public Class Input 
    Private Const connstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & 
              "Data Source=" & sSource & ";" & 
              "Extended Properties=Excel 12.0;" 

    Private Sub btnGetData_Click(sender As Object, e As EventArgs) Handles btnGetData.Click 
     Dim cn As New Connection 
     Dim da As New Recordset    
     Dim sSQL As String 

     Try 
      My.Computer.Audio.PlaySystemSound(SystemSounds.Exclamation) 
      da = New Recordset 
      cn = New Connection 
      cn.ConnectionString = connstring 
      cn.Open() 

      MessageBox.Show(cn.State.ToString) 
      cn.Close() 

     Catch ex As Exception 
      MessageBox.Show(ex.Message, "Database Input Error") 

     End Try 

    End Sub 
End Class 

Моя система выиграть 10. 64 бит. офис 64 бит.

Я нашел в Интернете решение для установки, Access Database Engine. Проблема решена для второго случая. Но почему это различие в VBA и VB.NET, почему VBA не нужно устанавливать больше движка для запуска.

+0

, что если вы измените проект для запуска, как '' x86' или AnyCpu' я бы попытаться изменить свойство проекта на '. x86' также убедитесь, что вы не получаете ссылку от GAC по сравнению с тем, что у вас есть в вашей ссылке на проект, также посмотрите на изменение свойства 'CopyLocal =' для этой Dll на 'True' – MethodMan

+3

Зачем использовать библиотеку COM ADODB вместо использования управляемого поставщика, например 'System.Data.Odbc'? – Comintern

+0

@MethodMan: Я пытаюсь как x86, так и x64 работать не будет, пока не установлю механизм доступа к базе данных [link] (http://www.connectionstrings.com/the-microsoft-ace-oledb-12-0-provider-is- not-registered-on-the-local-machine /) –

ответ

0

Это не прямой ответ, но похоже, что вы пытаетесь перейти от vba к vb.net с подключением к базе данных. Здесь я использую несколько различных проектов vb.net. Надеюсь, он поможет вам плавно перейти.

я узнал трудный путь, что не все в УВЕ непосредственно переводятся в VB

Imports System.Data.OleDb 

    Dim provider As String 
    Dim dataFile As String 
    Dim connString As String 

    Public myConnection As OleDbConnection = New OleDbConnection 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" 
    dataFile = "pathto.accdb" 
    connString = provider & dataFile 
    myConnection.ConnectionString = connString 
    End Sub 

    Private Sub NextSub() 

     str = "sql statement;" 
     Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection) 
     dr = cmd.ExecuteReader 

     While dr.Read() 

      'do stuff with teh reader 

     End While 

     myConnection.Close() 
    End Sub 
+0

Спасибо за вашу помощь, однако это не работает для моего дела. Та же ошибка, о которой я упоминаю. –

Смежные вопросы