Страницы: 1
RSS
Формировать отчёты в Excel подключением к SQL, при каждом открытии задавать новый диапазон дат
 
Добрый день!
есть файл Excel, в котором хранится сводная таблица, формируемая SQL запросом типа:
Код
Select * from
sales
where
sales.dt = date'2015-01-01'

Необходимо, чтобы данная сводная таблица формировалась запросом типа:
Код
Select * from
sales
where
sales.dt = date'&D'

При запуске второго скрипта в PL SQL Developer - он запрашивает значение даты и после ввода даты исполняет запрос.
При замене первого запроса вторым в MS Excel - Excel конечно же не запрашивает дату, а просто выдаёт ошибку.

Вопрос:
Каким образом можно передавать дату в подключение для формирования запросов без изменения кода в подключении Excel.

Спасибо! :)
Изменено: calve - 04.06.2015 00:07:39
 
А в чем проблема поменять текст запроса в подключении?
 
Для доступного понимания сути проблемы я написал скрипт в упрощенном виде.
Реальный скрипт содержит дату в 8 местах, расположенные в различных местах текста.

Занимаюсь автоматизацией ежедневной отчётности - так что каждый день редактировать множество скриптов с датами в куче мест - достаточно сложно.
 
попробуйте так
Код
sales.dt = date&format(D,'''yyyy-mm-dd''') 
Изменено: TheBestOfTheBest - 03.06.2015 15:35:25
Неизлечимых болезней нет, есть неизлечимые люди.
 
Выводит аналогичную ошибку.
Тут проблема в том, что SQL понимает код, а Excel не понимает, что нужно выдать запрос.

Я думал, что можно макросом ссылаться на определённые ячейки, в Excel в которых будут находиться даты за которые формируется отчёт.
 
Цитата
calve написал:  ссылаться на определённые ячейки
сделайте файл пример, я покажу как
Неизлечимых болезней нет, есть неизлечимые люди.
 
calve, добрый вечер. А если попробовать замутить так? :)
Код
Dim Data AS String
Data=Sheets(1).Cells(2, 1)
WHERE dt = #" & Format(Data, "mm-dd-yyyy") & "#
Учусь программировать :)
 
calve, Вы хотите в запрос SQL внести ссылкой дату из ячейки Excel? Посредством VBA или просто ссылкой? ссылкой не выйдет Можно просто прописать условие в самом sql запросе. Например текущая дата:
Код
sales.dt = date() ... 
Изменено: bedvit - 03.06.2015 17:20:03
«Бритва Оккама» или «Принцип Калашникова»?
 
Сделал файл - пример (в первом посте).
Левая табличка корректно загружается с заранее заданным значением даты, вторая табличка не грузится т.к. дата в ней задаётся динамически.
 
Цитата
calve написал: Я думал, что можно макросом ссылаться на определённые ячейки,
а где ячейка/ячейки с датой?

сделайте файл согласно правил
Цитата
2.3. Приложите файл(ы) с примером (общим весом не более 100 Кб) в реальной структуре и форматах данных того, что есть сейчас и того, что хотелось бы на выходе.
Изменено: TheBestOfTheBest - 04.06.2015 00:09:05
Неизлечимых болезней нет, есть неизлечимые люди.
 
Доброе время суток
Можно таким образом организовать. Для примера запрос к таблице на другом листе этой же книги. Файл положить, по примеру коллеги TheBestOfTheBest, в папку c:\1. Oracle для проверки, к сожалению, под рукой нет). Замечание, параметры работают только с ODBC подключением. Так что для вам нужно будет изменить ваш вариант на ODBC подключение к Oracle.

Успехов.
Изменено: Андрей VG - 03.06.2015 20:54:56
 
наверное там д.б.
Код
Where t1.[Fdata]<=?
Если надо диапазон дат, то делайте ссылку на другую ячейку и еще один "вопросик"
Код
Where t1.[Fdata]>? AND t1.[Fdata]<=?

Если надо выбирать конкретные даты, то делайте к основной таблице RIGHT JOIN к таблице со списком дат.
Неизлечимых болезней нет, есть неизлечимые люди.
 
calve, кнопка цитирования не для ответа
 
vikttur а какая кнопка для ответа? :)
 
Опускаетесь ниже последнего сообщения и видите поле для писанины.
 
Цитата
calve написал: какая кнопка для ответа?
Она так и называется - "Ответить". И их даже две - вверху и внизу страницы (справа). Это на тот случай, если мышкой в поле ответа попасть не получается.
Это я, как кот коту - по секрету ))
 
Цитата
Юрий М написал: Это на тот случай, если мышкой в поле ответа попасть не получается
Это как ? :cry:
 
Я бы создал таблицу в базе данных и через макрос подгружал бы данные в таблицу sql, а с помощью нее уже создал запрос.
 
Цитата
Doober написал: Это как ?
Серёж, ну всякое бывает:  ищет человек, куда мышкой ткнуть, чтобы ответ написать, а не видит. Видит только ОДНУ кнопку - "Цитировать" ))
 
Доброе время суток
gruny1985, позвольте спросить - к чему ваше сообщение? Как бы в файле-примере ТС строка подключения выглядит так
Код
Provider=MSDAORA.1;User ID=POS_DEP;Data Source=DOME
- типичная строка подключения к Oracle.
Вопрос ТС был о параметризованном запросе к этой базе, возвращающем данные на лист, значения параметров которого берутся из ячеек этого или другого листа.
Подошли ли ТС предложенные варианты решения и смог ли он их использовать, мы быть может узнаем, когда у ТС, судя по недвусмысленным репликам наших модераторов, освободится клавиатура и прочие устройства ввода.
 
Ничего из вышеперечисленного не помогло.
Помог google, который подсказал создать кнопку, где на макрос вешается обновление таблицы с параметрами, забираемыми из Excel
Код
Sub buttom()

AI = ActiveSheet.Range("F1")
With ActiveSheet.ListObjects(1)
        .QueryTable.CommandText = "select dfp.valid_from_dt, dfp.contr_term, dfp.FTP_DISB  from dict_ftp_price dfp where dfp.VALID_TILL_DT = Date '4000-01-01' and dfp.contr_term = " & AI
        
  
        .Refresh
    End With

    
End Sub


Пример во вложении. Может кому пригодится :)
 
Подскажите пожалуйста. Не смог разобраться с предложенными тут вариантами, может кто знает как решить мою задачку. Вопрос тот же, в двух ячейках указывается временной промежуток и после по кнопке идет выгрузка именно этого диапазона дат. Приложил файл, как формируется запрос. Запрос формирую через данные - запрос к SQL Server.
 
Код
where m.DocDate Between "'"+format(?,"YYYY-MM-DD")+"'" and "'"+format(?,"YYYY-MM-DD")+"'"
Не пугайтесь 2-х знаков "?", вместо них драйвер должен запросить значения параметров (2 штуки), надо настроить связь каждого параметра со своей ячейкой.
Изменено: TheBestOfTheBest - 06.09.2019 17:15:03
Неизлечимых болезней нет, есть неизлечимые люди.
 
А как настроить связь параметра? как определить ему где лежат эти ячейки? Откуда он будет тянуть эти вопросы?
Простите, если это глупые вопросы, только недавно начал этим заниматься
 
Запустите запрос - увидите.
Неизлечимых болезней нет, есть неизлечимые люди.
 
Подробности: "Microsoft SQL: Incorrect syntax near the keyword 'where'."
Изменено: bereteli - 06.09.2019 18:37:58
 
Макрос загрузки в 20 потоков на сервер.
 
Если речь идет о СУБД Oracle, то утилита SQL*Loader вне конкуренции.
Владимир
Страницы: 1
Наверх