К сожалению, с .net вы не можете добавлять или делать запросы к таблицам между двумя разными соединениями.
Однако вы МОЖЕТЕ получить доступ.
Если у вас есть рабочий SQL-запрос PostgreSQL, который возвращает записи, вы можете просто сохранить этот запрос в Access (как сквозной запрос.
Теперь вы можете использовать этот запрос в Access и отправить его в новую локальную таблицу в Access. (Access поддерживает эту концепцию, .net - нет)
Таким образом, вы можете либо добавить, либо «составить таблицу» этих данных.
И что еще интереснее, вы можете даже добавлять различные соединения в Access. Таким образом, вы можете добавить из таблицы PostgreSQL слова MySQL или Oracle или FoxPro внутри доступа.
Опять же, вы не можете сделать это в .net.
Итак, предположим, что работающий необработанный запрос SQL (в формате PostgreSQL) работает в PostgreSQL? Возьмите тот же самый рабочий запрос и сохраните его в Access как сквозной запрос.
Затем в Access вы можете добавить таблицу в Access (при условии, что структура таблицы будет такой же:
VBA (код доступа)
Dim strSQL as string
strSQL = "INSERT INTO LocalTable SELECT * from QryPassR"
Currentdb.Execute strSQL
И если вы хотите СДЕЛАТЬ новую таблицу в Access с такой же структурой, поэтому создайте таблицу (не добавляйте), вы можете перейти:
Dim strSQL as string
strSQL = " SELECT * INTO LocalTable FROM qryPassR"
Currentdb.Execute strSQL
Вы также можете в коде VBA изменить PostgreSQL, чтобы включить критерии для этого выбора.
(воздушный код - не учитывает проблему внедрения SQL).
Dim strCity as string.
strCity = inputbox("What city to pull from PostGres?")
dim strSQL as string
strSQL = "select * from tbleHotels where City = '" = strCity & "'"
With currentdb.QueryDefs("QryPassR"
.SQL = strSQL
End with
strSQL = "INSERT INTO LocalTable SELECT * from QryPassR"
Currentdb.Execute strSQL
‘выше скопирует все записи из PostGreSQL города = Эдмонтона в таблицу Access (в данном примере называемую локальной таблицей).
И, как уже было отмечено, вы не ограничены «LocalTable» таблицей доступа, это может быть таблица FoxPro, MySQL, SQL-сервер и т. Д. Таким образом, вы не ограничены JUST использованием таблиц Access, указанных выше, с вашим данным SQL. Таким образом, можно использовать любую связанную таблицу в Access, включая таблицы, которые указывают на другие системы баз данных.
Если вы должны использовать .net, тогда вы должны:
Подключиться к первой базе данных.
Выполните запрос, чтобы получить и заполнить таблицу данных.
Подключиться ко второй базе данных.
Создать (открыть) таблицу данных на основе второй базы данных.
Зацикливание (повторение) каждой строки из первого соединения с данными и копирование строки во второй объект данных (на основе 2-го соединения).
Вы должны делать построчное копирование. (но есть метод ImportRow для данных .net, так что вам не нужно циклически копировать столбец за столбцом.
(но вы должны цикл за строкой).
В Access это зацикливание не требуется, и фактически вы можете использовать команды SQL, которые работают с обеими таблицами, в том числе в соответствии с приведенными выше таблицами make и append, и вы даже можете выполнять соединения отношений между такими таблицами - даже те, которые основаны на разных соединения (источники данных).
Редактировать
Судя по комментариям, выглядит простой вопрос:
После того, как я вставил строку в Access, как я могу получить последний идентификатор (идентификатор) этой вставки?
Следующий код vb.net сделает это:
Импортирует System.Data.OleDb
Dim MyCon As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Test2\test44.accdb")
MyCon.Open()
Dim strSQL As String = "insert into tblHotels2 (City) VAlues('Edmonton')"
Dim cmd As New OleDb.OleDbCommand(strSQL, MyCon)
Dim r As Integer
cmd.ExecuteNonQuery()
cmd.CommandText = "select @@IDENTITY"
r = cmd.ExecuteScalar
Debug.Print(r)
Выходные данные = последний идентификатор ПК (автономный номер)