вывод данных из базы данных с помощью cfscript

Я не знаком с cfscript, когда-либо использовал теги, поэтому не знаю, как выводить запрос к базе данных.

Обычно

<cfoutput query="qName">
#field1#<br>
#field2#<br><br>
</cfoutput>

Как мне это сделать в cfscript?


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

<cfset dataSet = "">
<cfoutput query="Bookings">

<cfset dataSet = dataSet & ',' & '#str_BookingRef#'>
<cfset dataSet = dataSet & ',' & '#str_GuestName#'>
<cfset dataSet = dataSet & ',' & '#str_CottageName#'>
<cfset dataSet = dataSet & ',' & '#str_AgentName#'>
<cfset dataSet = dataSet & ',' & '#dtm_StartDate#'>
<cfset dataSet = dataSet & ',' & '#dtm_EndDate#'>
<cfset dataSet = dataSet & ',' & '#int_Income#'>
<cfset dataSet = dataSet & ',' & '#int_AgentFee#'>
<cfset dataSet = dataSet & ',' & '#int_VatAmount#'>
<cfset dataSet = dataSet & ',' & '#int_ToOwner#'>
<cfset dataSet = dataSet & ',' & '#int_Adults#'>
<cfset dataSet = dataSet & ',' & '#int_Children#'>
<cfset dataSet = dataSet & ',' & '#int_Pets#' & 'evaluate(Chr(13))'>

</cfoutput>

<cfdump var="#dataSet#">

<cfscript>
data = QueryNew("str_BookingRef, str_GuestName, str_CottageName, str_AgentName, dtm_StartDate, dtm_EndDate, int_Income, int_AgentFee, int_VatAmount, int_ToOwner, int_Adults, int_Children, int_Pets", "VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar", [#dataSet#]);
spreadsheet = New spreadsheetLibrary.Spreadsheet();
workbook = spreadsheet.workbookFromQuery( data );
path = "C:\Inetpub\vhosts\pathtofile\#session.int_OwnerID#.xls";
spreadsheet.write( workbook, path, true );
</cfscript>

person Paul Hopkinson    schedule 05.06.2020    source источник
comment
Похоже, вы просто заново создаете запрос для передачи в библиотеку электронных таблиц. Почему бы просто не передать исходный запрос напрямую? Вы можете сделать это в одну строку: spreadsheet.writeFileFromQuery( Bookings, "C:\Inetpub\vhosts\pathtofile\#session.int_OwnerID#.xls" );   -  person CfSimplicity    schedule 05.06.2020
comment
Легенда! Все в порядке - большое спасибо   -  person Paul Hopkinson    schedule 06.06.2020
comment
Не уверен, что понимаю, почему вы используете здесь конкатенацию строк. Цель состоит в том, чтобы вывести значения запроса на экран с помощью cfml, исходный код в порядке.   -  person SOS    schedule 06.06.2020


Ответы (2)


Вы не хотите создавать строку и надеяться, что это JSON в качестве промежуточного шага.

То, что вы хотите, это

spreadsheet = spreadsheetNew();
spreadsheet.addRows( Bookings );

Возможно, что Bookings не имеет столбцов в правильном порядке. В этом случае используйте запрос запросов, чтобы сделать запрос с вещами в правильном порядке.

ИЛИ

Если вы действительно хотите построить результаты построчно.

   spreadsheet = spreadsheetNew();
   for (row in Bookings) {
      spreadsheet.addRow("#str_BookingRef#,
        #str_GuestName#,
        #str_CottageName#,
        #str_AgentName#, 
        #dtm_StartDate#,
        #dtm_EndDate#,
        #int_Income#,
        #int_AgentFee#,
        #int_VatAmount#,
        #int_ToOwner#,
        #int_Adults#,
        #int_Children#,
        #int_Pets#");
   }

Примечание. Данные разделены на новые строки, но если вы сделаете это таким образом, все они должны быть на одной строке.

person James A Mohler    schedule 06.06.2020

Что-то вроде этого достигнет вашей цели.

for (RowNumber = 1; RowNumber <= qName.RecordCount; RowNumber++) {
    writeoutput(qName[field1][RowNumber] & '<br>')
    etc
}

Но лично я бы придерживался тега.

person Dan Bracuk    schedule 05.06.2020