Получение количества затронутых записей по запросу действия в VBA - PullRequest
0 голосов
/ 14 декабря 2018

Мне интересно, можно ли выбрать переменную, которая используется MS Access при вставке определенного количества новых строк данных в таблицу, что происходит во время выполнения VBA.

Снимок экрана уведомления о доступе MS (на немецком языке):

Screenshot of the MS Access Notification (in German)

В этом случае MS Access уведомляет меня о том, что в середине работыСценарий VBA 2327 новые строки данных добавляются в таблицу.Я не программист, но я чувствую, что эта переменная должна храниться где-то (по крайней мере, временно).

Кто-нибудь знает, как выбрать / получить доступ к этому номеру из окна, когда оно появляется, и затем сохранить его в целочисленном VBA для дальнейшего использования в будущем?

Обновление:

По сути, у меня есть основная база данных, которая должна ежедневно обновляться файлом импорта.

На первом этапе выполняется проверка уже существующих наборов данных, которые, следовательно, будут обновляться только с помощью запроса UPDATE.

UPDATE ReiseMaster
INNER JOIN Update_Import
ON(ReiseMaster.Col1 = Update_Import.Col1)
   SET ReiseMaster.Col2  = Update_Import.Col2,
       ReiseMaster.Col3  = Update_Import.Col3;

Затем на втором шаге будут добавлены новые наборы данных, которые не существуют в основной базе данных, и будет вся информация, которую они содержат.Это SQL-запрос, который отвечает за добавление новых строк данных во время процедуры VBA:

INSERT INTO ReiseMaster ([Col1],[Col2],[Col3])
SELECT [Col1],[Col2],[Col3] FROM Update_Import 
  WHERE NOT EXISTS(SELECT 1 FROM ReiseMaster
  WHERE Update_Import.[Col1] = ReiseMaster.[Col1]);

Я борюсь с определением количества новых наборов данных после процедуры, которое на самом деле уже каким-то образом определяетсяСам MS Access (см. Всплывающее окно).Поэтому моя идея состояла в том, чтобы просто использовать число, которое уже определено MS Access.

Все SQL-запросы хранятся в строке и запускаются командой "DoCmd.RunSQL".

1 Ответ

0 голосов
/ 14 декабря 2018

Используя DAO, действительно легко получить количество затронутых записей после выполнения запроса.

Вы можете просто использовать свойство Database.RecordsAffected:

Dim db As DAO.Database
Set db = CurrentDb 'Required, don't use CurrentDb.Execute else this won't work
Dim strSQL as String
strSQL =  "UPDATE ReiseMaster INNER JOIN Update_Import" 'and the rest of your query
db.Execute strSQL, dbFailOnError  'Execute the query using Database.Execute
Dim recordsAffected As Long
recordsAffected = db.RecordsAffected 'Get the number of records affected

Однако этоне позволяет вам увидеть его перед отправкой запроса.Чтобы просмотреть его и отобразить подсказку, вы можете использовать транзакции (короткий пример здесь ) и откатить транзакцию, если пользователь не решил зафиксировать.

...