Member 11561472 Ответов: 1

Как подключиться к базе данных. accdb вместо базы данных. mdb


Проблема в том, что я не могу получить свой VB.Сетевое приложение для подключения к базе данных. accdb. Он будет подключаться только к базе данных. mdb. Я использую сообщество Visual Studio 2015.

Я добавил ссылки в свой проект на Microsoft.Офис.Ядро и Microsoft.Офис.Взаимодействие.Доступ.Дао к моему VB.Сетевой проект.

Если вместо того, чтобы использовать базу данных .accdb с моим приложением, я заменяю базу данных .mdb с тем же именем, мой код работает нормально.

Почему у меня не ВБ.Сетевое приложение подключается к базе данных. accdb. Что мне нужно сделать, чтобы заставить его распознать базу данных .accdb и запустить мой код?

Любая помощь от кого-то, кто уже решал этот вопрос раньше, будет очень признательна.

Что я уже пробовал:

Dim dbProvider As String
Dim dbSource As String
Dim con As New System.Data.OleDb.OleDbConnection
Dim cmd1 As New System.Data.OleDb.OleDbCommand
Dim CmdTxt As String

dbProvider = "Provider=Microsoft.ACE.OLEDB.12.0;"
dbSource = "Data Source=|DataDirectory|\AssetDatabase.accdb"
con.ConnectionString = dbProvider & dbSource
cmd1.Connection = con
con.Open()
 
Dim NameOfCompany As String = Me.txtCompany.Text

'Creaste tblAssetData for the new company
CmdTxt = "SELECT * INTO AssetDatabase.[tblAssetData-" & NameOfCompany & "] FROM DepreciationCalculator.tblAssetData"

cmd1.CommandText = CmdTxt
cmd1.ExecuteNonQuery()

Richard MacCutchan

Вы забыли объяснить, что происходит, когда вы пробуете вышеприведенный код.

Member 11561472

Что происходит, так это то, что я получаю сообщение об ошибке, которое гласит::

Необработанное исключение типа ' System. Data.Oledb. OleDbException ' произошло в System.Data.dll

Дополнительная информация: не удалось найти файл 'C:\Users\rkvjr\Documents\Visual Studio 2015\Projects\WindowsApplication2\WindowsApplication2\bin\Debug\Decorationcalculator.mdb'.


Как вы можете видеть из сообщения об ошибке, несмотря на то, что мое соединение с .# то # версия моей базы данных, Visual Studio ищет .MDB-компонента версия базы данных. Если я положу .MDB-компонента версия базы данных на месте .# то # база данных, код работает отлично.

Устанавливая соединения с двумя моими базами данных. accdb (AssetDatabase.accdb и Decorationcalculator. accdb), я следовал инструкциям, содержащимся в статье под названием at Пошаговое руководство: подключение к данным в базе данных Access (Windows Forms)

Я не могу понять, почему Visual Studio все еще настаивает на соединении с файлом базы данных .mdb и не распознает файл базы данных .accdb.

Помощь от кого-то, кто столкнулся с этой ситуацией и разрешил ее, была бы очень признательна.

Спасибо,
BobV365

Richard MacCutchan

Ваша строка подключения в приведенном выше фрагменте кода не совпадает с файлом, к которому ваш код пытается получить доступ. Я могу только предположить, что вы используете неправильную версию своей программы.

Member 11561472

Привет, Ричард. Фрагмент кода работает правильно, если у меня есть файлы AssetDatabase.mdb и DepreciationCalculator.mdb в папке Debug моего приложения. Как указывалось ранее, когда я извлекаю два файла .mdb и помещаю файлы AssetDatabase.accdb и DepreciationCalculator.accdb в папку Debug, мое приложение сообщает, что не может найти файл AssetDatabase.mdb. В ошибке всегда упоминается, что не удается найти файл AssetDatabase.mdb. Он полностью игнорирует тот факт, что я пытаюсь заставить свое приложение получить доступ к файлу AssetDatabase.accdb. На моем компьютере установлен Microsoft Office 365. Что мне нужно сделать, чтобы Visual Studio распознала файл .accdb?

Richard MacCutchan

Я только что запустил очень простой тест с использованием файла. accdb, и он отлично работает.

Member 11561472

Можете ли вы предоставить мне базовый тестовый файл, который, как вы сказали, Вы создали для тестирования файла .accdb? Я хотел бы посмотреть, работает ли он в моей системе. Я использую Windows 10. У меня также есть еще один компьютер с Windows 7. Большое спасибо за вашу помощь.

Richard MacCutchan

См. код ниже, чтобы построить простую базу данных.

RedDk

Попробуйте использовать нотацию 8dot3 для этой строки пути. А также попробуйте проверить проблему отключения, исследуя, можно ли подключить любую базу данных с помощью драйверов, доступных вам в интерфейсе Visual Studio, в частности в разделе/in (щелкните правой кнопкой мыши) "Обозреватель серверов". И конечно работать odbcad32.exe (из SysWOW64, его), чтобы получить лучшее представление о том, почему .# то # отличается от .МДБ. На моей коробке есть выбор, и я думаю,что есть также свойства, которые различимы для каждого. Удачи!

Member 11561472

Я добавил ссылку на компонент Microsoft Office 14.0 Access Database Engine и библиотеку объектов Microsoft Office 16.0. Теперь ошибка, которую я получаю, заключается в том, что он не может найти файл AssetDatabase.accdb. Так что, по крайней мере, теперь Visual Studio ищет файл .accdb, а не файл .mdb. Есть ли какие-либо другие ссылки, которые мне нужно изменить или добавить в мой VB?Net приложение, чтобы получить визуальную студию, чтобы признать .файл accdb? Я дважды проверил, чтобы убедиться, что файл .accdb существует в месте отладки.

Richard MacCutchan

Это не имеет ничего общего с Visual Studio, это просто IDE.

Проблема заключается в вашем коде. Единственный способ узнать, что происходит, - это пройти через код с помощью отладчика, чтобы точно узнать, что происходит на каждом шаге.

1 Ответов

Рейтинг:
2

Richard MacCutchan

Это C#, но преобразование его в VB.NET должно быть довольно просто. Или вы можете просто использовать Visual Studio для сборки исполняемого файла.

using System;
using System.Collections.Generic;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
        
            String connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=mydata.accdb";
            
            // Create the raw Database
            ADOX.Catalog cat = new ADOX.Catalog();
            cat.Create(connectionString);
            
            // now create a table with its columns
            ADOX.Table table = new ADOX.Table();
            table.Name = "Contacts";
            table.Columns.Append("FirstName", ADOX.DataTypeEnum.adWChar);
            table.Columns.Append("LastName", ADOX.DataTypeEnum.adWChar);
            table.Columns.Append("BirthDate", ADOX.DataTypeEnum.adDate);
            
            // add the table to the collection
            cat.Tables.Append(table);
            
            // Close the database
            ADODB.Connection con = cat.ActiveConnection as ADODB.Connection;
            if (con != null)
                con.Close();
            
            // We can now add some data records to the previously created table
            OleDbConnection conn = new OleDbConnection(connectionString);
            conn.Open();
            OleDbCommand cmd = new OleDbCommand("", conn);
            
            //  Now add some data records to the table            
            string strInsert = "INSERT INTO Contacts (FirstName, LastName, BirthDate) VALUES (?, ?, ?);";
            cmd.CommandText = strInsert;
            cmd.Parameters.AddWithValue("FirstName", "Georgy");
            cmd.Parameters.AddWithValue("LastName", "Porgy");
            cmd.Parameters.AddWithValue("BirthDate", new DateTime(1956, 3, 27));
            cmd.ExecuteNonQuery();
            
            cmd.Parameters["FirstName"].Value = "Fred";
            cmd.Parameters["LastName"].Value = "Nurk";
            cmd.Parameters["BirthDate"].Value = new DateTime(1961, 7, 12);
            cmd.ExecuteNonQuery();
            
            conn.Close();
        }
    }
}