Darrell de Wet Ответов: 3

Вставить в Select с двумя разными базами данных


Всем привет.

Я пытаюсь архивировать данные из одной базы данных в другую базу данных.

Мне потребовалось несколько часов, чтобы собрать этот кусок кода - он не работает, и я не могу понять, почему.

Dim DB_FROM As String = GlobalVariables.DBPath & GlobalVariables.DBName
Dim DB_TO As String = GlobalVariables.ArchiveDBPath & GlobalVariables.ArchiveDBName

Dim cnFrom As New OleDb.OleDbConnection
Dim cnTo As New OleDb.OleDbConnection
Dim strSQL As String

cnFrom.ConnectionString = "Provider=" & cp & " Data Source=" & GlobalVariables.DBPath & GlobalVariables.DBName & ";Jet OLEDB:Database Password=xxx;"
cnFrom.Open() 'Open the connection

cnTo.ConnectionString = "Provider=" & cp & " Data Source=" & GlobalVariables.ArchiveDBPath & GlobalVariables.ArchiveDBName & ";Jet OLEDB:Database Password=xxx;"
cnTo.Open() 'Open the connection

strSQL = "INSERT INTO Purchase_Order SELECT * FROM Purchase_Order IN '" & DB_FROM & "' WHERE Po_Number = '" & PoNumber & "'"

da = New OleDb.OleDbDataAdapter(strSQL, cnTo)

cnFrom.Close()
cnTo.Close()




Я не уверен, что проблема заключается в операторе SQL

INSERT INTO Purchase_Order SELECT * FROM Purchase_Order IN 'C:\Users\Darrell\Databases\DB-TEST\TEST_Commercial_DB.accdb' WHERE Po_Number = 'CZ13-01-001 / 275WK'


или в

da = New OleDb.OleDbDataAdapter(strSQL, cnTo)


Любая помощь здесь будет чрезвычайно признательна

Даррелл

3 Ответов

Рейтинг:
2

Amol_B

Привет,

я думаю, что вы делаете что-то другое. Ваш запрос просто вставит запись одной и той же таблицы в себя (дублирование!) С

da = New OleDb.OleDbDataAdapter(strSQL, cnTo)
может одновременно использовать только одно соединение.


если это был sql ,то для достижения этой цели я использовал имя базы данных перед именем таблицы.любить
INSERT INTO [DBNAME1].[tablename] SELECT * FROM [DBNAME2].[tablename]


Рейтинг:
0

Maciej Los

Я не уверен, что вы можете использовать в статье[^] для извлечения записей из разных баз данных (файл MS Access) с помощью VB.NET... но попробуйте вы должны быть полностью уверены, что обе таблицы имеют одинаковую структуру данных.

Вместо вашего запроса используйте:

INSERT INTO TableName (Field1, Field2, Field3, ..., FieldN)
SELECT Field1, Field2, Field3, ..., FieldN
FROM TableName IN 'FullPath'


Подробнее о компании:
В предложении (MS Access SQL)[^]
Доступ к внешним данным с помощью предложения IN[^]

Дай мне знак, если это сработает для тебя ...

Другая идея заключается в том, чтобы связать таблицу из исходной базы данных с другим именем, например: SrcTableName Затем попробуйте вставить данные с помощью:
INSERT INTO TableName (FiedlsCollection)
SELECT FieldsCollection
FROM SrcTablename


Вот вам идея: Как программно обновить связанные таблицы с помощью VB.net-что?[^], но не полностью реализован ;(
Повторное связывание таблиц MS Access с VB.NET 2010 год[^] ;)
http://www.microsoftaccessexpert.com/Microsoft-Access-Code-LinkTable.aspx[^] на VBA

Больше:
Связывание таблиц в проекте Access с помощью мастера связывания таблиц (ADP)[^]
Об импорте и связывании данных и объектов базы данных[^]
Как использовать Microsoft Visual Basic .Сеть для подключения к базе данных Microsoft Access и извлечения данных[^]


Рейтинг:
0

Jeffpete

Это работает для меня ...

Общественные суб CopyTableToLogDB(Имятаблицы как строку, вы видите con1 как adodb.Связи, CON2 как adodb.Подключение)
Dim RSIn как новый набор записей ADODB.
Dim RSOut как новый набор записей ADODB.
Dim SQL как строка
Dim i1 как целое число

SQL = "Select * From" & TableName
Рсин.Откройте SQL, CON1
SQL = "Select "
Для i1 = 0 - RSIn.Поля.Количество - 1
SQL = SQL &rsin.Поля(i1).name & ","
Следующий i1
В SQL = левый(среда SQL, лен(для SQL) - 1) &ампер; " от "&амп; Имятаблицы &ампер; " где 1 = 2"
Рсут.Open SQL, CON2, adOpenDynamic, adLockOptimistic
Пока не RSIn.EOF
Рсут.метод AddNew
Для i1 = 0 - RSIn.Поля.Количество - 1
Рсут.Поля(i1).Value = RSIn.Поля(i1).значение
Следующий i1
RSIn.Метод MoveNext
Венд
Рсут.UpdateBatch
RSIn.Close
Рсут.Закрывать
Конец Подводной Лодки


Richard Deeming

Вопрос был о том, что VB.NET; почему вы опубликовали решение VBA?

(Или, если это подразумевается VB.NET: почему вы все еще используете древнюю библиотеку ADODB в .NET, когда ADO.NET был доступен в течение почти 20 лет?)