2011-06-16 165 views
2

我有一个查询要求更新电子邮件服务。大多数时候它都会有数据,但在测试中,我发现它没有返回任何数据,因为没有数据要返回。在没有数据的情况下,它返回错误“变量EDITEDACCTS未定义”。如果没有数据返回,请检查查询结果

我试过在<cftry>包装查询,但它本身不“失败”,因此它不会脱机<cfcatch>。我也试图定义变量

var EditedAccts = QueryNew("")

以及无非是想

<cfif NOT isDefined(#EditedAccts#)>

,它总是返回 “变量EDITEDACCTS是不确定的”。
我需要一个生产就绪解决方案,我希望在这里的某个地方可以帮助我。

在此先感谢您的帮助。

+3

请勿在IsDefined()中使用#号。它会导致对'EditedAccts'的评估,这会触发你试图阻止的错误。这是一个基本的选择查询?因为查询对象本身应该仍然存在,即使它不包含任何记录。 – Leigh 2011-06-16 23:32:58

+1

..忘记包含isDefined的正确语法:'' – Leigh 2011-06-16 23:47:28

+0

Thanks @Leigh。删除#符号工作。我认为这很简单,但我无法看到树木的森林。 – JimP 2011-06-17 14:41:21

回答

3

我刚刚找到答案。您可以在查询调用中设置“result”参数,然后您可以检查返回的recordcount字段。

<cfquery name="EditedAccts" datasource="mydatasource" result="queryResult"> 
    ...query goes here... 
</cfquery> 

当使用“结果”参数你就会得到一个结构与使用的SQL,缓存设置,执行时间和记录计数返回。 现在我可以检查记录数并从那里继续。

希望这将有助于未来的人。

+2

查询结果本身具有recordcount属性。 '#ecitAccts.recordcount#'会给你同样的结果。正如Leigh在您的原始文章中所说的,零记录结果集不会导致异常,并且仍然定义。 – charliegriefer 2011-06-16 23:41:16

+0

*编辑*是否有可能你的cfquery包含除'SELECT'语句之外的东西,比如'UPDATE','DELETE',...? – Leigh 2011-06-16 23:41:35

+0

你这个人,就是我所需要的,谢谢! – 2015-10-22 21:13:20

0

我试过使用result =“queryResult”,但是当我试图引用查询名称时,我得到了类似这样的错误 - “属性查询的值,当前为EditedAccts,无效”。相反,我使用了IsDefined(“#EditedAccts#”) - 包括引号中的值为我做了诀窍。我只是ColdFusion的新手,但我很快就知道引号中的值与引号中的值完全不同,就函数如何解释参数而言。

+0

嗯,它确实是在个案的基础上。理论上,SELECT应该*总是*返回一个查询对象。除非有什么干扰......比如查询包含多个sql语句,所以我们需要查看实际的查询。顺便说一句,不要在isDefined中使用#号。该函数需要一个变量的*名称*,即一个字符串。正如我在[评论](http://stackoverflow.com/questions/6379730/check-query-results-if-no-data-is-returned#comment7473686_6379730)中提到的那样,使用#符号表示会导致变量被评估,触发你试图防止的错误:) – Leigh 2016-04-15 03:50:37

+0

感谢您的澄清。我没有用#测试,我不确定这是否是正确的语法(这就是为什么我说,类似的东西) - 我实际上使用IsDefined(“insertQueryNameHere”)。我认为查询非常简单,沿着'SELECT col1,col2 FROM table1 INNER JOIN table2 on table1_id = table2_id WHERE criteria order by col1'的行,所以不知道为什么没有返回查询对象。 – B5A7 2016-04-15 05:00:50

+0

是的,我认为真正的代码没有#符号或它会失败。只是想提及IsDefined的正确语法,因为使用#符号是一个常见的问题:)从描述中,声明听起来没问题,但它又取决于* exact *查询,环境,查询范围等等。 – Leigh 2016-04-15 12:05:49