for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Вопросы по 1С
   :: Помощь сайту :: 

Re: Создание курсоров через ADO
nikepopov
Автор

Сообщений: 10
Дата: 19.03.18 07:50:32ОтветитьЦитировать
Ну, во встроенными объектами есть трудности:
Если использовать объект XBase:
1. Скорость чтения просто колоссально низкая
2. У меня таблицы очень большие, памяти на создание аналога в 1С (ТаблицаЗначений) для того, чтобы при помощи связей отобрать нужные не хватит
Если говорить про объект "ВнешниеИсточникиДанных", то
1. Нужно снимать конфигурацию с поддержки
2. Дополнительных преимуществ нет, так как это обычная работа через OLEDB.

Так что вариант с работой через стандартный ODBC вроде самый разумный.
Ratings: 0 negative/0 positive

Re: Создание курсоров через ADO
Igor Korolyov

Сообщений: 32097
Дата: 19.03.18 11:53:15ОтветитьЦитировать
Если количество "выбираемых" элементов не большое (в пределах пары десятков), то можно:
- динамически формировать текст запроса к основной таблице, подсовывая в условие
WHERE id_или_что_там IN ('0001', '0002', '0005', ...)

- тупо сделать цикл, вынимая по 1 записи (или группе записей) из мега-таблицы на каждом проходе, и сливая всё это вместе уже на стороне 1с.

Варианты, конечно, не супер, но вполне рабочие (первый тоже оптимизируем по индексу - конечно если индекс таки есть, и он структурный cdx - т.е. автоматом подключается и используется).

Во всяком случае это уж лучше чем пытаться не поддерживаемый синтаксис изподвыподверта использовать


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Создание курсоров через ADO
Foxtrot

Сообщений: 3345
Откуда: Бишкек
Дата: 19.03.18 17:49:38ОтветитьЦитировать
мне почемуто видится если по аналогии с фоксом, что вместо того чтобы писать USE mytable ты пытаешься использовать CRATEOBJECT(
возможно я ошибаюсь и чегото проглядел


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive

Re: Создание курсоров через ADO
nikepopov
Автор

Сообщений: 10
Дата: 20.03.18 06:26:41ОтветитьЦитировать
Igor Korolyov
Если количество "выбираемых" элементов не большое (в пределах пары десятков), то можно:
- динамически формировать текст запроса к основной таблице, подсовывая в условие
WHERE id_или_что_там IN ('0001', '0002', '0005', ...)

- тупо сделать цикл, вынимая по 1 записи (или группе записей) из мега-таблицы на каждом проходе, и сливая всё это вместе уже на стороне 1с.

Пробовал. Иногда проходит, но в некоторых случаях появлялась ошибка недопустимой длинны команды. Я отказался от метода, так как надёжность превыше всего.
Ratings: 0 negative/0 positive

Re: Создание курсоров через ADO
nikepopov
Автор

Сообщений: 10
Дата: 20.03.18 06:28:53ОтветитьЦитировать
Foxtrot
мне почемуто видится если по аналогии с фоксом, что вместо того чтобы писать USE mytable ты пытаешься использовать CRATEOBJECT(
возможно я ошибаюсь и чегото проглядел

Я когда писал всё это был как в бреду. Много синтаксиса не пропускает OLEDB провайдер. Это было скорее похоже на "угадай команду". В Fox-e команда проходит, а через провайдер - ни под каким соусом. Но про CRATEOBJECT я даже не читал. Такого я ещё не видел.
Ratings: 0 negative/0 positive

Re: Создание курсоров через ADO
Foxtrot

Сообщений: 3345
Откуда: Бишкек
Дата: 20.03.18 15:06:18ОтветитьЦитировать
как я и предсказывал, все на много проще. к примеру такой вариант
создаешь в 1це таблицу, пихаешь в нее все что душе угодно
пишешь прогу на фоксе, которая создасть вторую таблицу на основе всех твоих ухищрений
вызываешь сие творение из 1це
открываешь результаты в 1це
профит!


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive

Re: Создание курсоров через ADO
Igor Korolyov

Сообщений: 32097
Дата: 20.03.18 21:31:15ОтветитьЦитировать
nikepopov
Пробовал. Иногда проходит, но в некоторых случаях появлялась ошибка недопустимой длинны команды.
Ну так следить надо за размером генерируемой строки В 9-м фоксе сняли лимит на число элементов в in, а до того вроде бы 24 только можно было перечислять.
Максимальный размер команды в самом фоксе 8Кб, сколько в провайдере даже и не знаю... И да, там ещё есть SYS(3055) задающая, если очень грубо, количество условия в WHERE - каждый элемент в IN по сути это одно условие, и по умолчанию SYS(3055)=320 что должно соответствовать 40 условиям. Может ещё и это мешало.
И да, использовать надо крайние версии ПО - VFP OLE DB провайдер уровня VFP9 SP2.

Что мешает делать запрос по частям (ограничивая в пределе каждую часть одним условием) и потом объединять результат на стороне 1с - тоже неясно. Не должно оно быть очень уж медленно для разумных размеров выборок.


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Создание курсоров через ADO
pasha_usue

Сообщений: 2952
Откуда: Е-бург
Дата: 21.03.18 06:19:43ОтветитьЦитировать
Можно сделать очень тупой COM-Server на фоксе. Причем сариализовать в структуру, которую 1С умеет десериализовывать: либо XML, либо ЗначениеИзСтрокиВнутр().
Ratings: 0 negative/0 positive

Re: Создание курсоров через ADO
Foxtrot

Сообщений: 3345
Откуда: Бишкек
Дата: 23.03.18 14:36:47ОтветитьЦитировать
тож ведь так думал
но ежели нет опыта, то это только усложнит задачу исполнителю


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive



Извините, только зарегистрированные пользователи могут писать в этом форуме.

On-line: 52 and Guests: 52


© 2000-2018 Fox Club 
Яндекс.Метрика