Написание скрипта для повторения запроса на обновление с использованием инкрементной переменной - PullRequest
0 голосов
/ 01 мая 2019

У меня есть таблица:

a.si
a.p
a.pnsi

si - уникальный идентификатор, p - двойной, pnsi - ноль

Я бы хотел выполнить запрос на обновление в pnsi, используя этот подзапрос с переменной n:

(SELECT si FROM a as y WHERE y.si = a.si + n AND y.p > a.p)

Я бы хотел иметь возможность выполнять этот запрос при увеличении значений n от 1 до 100 000, каждый раз только для оставшихся записей, где pnsi по-прежнему равно нулю.

Запрос имеет два критерия: 1. То, что значение si, выбранное (y.si) в качестве a.pnsi, больше, чем a.si 2. То, что y.p больше, чем a.p

Цель этого состоит в том, чтобы сократить время обработки, так как эта процедура будет выполняться на таблице из более миллиона записей, и большую часть времени можно найти правильное решение с очень малым значением n. Запустив его таким образом, Access оценит n = 1, 2 ... (по возрастанию), в результате чего получится очень мало записей, в которых n будет увеличиваться до 100 000.

Мне нужен скрипт для увеличения значения n для повторения запроса на обновление n раз для оставшихся пустых записей. Сценарий должен отправить текущее значение переменной n в запрос на обновление (y.si = a.si + n). Цикл останавливается, когда больше нет записей для обновления или когда n достигает 100000. Есть идеи?

1 Ответ

1 голос
/ 01 мая 2019

Процедура VBA может иметь такой код:

Dim rs As DAO.Recordset, lngCnt As Long
Set rs = CurrentDb.OpenRecordset("SELECT * FROM a WHERE pnsi Is Null;")
For lngCnt = 1 to 100000
    If Not rs.EOF Then
        rs.Edit
        rs!pnsi = lngCnt
        rs.Update
        rs.MoveNext
    Else
        Exit For
    End If
Next
...