在我的cfoutput
标记中,我设置了一个变量,用于存储从查询返回的客户的名称。然后我在WHERE
标记的cfquery
子句中使用该变量来检索客户信息。但是,在提交表单时,我在某些搜索条件下收到错误Variable CUSTOMER is undefined
。我认为当CUSTOMER变量为null时会发生错误。我在以下Where子句中尝试了各种选项,例如where Customers.CustomerName = #IIF(isDefined('Form.CUSTOMER'),de(Form.CUSTOMER),de(''))#
,但我仍然遇到同样的错误。我在后端使用SQL Server 2012
。请注意,我无法在cfparam
内使用cfoutput
:
<cfoutput query="qry_customers">
<cfset CUSTOMER = #CUSTOMER#>
</cfoutput>
<cfquery name="get_customers" datasource="#request.dsn_name#">
SELECT * from Customers
where Customers.CustomerName = '#CUSTOMER#'
</cfquery>
更新错误发生在下面WHERE
标记的cfquery
子句中。并且它发生only when
cfquery标记中的select语句不返回任何记录。 CF错误显示错误的第#行是WHERE子句所在的行。
答案 0 :(得分:2)
qry_customers没有行时,你会得到那个错误。只需直接引用qry_customer.customer即可。 (如果没有行,这将等同于一个空字符串。您可能最终想要检查qry_customers.RecordCount。)
答案 1 :(得分:2)
我建议尝试一些事情:
private String projectsAsString;
...
public final void convertProjectsToString() {
String projects = "";
for (Project p : this.getProjects()) {
ProjectControl pp = (ProjectControl) p;
projects += pp.getName() + ", ";
}
if (projects != null && projects != "" && projects.length() > 4) {
projects = projects.substring(0, projects.length() - 2);
}
this.projectsAsString = projects;
}
是必要的。如果我正确读取它,您只需将变量名称设置为完全相同的名称。此外,它似乎是一个文本字段(基于您的查询将其与名为“CustomerName”的列匹配,而不是像“CustomerNumber”那样)。因此,您至少需要包含引号:<cfset CUSTOMER = #CUSTOMER#>
。<cfset CUSTOMER = "#CUSTOMER#">
而非qry_customers.CUSTOMER
。CUSTOMER
标记中传递变量(例如,<cfqueryparam>
)<cfqueryparam value="#qry_customers.CUSTOMER#", CFSQLType="CF_SQL_VARCHAR">
。