ник: osmor
ПОкольку Вы не указываете в какой строке возникает ошибка, могу только предположить, что это происходит в строке
rst.MoveNext
st = rst![PE_ID]
Loop
т.к Вы делаете попытку MoveNext, курсор выходит за пределы рекордсета т.е. EOF = true
а затем пытаетесь получить значение поля из рекордсета, а значения нет, т.к. нет текущей строки.