Запрос новичка: использование VBA в Access для импорта файла CSV и добавления только уникальных дат - PullRequest
0 голосов
/ 14 января 2020

Я не использовал VBA ~ 15 лет и пытаюсь вернуться к нему. Вот что я ищу:

У меня есть существующая таблица («Сообщения»), которая отслеживает данные социальных сетей. Я хочу импортировать файл .csv, который содержит новые данные. Проблема в том, что файл .csv, который я экспортирую из внешней службы, содержит данные за три месяца. Что я хотел бы сделать, это (1) открыть файл .csv, (2) определить каждую строку на основе даты, которая еще не существует в моей таблице «Записи», а затем (3) импортировать данные для новая строка без изменения каких-либо данных, уже существующих в таблице.

Есть мысли о том, как лучше начать работу, или фрагменты кода? Я копался в форумах, но не нашел то, что мне нужно.

На этапе импорта я пытаюсь:

DoCmd.TransferText TransferType:=acImportDelim, TableName:="tblPosts", FileName:="C:\Users\[myname]\Desktop\Historical Reports\Posts.csv", HasFieldNames:=True

К сожалению, у меня несколько иные имена полей, чем имена столбцов. Я предполагаю, что мне нужно пропустить первую строку .csv и затем создать пользовательский оператор SQL Insert?

1 Ответ

0 голосов
/ 14 января 2020

Рассмотрим запрос SQL (так как механизм MS Access может напрямую запрашивать файлы CSV), который выполняет классические c дубликаты запросов на избежание с NOT IN, NOT EXISTS, LEFT JOIN / IS NULL. Настройте имена столбцов, включая Дата соответственно:

INSERT INTO Posts (col1, col2, col3)
SELECT t.col1, t.col2, t.col3)
FROM [text;database=C:\Users\[myname]\Desktop\Historical Reports].Posts.csv AS t
LEFT JOIN Posts p
  ON t.Date = p.Date
WHERE p.Date IS NULL;


INSERT INTO Posts (col1, col2, col3)
SELECT t.col1, t.col2, t.col3)
FROM [text;database=C:\Users\[myname]\Desktop\Historical Reports].Posts.csv AS t
WHERE t.Date NOT IN
  (SELECT p.Date FROM Posts p);


INSERT INTO Posts (col1, col2, col3)
SELECT t.col1, t.col2, t.col3)
FROM [text;database=C:\Users\[myname]\Desktop\Historical Reports].Posts.csv AS t
WHERE NOT EXISTS
  (SELECT 1 FROM Posts p
   WHERE p.Date = t.Date);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...