Используя MS Access, через VBA я пытался обновить основную таблицу базы данных Access из идентично структурированной таблицы внешней базы данных Access.Те же столбцы, те же поля.Внешние базы данных используются для обновления центральной главной базы данных.
То, что я пытался разработать, - это строка SQL, которая добавляет только те записи, которые полностью уникальны.Поскольку нет никаких внешних ключей или уникальных идентификаторов для входящих данных, на которые можно ссылаться, я должен проверить каждое поле, чтобы убедиться, что нет точных дубликатов.Итак, если в таблице есть 2 поля, если записи не пройдут логический тест
intTable.field1 = extTable.field1 And intTable.field2 = extTable.field2
, то это те записи, которые будут добавлены.
Код, который я придумал, приведен ниже, икогда он работает, он пытается добавить (голосом Гэри Олдмана) ВСЕ.Я не могу выяснить, что может быть не так с ним, так как он почти игнорирует WHERE
или WHERE NOT EXIST
.Я перепробовал десятки небольших правок и альтернативных версий.Любой из них добавляет все или ничего.
INSERT INTO Table1
SELECT field1, field2, field3, field4, field5
FROM [;DATABASE=C:\extDB.accdb].[Table1] sourceDB
WHERE NOT EXISTS (SELECT *
FROM [;DATABASE=C:\extDB.accdb].[Table1] sourceDB1
WHERE ('Table1.[field1]'='sourceDB1.[field1]' And
'Table1.[field2]'='sourceDB1.[field2]' And
'Table1.[field3]'='sourceDB1.[field3]' And
'Table1.[field4]'='sourceDB1.[field4]' And
'Table1.[field5]'='sourceDB1.[field5]'));
ФИНАЛЬНЫЙ КОД (после реализации решения ArcherBird):
INSERT INTO Table1
SELECT field1, field2, field3, field4, field5
FROM [;DATABASE=C:\extDB.accdb].[Table1] sourceDB
WHERE NOT EXISTS (SELECT *
FROM [;DATABASE=C:\extDB.accdb].[Table1] sourceDB1
WHERE ((sourceDB.[field1] = sourceDB1.[field1] Or (sourceDB.[field1] IS NULL And sourceDB1.[field1] IS NULL)) And
(sourceDB.[field2] = sourceDB1.[field2] Or (sourceDB.[field2] IS NULL And sourceDB1.[field2] IS NULL)) And
(sourceDB.[field3] = sourceDB1.[field3] Or (sourceDB.[field3] IS NULL And sourceDB1.[field3] IS NULL)) And
(sourceDB.[field4] = sourceDB1.[field4] Or (sourceDB.[field4] IS NULL And sourceDB1.[field4] IS NULL)) And
(sourceDB.[field5] = sourceDB1.[field5] Or (sourceDB.[field5] IS NULL And sourceDB1.[field5] IS NULL)) ));