几年来,我一直使用下拉列表来确定 SQL 查询的要求,并且直到现在才需要使用带有“相关选择”的下拉列表。我找到了一个关于如何做到这一点的示例,我可以创建相关的选择(使用静态数据),效果很好,请参阅下面使用我与车辆和品牌相关的数据。
但是,当我将它应用到我的环境并使用动态 SQL 查询数据时,我无法让它工作。我相信所有代码段都可以一起工作(因为它非常适合静态数据),但是如果我尝试自动构建数据然后创建字符串以传递给 queryNew函数,它会失败。
这是带有STATIC查询字符串/数据数组的工作Content.cfc 文件
<cfcomponent>
<cfset tblMake = queryNew("name,id", "varchar,varchar", [{name:'RENAULT',id:'RENAULT'},{name:'RENAULT',id:'RENAULT'},{name:'RENAULT',id:'RENAULT'}])>
<cfset tblModel = queryNew("name,code,continent_id", "varchar,varchar,varchar", [{name:"TSERIES",code:"TSERIES",continent_id:"RENAULT"},{name:"MASTER",code:"MASTER",continent_id:"RENAULT"}])>
<cfset tblVoltage = queryNew("name,code", "varchar,varchar", [{name:"24 volt",code:"MASTER"},{name:"12 volt",code:"TSERIES"}])>
<cffunction name="getContent" access="remote" returntype="query" output="true">
<cfargument name="strTableName" type="string" required="true">
<cfargument name="strID" type="string" required="true">
<cfargument name="strName" type="string" required="true">
<cfargument name="intDistinct" type="numeric" required="false" default="0">
<cfargument name="selectedCol" type="string" required="false" default="0">
<cfargument name="selectedID" type="string" required="false" default="0">
<cfquery name="qryContent" dbtype="query">
select
<cfif arguments.intDistinct eq 1>distinct</cfif>
#arguments.strID# as theID,
#arguments.strName# as theValue
from #arguments.strTableName#
<cfif arguments.selectedID neq 0>
where #arguments.selectedCol# = '#arguments.selectedID#'
</cfif>
order by #arguments.strName#
</cfquery>
<cfreturn qryContent />
</cffunction>
</cfcomponent>
当我尝试使用此方法创建查询时,似乎没有任何效果。我正在遍历数据库(来自查询),然后使用所需的结构创建一个字符串并将其传递给函数。
<cfcomponent>
<cfset XSTATIC = ""/>
<cfquery name="NOXVehicleModels" datasource="EBSNOX" >
SELECT DISTINCT VehicleMake
FROM [dbo].[NOX-Master]
WHERE VehicleMake IS NOT NULL
</cfquery>
<cfloop query="NOXVehicleModels">
<cfset XSTATIC = XSTATIC & "{name:'" & #Trim(NOXVehicleModels.VehicleMake)# & "',id:'"& #Trim(NOXVehicleModels.VehicleMake)# & "'},"/>
</cfloop>
<cfset XLEN=LEN(#XSTATIC#)/>
<cfset XSTATIC = MID(XSTATIC,1,XLEN-1)/>
<cfoutput>#XSTATIC#</cfoutput>
<cfset tblMake = queryNew("name,id", "varchar,varchar", [#XSTATIC#])>
我创建了一个单独的cfoutput来测试字符串的结构等,它似乎是正确的,但它只是没有传递给 querynew 函数。这是输出的样子:-
{name:'CUMMINS',id:'CUMMINS'},{name:'DAF',id:'DAF'},{name:'IVECO',id:'IVECO'},{name:'MAN',id :'MAN'},{name:'MERCEDES',id:'MERCEDES'},{name:'RENAULT',id:'RENAULT'},{name:'SCANIA',id:'SCANIA'},{name :'VOLVO',id:'VOLVO'} {name:'RENAULT',id:'RENAULT'},{name:'RENAULT',id:'RENAULT'},{name:'RENAULT',id:'RENAULT '}
到目前为止我所做的:-
- 我已经检查过引号并不重要,即单/双。
- 我试图在标签之外构建查询。
同样,一切似乎(?)都井井有条,我无法理解这可能是问题所在。可能结构在解析为函数之前丢失了一些东西?
任何帮助将不胜感激。
谢谢,杰克