Вход | Регистрация

1С:Предприятие ::

Метки: 

Работа курсоров через драйвер VFP OLEDB

Я
   NikePopov
 
28.12.17 - 10:14
Добрый день!

Строка подключения:
driver={Microsoft Visual FoxPro Driver};Exclusive=No;NULL=NO;Collate=Machine;SourceType=DBF;SourceDB="...";

Последовательно выполняю 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". Но он тоже оказался недоступен. Есть ощущение, что драйвер после второго запроса удаляет все курсоры и не создаёт новые.

Никто не сталкивался с такой проблемой?
 
 
   kiruha
 
1 - 28.12.17 - 10:25
Попробуй через ExecScript
http://www.1cpp.ru/forum/YaBB.pl?num=1188673318
   NikePopov
 
2 - 28.12.17 - 10:53
Вопрос решен. Дело в том, что я при выполнении запроса получаю переменную (RecordSet), так как меня не интересует результат создания курсора я её благополучно переприсваиваю при выполнении следующего запроса. При удалении/переприсвоении переменной типа ComObject происходит вызов деструктора Com-Объекта. FoxPro при вызове деструктора очищает память, выделенную на данный RecordSet. А именно в этом куске памяти на самом деле и хранится курсор.

Решение вопроса:
Вместо:

Для каждого ТекстЗапроса Из ТекстыЗапроса Цикл

    РезультатЗапроса = Подключение.Execute(ТекстЗапроса);

КонецЦикла;

// Обработка выполнения последнего запроса


Написать:

МассивCOMОбъектов = Новый Массив;

Для каждого ТекстЗапроса Из ТекстыЗапроса Цикл

    РезультатЗапроса = Подключение.Execute(ТекстЗапроса);
    МассивCOMОбъектов.Добавить(РезультатЗапроса );

КонецЦикла;

МассивCOMОбъектов = Неопределено;
// Обработка выполнения последнего запроса


Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует