Последовательно выполняю 3 запроса:
1.
SELECT TOP 1
Config.value
INTO CURSOR ConstOrg
FROM
Config
WHERE
Config.name = "OwnerAgent"
ORDER BY
Config.user_rn
2.
SELECT
org.orbase_rn,
org.name,
org.fullname
INTO CURSOR OurOrg
FROM
org
WHERE
org.orbase_rn IN
(SELECT
ConstOrg.value
FROM
ConstOrg)
3.
SELECT
orgbase.rn,
orgbase.rmnemo_org,
orgbase.showname,
orgbase.inn,
orgbase.okato,
orgbase.ogrn
INTO CURSOR OurOrgbase
FROM
orgbase
WHERE
orgbase.rn IN
(SELECT
ConstOrg.value
FROM
ConstOrg)
При выполнение третьего(!!!) запроса происходит ошибка:
Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC Visual FoxPro Driver]File 'constorg.dbf' does not exist.
Странность собственно заключается в том, что второй запрос выполняется без проблем. То есть удалось считать курсор "constorg". В добавок попробовал в третьем запросе заменить курсор "constorg" на "OurOrg". Но он тоже оказался недоступен. Есть ощущение, что драйвер после второго запроса удаляет все курсоры и не создаёт новые.
Вопрос решен. Дело в том, что я при выполнении запроса получаю переменную (RecordSet), так как меня не интересует результат создания курсора я её благополучно переприсваиваю при выполнении следующего запроса. При удалении/переприсвоении переменной типа ComObject происходит вызов деструктора Com-Объекта. FoxPro при вызове деструктора очищает память, выделенную на данный RecordSet. А именно в этом куске памяти на самом деле и хранится курсор.