用cfscript输出数据库数据

问题描述 投票:0回答:1

我对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>
coldfusion cfml lucee
1个回答
2
投票

你不想构建一个字符串,希望它是JSON作为中间步骤。

你想要的是

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

有可能 Bookings 的列的顺序不对。在这种情况下,使用query的query进行查询,以正确的顺序进行查询。

如果你真的想逐行建立结果。

   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#");
   }

注意:数据会被分隔到新的行,但如果你要这样做,就必须把所有的数据都放在同一行。


0
投票

这样的做法可以达到你的目的。

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

但就个人而言,我会坚持使用标签。

© www.soinside.com 2019 - 2024. All rights reserved.