Подключение к запросам из Excel

Frost_Imp
Дата: 29.01.2016 15:33:48
Приветствую!
Комрады, обращаюсь за практикой. Потому что в нете ничего путного на эту тему не нашел, видимо, имеют место частные случаи, о которых я, по неопытности, не знаю.

Есть Access с тремя запросами. Там все работает, все хорошо.
Есть Excel, в который через "Получение из внешних данных - из Access" я хочу "положить" данные из этих запросов. Я же правильно понимаю предназначение этого функционала?
Подключаюсь (все через гуи), выбираю запрос. Имею следующую картину:
1. Из одного запроса данные тянутся абсолютно сорректно
2. Из второго отчета записей возвращается больше, чем возвращает сам отчет в Access
3. От третьего отчета подтягиваются только заголовки полей.
В чем может быть причина? Структура запросов (она почти одинаковая), количество выгружаемых данных (25к строк в наибольшем), что-то еще?
_____________________
А что на самом деле хотел сказать "Frost_Imp" никто не знает, так как администрация форума попросила его быть вежливым.
Анатолий ( Киев )
Дата: 29.01.2016 17:53:24
В запросах используется оператор Like? Для DAO (в БД Акса) и ADODB (подключение в Excel) спецификации разные.
Покажите содержимое WHERE запросов. Или весь их текст.
Frost_Imp
Дата: 01.02.2016 09:06:54
Анатолий ( Киев ), да, использует. Вот один запрос
SELECT a.YBPIDEAL, a.дата_установки, all_over.дата_статуса, a.статус, all_over.выдача_по, all_over.лимит
FROM (SELECT ov.YBPIDEAL, Min(ov.дата_время) AS дата_установки, ov.статус FROM all_over AS ov GROUP BY ov.YBPIDEAL, ov.статус, ov.продукт HAVING (ov.статус="A") AND (ov.продукт Like "*PSB*" or ov.продукт like "*PRB*") ORDER BY Min(ov.дата_время))  AS a INNER JOIN all_over ON (a.YBPIDEAL = all_over.YBPIDEAL) AND (a.дата_установки = all_over.дата_время);

вот второй, берущий данные из первого
SELECT empl_start.YBPIDEAL, empl_start.дата_установки AS дата_время_установки, empl_start.дата_статуса, Year(empl_start.дата_статуса) AS год, empl_start.лимит AS лимит_установки, all_last.дата_крайнего_статуса, all_last.крайний_статус, all_last.актуальный_лимит
FROM empl_start LEFT JOIN all_last ON empl_start.YBPIDEAL = all_last.YBPIDEAL;

(на два разбил для удобства)
В одном действительно есть like. Как выйти из ситуации?
Анатолий ( Киев )
Дата: 01.02.2016 12:35:26
В ADO вместо "*" используется "%", а вместо "?" - "_".
Но если запрос используется и в Аксе, то в вашем случае универсальное решение - вместо, например, ov.продукт Like "*PSB*" можно применить конструкцию:
InStr(1,ov.продукт,"PSB") > 0

А нужна ли вам такая связь из Excel с данными Access? Может лучше заливать данные в Excel процедурой в Access с помощью OLE Automation и метода CopyFromRecordset?

Еще вариант... То что вы используете, в Excel называется QueryTable. Кроме варианта, который используете вы, можно открыть DAO.Recordset и присвоить его этому объекту. Тогда и в запросах ничего менять не надо.
Frost_Imp
Дата: 02.02.2016 16:10:39
Анатолий ( Киев ), спасибо огромное, InStr помог