Установка значений переменных после чтения содержимого файла

У меня есть очень большой запрос, который вызывается с трех разных страниц. Вместо того, чтобы писать один и тот же запрос во всех трех файлах cfm, я пытаюсь найти альтернативный способ сохранить запрос (вместе с #variable(s)#) в файле Query.cfm.

Пример Query.cfm:

SELECT *
    FROM A
    WHERE TRADE_DATE  BETWEEN to_date('#f_startDate#','dd/mm/yyyy') AND to_date('#f_endDate#','dd/mm/yyyy')

переменные: #f_startDate# и #f_endDate#

Затем я читаю содержимое файла, сохраняю его в переменной и заменяю #variable(s)# значениями для запуска функции с каждой из страниц.

Страница вызова (код пока не работает):

<cffile action = "read" file = "#ExpandPath( './Query.cfm')#" variable = "Query">
<cfset Query = #ReplaceList(Query,"#f_startDate#,#f_endDate#", "01/01/2000,01/01/2002")#>   
<cfquery name="Q_DailyPrice" datasource="#f_datasource#">
    #PreserveSingleQuotes(Query)#
</cfquery>

Как установить значения переменных в строку?

Подробная информация о каждой странице:

  1. Возвращает JSON запроса для загрузки диаграмм

  2. Используется для генерации данных запроса в xls

  3. Далее используется для генерации подмножества данных запроса (QoQ) для создания таблицы.

База данных: Оракул


person Gaurav S    schedule 21.03.2014    source источник


Ответы (1)


Ваши варианты включают в себя:

  1. Поместите запрос в шаблон .cfm и получите к нему доступ с помощью cfinclude.
  2. Поместите запрос в определяемую пользователем функцию в файле .cfm. Затем включите файл и вызовите функцию.
  3. Поместите запрос в определяемую пользователем функцию в файле .cfc. Затем вы можете либо запустить функцию с помощью cfinvoke, либо создать объект, а затем вызвать функцию.

Вероятно, есть и другие варианты. Я предлагаю посмотреть на три предложенных мной и определить, какой из них лучше всего соответствует вашим потребностям.

Какой бы метод вы ни использовали, в ColdFusion есть функция parsedatetime, которая преобразует ваши строки в объекты даты. Их использование может быть быстрее, чем функция to_date оракула. Вам придется проверить и посмотреть. В любом случае используйте cfqueryparameter по разным причинам.

Кроме того, будьте осторожны при использовании между с оракулом. Его поля даты включают компонент времени. Если он есть в какой-либо из ваших записей, вы в большей безопасности с

where trade_date >= YourStartDate
and trade_date < TheDayAfterYourEndDate
person Dan Bracuk    schedule 21.03.2014
comment
Спасибо, Дэн. Даже я работал над использованием 1-го варианта <cfinclude>, и это РАБОТАЛО. Кроме того, мне пришлось обернуть запрос <cfoutput> тегами в файле Query.cfm. - person Gaurav S; 21.03.2014