Здравствуйте!Помогите пожалуйста в Query не силен! Я создал запрос, который выдергивает данные из нескольких таблиц Помещения, Договоры, Объекты То есть в таблице помещения заводятся данные о построенных помещениях, в таблице договоры заносятся договоры на эти помещения. В запросе эти все три таблицы связаны между собой Но такая проблема, если занес помещения новые, но по ним пока нет договоров, то и соответственно в таблице договоры этих помещений нет, в итоге и в запрос они не попадают, а мне надо, чтобы все помещения попали в запрос! Как это сделать? В acesse это делается инструкциями JOIN (INNER, RIGHT, LEFT) а здесь в excele синтаксис какой то другой. Запрос получился такой [vba]
Код
SELECT `Помещения$`.`Строительный проект`, `Помещения$`.`Строительный объект`, `Помещения$`.`Номер помещения`, `Договоры$`.Контрагент, `Договоры$`.Консультант, `Договоры$`.`Дата договора`, `Помещения$`.`Фактическая площадь`, `Договоры$`.`Сумма договора`, `Помещения$`.`Платеж 1`, `Помещения$`.`Платеж 2`, `Помещения$`.`Платеж 3`, `Помещения$`.`Платеж 4`, `Помещения$`.`Платеж 5`, `Помещения$`.`Платеж 6`, `Помещения$`.`Платеж 7`, `Помещения$`.`Платеж 8`, `Помещения$`.`Платеж 9` FROM `C:\Информационное поле\Договоры.xlsx`.`Договоры$` `Договоры$`, `C:\Информационное поле\Объекты.xlsx`.`Объекты$` `Объекты$`, `C:\Информационное поле\Помещения.xlsx`.`Помещения$` `Помещения$` WHERE `Договоры$`.`Строительный проект` = `Помещения$`.`Строительный проект` AND `Договоры$`.Объект = `Помещения$`.`Строительный объект` AND `Договоры$`.Помещение = `Помещения$`.`Номер помещения` AND `Объекты$`.`Строительный проект` = `Помещения$`.`Строительный проект` AND `Объекты$`.`Строительный объект` = `Помещения$`.`Строительный объект` ORDER BY `Помещения$`.`Строительный проект`
[/vba]
Здравствуйте!Помогите пожалуйста в Query не силен! Я создал запрос, который выдергивает данные из нескольких таблиц Помещения, Договоры, Объекты То есть в таблице помещения заводятся данные о построенных помещениях, в таблице договоры заносятся договоры на эти помещения. В запросе эти все три таблицы связаны между собой Но такая проблема, если занес помещения новые, но по ним пока нет договоров, то и соответственно в таблице договоры этих помещений нет, в итоге и в запрос они не попадают, а мне надо, чтобы все помещения попали в запрос! Как это сделать? В acesse это делается инструкциями JOIN (INNER, RIGHT, LEFT) а здесь в excele синтаксис какой то другой. Запрос получился такой [vba]
Код
SELECT `Помещения$`.`Строительный проект`, `Помещения$`.`Строительный объект`, `Помещения$`.`Номер помещения`, `Договоры$`.Контрагент, `Договоры$`.Консультант, `Договоры$`.`Дата договора`, `Помещения$`.`Фактическая площадь`, `Договоры$`.`Сумма договора`, `Помещения$`.`Платеж 1`, `Помещения$`.`Платеж 2`, `Помещения$`.`Платеж 3`, `Помещения$`.`Платеж 4`, `Помещения$`.`Платеж 5`, `Помещения$`.`Платеж 6`, `Помещения$`.`Платеж 7`, `Помещения$`.`Платеж 8`, `Помещения$`.`Платеж 9` FROM `C:\Информационное поле\Договоры.xlsx`.`Договоры$` `Договоры$`, `C:\Информационное поле\Объекты.xlsx`.`Объекты$` `Объекты$`, `C:\Информационное поле\Помещения.xlsx`.`Помещения$` `Помещения$` WHERE `Договоры$`.`Строительный проект` = `Помещения$`.`Строительный проект` AND `Договоры$`.Объект = `Помещения$`.`Строительный объект` AND `Договоры$`.Помещение = `Помещения$`.`Номер помещения` AND `Объекты$`.`Строительный проект` = `Помещения$`.`Строительный проект` AND `Объекты$`.`Строительный объект` = `Помещения$`.`Строительный объект` ORDER BY `Помещения$`.`Строительный проект`
В acesse это делается инструкциями JOIN (INNER, RIGHT, LEFT) а здесь в excele синтаксис какой то другой.
Точно так же всё делается. Только пишется ручками, а не мышкой, потому что графически MS Query не умеет такие запросы отображать (не дорос он, понимаешь, до Access'а).ниже выяснили, что умеет Так что жмете пиктограмму SQL и редактируете свой запрос. В качестве примера прикладываю файл с двумя таблицами и текст запроса с LEFT JOIN:
[vba]
Код
SELECT a.F1, a.F2, b.F3 FROM Табл1 a LEFT JOIN Табл2 b ON a.F1 = b.F1
[/vba]
P.S. Сейчас и Вам напишем. Первым делом придадим запросу более удобоваримый вид, разделив на просматриваемые логические части: [vba]
Код
SELECT `Помещения$`.`Строительный проект`, `Помещения$`.`Строительный объект`, `Помещения$`.`Номер помещения`, `Договоры$`.Контрагент, `Договоры$`.Консультант, `Договоры$`.`Дата договора`, `Помещения$`.`Фактическая площадь`, `Договоры$`.`Сумма договора`, `Помещения$`.`Платеж 1`, `Помещения$`.`Платеж 2`, `Помещения$`.`Платеж 3`, `Помещения$`.`Платеж 4`, `Помещения$`.`Платеж 5`, `Помещения$`.`Платеж 6`, `Помещения$`.`Платеж 7`, `Помещения$`.`Платеж 8`, `Помещения$`.`Платеж 9` FROM `C:\Информационное поле\Договоры.xlsx`.`Договоры$` `Договоры$`, `C:\Информационное поле\Объекты.xlsx`.`Объекты$` `Объекты$`, `C:\Информационное поле\Помещения.xlsx`.`Помещения$` `Помещения$` WHERE `Договоры$`.`Строительный проект` = `Помещения$`.`Строительный проект` AND `Договоры$`.Объект = `Помещения$`.`Строительный объект` AND `Договоры$`.Помещение = `Помещения$`.`Номер помещения` AND `Объекты$`.`Строительный проект` = `Помещения$`.`Строительный проект` AND `Объекты$`.`Строительный объект` = `Помещения$`.`Строительный объект` ORDER BY `Помещения$`.`Строительный проект`
[/vba] Чтобы было еще веселее, введем однобуквенные псевдонимы для таблиц - латинские p, d, o: [vba]
Код
SELECT p.`Строительный проект`, p.`Строительный объект`, p.`Номер помещения`, d.Контрагент, d.Консультант, d.`Дата договора`, p.`Фактическая площадь`, d.`Сумма договора`, p.`Платеж 1`, p.`Платеж 2`, p.`Платеж 3`, p.`Платеж 4`, p.`Платеж 5`, p.`Платеж 6`, p.`Платеж 7`, p.`Платеж 8`, p.`Платеж 9` FROM `C:\Информационное поле\Договоры.xlsx`.`Договоры$` d, `C:\Информационное поле\Объекты.xlsx`.`Объекты$` o, `C:\Информационное поле\Помещения.xlsx`.`Помещения$` p WHERE d.`Строительный проект` = p.`Строительный проект` AND d.Объект = p.`Строительный объект` AND d.Помещение = p.`Номер помещения` AND o.`Строительный проект` = p.`Строительный проект` AND o.`Строительный объект` = p.`Строительный объект` ORDER BY p.`Строительный проект`
[/vba] Обратите внимание, сколько хлопот доставляют пробелы в наименованиях полей. Лучше их избегать для подобных задач.
Окончательно получаем нечто следующее (после некоторой перегруппировки предложений): [vba]
Код
SELECT p.`Строительный проект`, p.`Строительный объект`, p.`Номер помещения`, d.Контрагент, d.Консультант, d.`Дата договора`, p.`Фактическая площадь`, d.`Сумма договора`, p.`Платеж 1`, p.`Платеж 2`, p.`Платеж 3`, p.`Платеж 4`, p.`Платеж 5`, p.`Платеж 6`, p.`Платеж 7`, p.`Платеж 8`, p.`Платеж 9` FROM ( `C:\Информационное поле\Помещения.xlsx`.`Помещения$` p LEFT JOIN `C:\Информационное поле\Договоры.xlsx`.`Договоры$` d ON p.`Строительный проект` = d.`Строительный проект` AND p.`Строительный объект` = d.Объект AND p.`Номер помещения` = d.Помещение ) LEFT JOIN `C:\Информационное поле\Объекты.xlsx`.`Объекты$` o, ON p.`Строительный проект` = o.`Строительный проект` AND p.`Строительный объект` = o.`Строительный объект` ORDER BY p.`Строительный проект`
В acesse это делается инструкциями JOIN (INNER, RIGHT, LEFT) а здесь в excele синтаксис какой то другой.
Точно так же всё делается. Только пишется ручками, а не мышкой, потому что графически MS Query не умеет такие запросы отображать (не дорос он, понимаешь, до Access'а).ниже выяснили, что умеет Так что жмете пиктограмму SQL и редактируете свой запрос. В качестве примера прикладываю файл с двумя таблицами и текст запроса с LEFT JOIN:
[vba]
Код
SELECT a.F1, a.F2, b.F3 FROM Табл1 a LEFT JOIN Табл2 b ON a.F1 = b.F1
[/vba]
P.S. Сейчас и Вам напишем. Первым делом придадим запросу более удобоваримый вид, разделив на просматриваемые логические части: [vba]
Код
SELECT `Помещения$`.`Строительный проект`, `Помещения$`.`Строительный объект`, `Помещения$`.`Номер помещения`, `Договоры$`.Контрагент, `Договоры$`.Консультант, `Договоры$`.`Дата договора`, `Помещения$`.`Фактическая площадь`, `Договоры$`.`Сумма договора`, `Помещения$`.`Платеж 1`, `Помещения$`.`Платеж 2`, `Помещения$`.`Платеж 3`, `Помещения$`.`Платеж 4`, `Помещения$`.`Платеж 5`, `Помещения$`.`Платеж 6`, `Помещения$`.`Платеж 7`, `Помещения$`.`Платеж 8`, `Помещения$`.`Платеж 9` FROM `C:\Информационное поле\Договоры.xlsx`.`Договоры$` `Договоры$`, `C:\Информационное поле\Объекты.xlsx`.`Объекты$` `Объекты$`, `C:\Информационное поле\Помещения.xlsx`.`Помещения$` `Помещения$` WHERE `Договоры$`.`Строительный проект` = `Помещения$`.`Строительный проект` AND `Договоры$`.Объект = `Помещения$`.`Строительный объект` AND `Договоры$`.Помещение = `Помещения$`.`Номер помещения` AND `Объекты$`.`Строительный проект` = `Помещения$`.`Строительный проект` AND `Объекты$`.`Строительный объект` = `Помещения$`.`Строительный объект` ORDER BY `Помещения$`.`Строительный проект`
[/vba] Чтобы было еще веселее, введем однобуквенные псевдонимы для таблиц - латинские p, d, o: [vba]
Код
SELECT p.`Строительный проект`, p.`Строительный объект`, p.`Номер помещения`, d.Контрагент, d.Консультант, d.`Дата договора`, p.`Фактическая площадь`, d.`Сумма договора`, p.`Платеж 1`, p.`Платеж 2`, p.`Платеж 3`, p.`Платеж 4`, p.`Платеж 5`, p.`Платеж 6`, p.`Платеж 7`, p.`Платеж 8`, p.`Платеж 9` FROM `C:\Информационное поле\Договоры.xlsx`.`Договоры$` d, `C:\Информационное поле\Объекты.xlsx`.`Объекты$` o, `C:\Информационное поле\Помещения.xlsx`.`Помещения$` p WHERE d.`Строительный проект` = p.`Строительный проект` AND d.Объект = p.`Строительный объект` AND d.Помещение = p.`Номер помещения` AND o.`Строительный проект` = p.`Строительный проект` AND o.`Строительный объект` = p.`Строительный объект` ORDER BY p.`Строительный проект`
[/vba] Обратите внимание, сколько хлопот доставляют пробелы в наименованиях полей. Лучше их избегать для подобных задач.
Окончательно получаем нечто следующее (после некоторой перегруппировки предложений): [vba]
Код
SELECT p.`Строительный проект`, p.`Строительный объект`, p.`Номер помещения`, d.Контрагент, d.Консультант, d.`Дата договора`, p.`Фактическая площадь`, d.`Сумма договора`, p.`Платеж 1`, p.`Платеж 2`, p.`Платеж 3`, p.`Платеж 4`, p.`Платеж 5`, p.`Платеж 6`, p.`Платеж 7`, p.`Платеж 8`, p.`Платеж 9` FROM ( `C:\Информационное поле\Помещения.xlsx`.`Помещения$` p LEFT JOIN `C:\Информационное поле\Договоры.xlsx`.`Договоры$` d ON p.`Строительный проект` = d.`Строительный проект` AND p.`Строительный объект` = d.Объект AND p.`Номер помещения` = d.Помещение ) LEFT JOIN `C:\Информационное поле\Объекты.xlsx`.`Объекты$` o, ON p.`Строительный проект` = o.`Строительный проект` AND p.`Строительный объект` = o.`Строительный объект` ORDER BY p.`Строительный проект`
Только пишется ручками, а не мышкой, потому что графически MS Query не умеет такие запросы отображать (не дорос он, понимаешь, до Access'а).
Почему это не умеет? Умеет. Мышкой протягиваешь связь между полями, затем два раза на линию связи кликнул - выбрал тип соединения один ко многим.PowerBoy
И правда! Спасибо! А я чего-то по своей старой аксессной привычке нажал ПКМ и ждал пункта "Параметры объединения" - не вышло. А дабл-кликнуть в голову не пришло...
И правда! Спасибо! А я чего-то по своей старой аксессной привычке нажал ПКМ и ждал пункта "Параметры объединения" - не вышло. А дабл-кликнуть в голову не пришло...Gustav
Спасибо! Только он просто LEFT JOIN не воспринимает, говорит, что только LEFT OUTER JOIN, и это возможно только если в запросе две таблицы, то есть пишет, "Невозможно создать внешнее объединение, если запрос содержит больше двух таблиц"!, Но это как то плохо)) И никак это не обойти??
Спасибо! Только он просто LEFT JOIN не воспринимает, говорит, что только LEFT OUTER JOIN, и это возможно только если в запросе две таблицы, то есть пишет, "Невозможно создать внешнее объединение, если запрос содержит больше двух таблиц"!, Но это как то плохо)) И никак это не обойти??makc1985
Окончательно получаем нечто следующее (после некоторой перегруппировки предложений):
Че то не срабатывает, сначала ругается Невозможно добавить в таблицу '(' , если убрать скобки пишет ошибка в предложении FROM, а если оставить скобки и убрать часть кода про присоединение второй таблицы "объекты" [vba]
Код
LEFT JOIN `C:\Информационное поле\Объекты.xlsx`.`Объекты$` o, ON p.`Строительный проект` = o.`Строительный проект` AND p.`Строительный объект` = o.`Строительный объект` ORDER BY p.`Строительный проект`
[/vba] то все отрабатывает отлично. В чем проблема?
Окончательно получаем нечто следующее (после некоторой перегруппировки предложений):
Че то не срабатывает, сначала ругается Невозможно добавить в таблицу '(' , если убрать скобки пишет ошибка в предложении FROM, а если оставить скобки и убрать часть кода про присоединение второй таблицы "объекты" [vba]
Код
LEFT JOIN `C:\Информационное поле\Объекты.xlsx`.`Объекты$` o, ON p.`Строительный проект` = o.`Строительный проект` AND p.`Строительный объект` = o.`Строительный объект` ORDER BY p.`Строительный проект`
[/vba] то все отрабатывает отлично. В чем проблема?makc1985
Вот. Создал вам развернутую демонстрашку. Исходные таблицы - в трех файлах Book1-3, результат запроса - в Book4, сам запрос - в файле Qry.dqy. Все файлы из архива надо развернуть в папке C:\Query.
Текст запроса из 3-х таблиц с LEFT OUTER JOIN (работающий!) дублирую также здесь: [vba]
Код
SELECT a.F1, a.F2, b.F3, c.F4 FROM ( `C:\Query\Book1.xlsx`.Табл1 a LEFT OUTER JOIN `C:\Query\Book2.xlsx`.Табл2 b ON a.F1 = b.F1 ) LEFT OUTER JOIN `C:\Query\Book3.xlsx`.Табл3 c ON a.F1 = c.F1
[/vba] К сожалению, такой запрос одной мышкой не натыкать и ручками-таки всё же придется потрудиться.
Запрос, который я написал ранее по вашим данным, я писал, разумеется вслепую и журить меня за него бессмысленно. Он предназначался для указания общего направления изысканий (как филин из анекдота про мышей, "я стратегией занимаюсь")
Вот. Создал вам развернутую демонстрашку. Исходные таблицы - в трех файлах Book1-3, результат запроса - в Book4, сам запрос - в файле Qry.dqy. Все файлы из архива надо развернуть в папке C:\Query.
Текст запроса из 3-х таблиц с LEFT OUTER JOIN (работающий!) дублирую также здесь: [vba]
Код
SELECT a.F1, a.F2, b.F3, c.F4 FROM ( `C:\Query\Book1.xlsx`.Табл1 a LEFT OUTER JOIN `C:\Query\Book2.xlsx`.Табл2 b ON a.F1 = b.F1 ) LEFT OUTER JOIN `C:\Query\Book3.xlsx`.Табл3 c ON a.F1 = c.F1
[/vba] К сожалению, такой запрос одной мышкой не натыкать и ручками-таки всё же придется потрудиться.
Запрос, который я написал ранее по вашим данным, я писал, разумеется вслепую и журить меня за него бессмысленно. Он предназначался для указания общего направления изысканий (как филин из анекдота про мышей, "я стратегией занимаюсь")Gustav
Запрос, который я написал ранее по вашим данным, я писал, разумеется вслепую и журить меня за него бессмысленно. Он предназначался для указания общего направления изысканий (как филин из анекдота про мышей, "я стратегией занимаюсь")
Огромное спасибо, осталось еще пару рывков, я сложил три таблицы Получилось так [vba]
Код
SELECT c.`Строительный проект`, c.`Строительный объект`, a.`Номер помещения`, b.`Дата договора`, b.Контрагент, b.Консультант, a.`Фактическая площадь`, b.`Сумма договора`, c.`Платеж 1`, c.`Платеж 2`, c.`Платеж 3`, c.`Платеж 4`, c.`Платеж 5`, c.`Платеж 6`, c.`Платеж 7`, c.`Платеж 8`, c.`Платеж 9` FROM ( ( `C:\Информационное поле\Объекты.xlsx`.`Объекты$` c LEFT OUTER JOIN `C:\Информационное поле\Помещения.xlsx`.`Помещения$` a ON c.`Строительный проект` = a.`Строительный проект` AND c.`Строительный объект` = a.`Строительный объект` ) LEFT OUTER JOIN `C:\Информационное поле\Договоры.xlsx`.`Договоры$` b ON a.`Строительный проект` = b.`Строительный проект` AND a.`Строительный объект` = b.`Объект` AND a.`Номер помещения` = b.`Помещение`)
[/vba]
Теперь в результате выполнения запроса он выгружает как надо, но также выгружает много пустых строк, хотел добавить условие типа [vba]
Код
AND c.`Строительный объект`>'0'
[/vba] Чтобы вывести только не пустые строки, только куда и как это воткнуть я не могу ссобразить, я пытаюсь добавить это условие вот сюда
[vba]
Код
FROM ( ( `C:\Информационное поле\Объекты.xlsx`.`Объекты$` c LEFT OUTER JOIN `C:\Информационное поле\Помещения.xlsx`.`Помещения$` a ON c.`Строительный проект` = a.`Строительный проект` AND c.`Строительный объект` = a.`Строительный объект` AND c.`Строительный объект`>'0' )
[/vba]
Не получается говорит невозможно добавить в таблицу '(' как ни пробовал и скобочки добавить, не получается!
Запрос, который я написал ранее по вашим данным, я писал, разумеется вслепую и журить меня за него бессмысленно. Он предназначался для указания общего направления изысканий (как филин из анекдота про мышей, "я стратегией занимаюсь")
Огромное спасибо, осталось еще пару рывков, я сложил три таблицы Получилось так [vba]
Код
SELECT c.`Строительный проект`, c.`Строительный объект`, a.`Номер помещения`, b.`Дата договора`, b.Контрагент, b.Консультант, a.`Фактическая площадь`, b.`Сумма договора`, c.`Платеж 1`, c.`Платеж 2`, c.`Платеж 3`, c.`Платеж 4`, c.`Платеж 5`, c.`Платеж 6`, c.`Платеж 7`, c.`Платеж 8`, c.`Платеж 9` FROM ( ( `C:\Информационное поле\Объекты.xlsx`.`Объекты$` c LEFT OUTER JOIN `C:\Информационное поле\Помещения.xlsx`.`Помещения$` a ON c.`Строительный проект` = a.`Строительный проект` AND c.`Строительный объект` = a.`Строительный объект` ) LEFT OUTER JOIN `C:\Информационное поле\Договоры.xlsx`.`Договоры$` b ON a.`Строительный проект` = b.`Строительный проект` AND a.`Строительный объект` = b.`Объект` AND a.`Номер помещения` = b.`Помещение`)
[/vba]
Теперь в результате выполнения запроса он выгружает как надо, но также выгружает много пустых строк, хотел добавить условие типа [vba]
Код
AND c.`Строительный объект`>'0'
[/vba] Чтобы вывести только не пустые строки, только куда и как это воткнуть я не могу ссобразить, я пытаюсь добавить это условие вот сюда
[vba]
Код
FROM ( ( `C:\Информационное поле\Объекты.xlsx`.`Объекты$` c LEFT OUTER JOIN `C:\Информационное поле\Помещения.xlsx`.`Помещения$` a ON c.`Строительный проект` = a.`Строительный проект` AND c.`Строительный объект` = a.`Строительный объект` AND c.`Строительный объект`>'0' )
[/vba]
Не получается говорит невозможно добавить в таблицу '(' как ни пробовал и скобочки добавить, не получается!makc1985
Это условие надо поместить в обычную общую секцию WHERE в конце запроса:
Спасибо огроменное вот я вообще редиска, все перепробовал а этот вариант не попробовал! Тут вот еще какой вопрос меня давно мучил, можно ли как то автоматом изменять запрос? То есть чтобы не было жесткой привязки к папке С:\Информационное поле, чтобы эти файлы можно было копировать в любое место, допустим как в accesse это бы выглядело как CurrentProgectPath! А в excele я не знаю может ли макрос допустим поправлять запрос? скажем при открытии документа менять строку С:\Информационное поле на текущую папку где находятся сами файлы?
Это условие надо поместить в обычную общую секцию WHERE в конце запроса:
Спасибо огроменное вот я вообще редиска, все перепробовал а этот вариант не попробовал! Тут вот еще какой вопрос меня давно мучил, можно ли как то автоматом изменять запрос? То есть чтобы не было жесткой привязки к папке С:\Информационное поле, чтобы эти файлы можно было копировать в любое место, допустим как в accesse это бы выглядело как CurrentProgectPath! А в excele я не знаю может ли макрос допустим поправлять запрос? скажем при открытии документа менять строку С:\Информационное поле на текущую папку где находятся сами файлы?makc1985
скажем при открытии документа менять строку С:\Информационное поле на текущую папку где находятся сами файлы?
Применительно не конкретно к Вашему примеру, а к своей демонстрашке. В книге Book4 (та, которая с запросом) я создал бы новый лист - Лист2. На нем бы разместил следующие формулы:
(ячейки A1:A18) Текущий путь к папке: Строка подключения: Имя таблицы 1: Имя таблицы 2: Имя таблицы 3: Текст запроса SQL: исходный SELECT a.F1, a.F2, b.F3, c.F4 FROM ( =B3 LEFT OUTER JOIN =B4 ON a.F1 = b.F1 ) LEFT OUTER JOIN =B5 ON a.F1 = c.F1
с пробелами в начале строки =" "&A8 =" "&A9 =" "&A10 =" "&A11 =" "&A12 =" "&A13 =" "&A14 =" "&A15 =" "&A16 =" "&A17 =" "&A18
Формулы можно скопировать блоками прямо отсюда в соответствующие ячейки, предварительно включив на рабочем листе режим отображения формул по Ctrl+~ (Ctrl+Ё). Я так подробно расписываю не только в учебных целях, но и из уважения к обладателям мобильных гаджетов, которые могут не быть в состоянии открыть прилагаемый файл (файл я, возможно, тоже приложу).
Ну, и понадобится макрос обновления параметров запроса. Поскольку вся вычислительная работа уже выполнена на листе, то макрос будет совсем несложный: [vba]
Код
Sub updatePath() With ActiveWorkbook.Connections(1).ODBCConnection .CommandText = [Лист2!B8:B18].Value .Connection = [Лист2!B2].Value End With End Sub
[/vba] Согласитесь, в хранении текста запроса в ячейках листа - в хорошо просматриваемом и структурированном виде - определенно есть свои плюсы!
скажем при открытии документа менять строку С:\Информационное поле на текущую папку где находятся сами файлы?
Применительно не конкретно к Вашему примеру, а к своей демонстрашке. В книге Book4 (та, которая с запросом) я создал бы новый лист - Лист2. На нем бы разместил следующие формулы:
(ячейки A1:A18) Текущий путь к папке: Строка подключения: Имя таблицы 1: Имя таблицы 2: Имя таблицы 3: Текст запроса SQL: исходный SELECT a.F1, a.F2, b.F3, c.F4 FROM ( =B3 LEFT OUTER JOIN =B4 ON a.F1 = b.F1 ) LEFT OUTER JOIN =B5 ON a.F1 = c.F1
с пробелами в начале строки =" "&A8 =" "&A9 =" "&A10 =" "&A11 =" "&A12 =" "&A13 =" "&A14 =" "&A15 =" "&A16 =" "&A17 =" "&A18
Формулы можно скопировать блоками прямо отсюда в соответствующие ячейки, предварительно включив на рабочем листе режим отображения формул по Ctrl+~ (Ctrl+Ё). Я так подробно расписываю не только в учебных целях, но и из уважения к обладателям мобильных гаджетов, которые могут не быть в состоянии открыть прилагаемый файл (файл я, возможно, тоже приложу).
Ну, и понадобится макрос обновления параметров запроса. Поскольку вся вычислительная работа уже выполнена на листе, то макрос будет совсем несложный: [vba]
Код
Sub updatePath() With ActiveWorkbook.Connections(1).ODBCConnection .CommandText = [Лист2!B8:B18].Value .Connection = [Лист2!B2].Value End With End Sub
[/vba] Согласитесь, в хранении текста запроса в ячейках листа - в хорошо просматриваемом и структурированном виде - определенно есть свои плюсы!Gustav