Maciej Los
[РЕДАКТИРОВАТЬ]
Дигиграфика писала::
Мое местоположение в базе данных первой таблицы - C:\Users\Digi\Source\Soft\BillData.accdb
А во-вторых, расположение базы данных таково:
C:\Users\Digi\Source\Soft\Master\GroupList.accdb
Обе эти базы данных находятся в разных местах. И я хочу присоединиться к ним
У вас есть два способа добиться этого:
1) Создайте одну базу данных и
а) связать все таблицы из всех баз данных
или
б) переместить (импортировать) все таблицы из разных баз данных в одну
Видеть:
Импорт или ссылка на данные в другой базе данных Access - Access[
^]
Затем используйте этот запрос:
SELECT t1.ID, t2.Group_Name, t1.Voucher, t1.Bill, t3.Vendor_Name, t3.Vendor_Address, t1.Amount
FROM FirstTable t1
INNER JOIN SecondTable t2 ON t1.Group_Id = t2.Group_Id
INNER JOIN ThirdTable t3 ON t1.Vendor_Id = t3.Vendor_Id
--WHERE t1.Group_Id = ?
Я бы переосмыслил использовать этот способ.
2) Использование
в статье[
^]:
Вам нужно будет изменить тело запроса таким образом:
SELECT t1.ID, t2.Group_Name, t1.Voucher, t1.Bill, t3.Vendor_Name, t3.Vendor_Address, t1.Amount
FROM FirstTable t1 --this database is initial database (defined in connection string)
INNER JOIN SecondTable IN 'C:\Users\Digi\Source\Soft\Master\GroupList.accdb' t2 ON t1.Group_Id = t2.Group_Id
INNER JOIN ThirdTable IN 'C:\Users\Digi\Source\Soft\ThirdDatabase.accdb' t3 ON t1.Vendor_Id = t3.Vendor_Id
WHERE t1.Group_Id = ?
Выше также должно работать, но это сложнее.
Итак, измененный код может выглядеть так:
Dim firstFileName As String = "C:\Users\Digi\Source\Soft\BillData.accdb"
Dim secondFileName As String = "C:\Users\Digi\Source\Soft\Master\GroupList.accdb"
Dim thirdFileName As String = "C:\Users\Digi\Source\Soft\Master\ThirdDatabase.accdb"
Dim sConStr = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};;Persist Security Info=False;", firstFileName)
Dim dt As DataTable = New DataTable()
'1.
Using connection AS OleDbConnection = New OleDbConnection(sConStr)
Dim sql As String = String.Format("SELECT t1.ID, t2.Group_Name, t1.Voucher, t1.Bill, t3.Vendor_Name, t3.Vendor_Address, t1.Amount{0}FROM FirstTable t1{0} INNER JOIN SecondTable IN '{1}' t2 ON t1.Group_Id = t2.Group_Id{0} INNER JOIN ThirdTable IN '{2}' t3 ON t1.Vendor_Id = t3.Vendor_Id{0}WHERE t1.Group_Id = ?", vbCrLf, secondFileName, thirdFileName)
connection.Open()
'2.
Using command As OleDbCommand= New OleDbCommand(sql, connection)
command.Parameters.Add(New OleDbParameter() With {.OleDbType = OleDbType.VarChar, .Value=2})
'3.
Dim reader As OleDbDataReader = command.ExecuteReader()
'4.
dt.Load(reader)
End Using
End Using
'load data into dgv component
DataGridView1.DataSource = dt
Строки подключения доступа - ConnectionStrings.com[
^]
The Digigraphy
Эй, вообще-то я пытаюсь реализовать его в c#. Я написал следующий код, как вы предлагаете. Но для этого требовалось OleDbConnection для каждой таблицы. Как мне это реализовать?
стр = "выбрать Т1.Код, Т2.Группа, Т1.Voucher_No, Т1.Bill_No, Т1.Дата, Т3.Vendor_Name от BillTable INNERJOIN Имя_группы Т1 Т2 Т1.И group_id = Т2.И group_id VendorList INNERJOIN Т3 на Т1.Vendor_Id = Т3.Vendor_Id ";
da = новый OleDbDataAdapter(str, cn);
The Digigraphy
До сих пор я пытался это сделать
DataTable dt = новый DataTable();
DataSet ds = новый набор данных();
ДС.столы.Добавить(dt);
строка masterlocation = @"C:\Users\PC\source\repos\Soft\bin\Debug\MasterList.accdb";
строка datalocation = @"C:\Users\PC\source\repos\Soft\bin\Debug\billdatabse.accdb";
string scontr = строка.Формат("Поставщик=Майкрософт.Туз.Oledb для.12.0;Источник данных={0};;сохранять сведения о безопасности=false; в", datalocation);
OleDbConnection connection = новый OleDbConnection(scontr);
string str = строка.Формат("выберите.ИД, б.Группа, в себя.Voucher_No, а.Bill_No, а.Дата, гр.Vendor_Name, а.Сумма от (BillTable как внутреннее соединение Имя_группы в '{1}' Б на.И group_id = б.И group_id) внутреннее соединение VendorList в '{1}' C на.Vendor_Id = гр.Vendor_Id ", datalocation, masterlocation);
соединение.Открыть();
OleDbCommand command = new OleDbCommand(str, соединение);
OleDbDataReader reader = команда.Метода executereader();
dt.Load(считыватель);
DataGridView1.Источник данных = ДТ.DefaultView;
Все еще получаю ту же ошибку
*Я сделал несколько изменений в базе данных и сделал 3 базы данных до 2, 1-для всех счетов и других для MasterList