77家的会客2010

ColdFusion的查询列引用注意事项
Weather:晴 ,北风 4-5级 ,最高气温8 ℃

目前有这样一个查询结果

<cfquery dataSource="CompanyInfo" name="myQuery">
SELECT FirstName,LastName
FROM Employee
</cfquery>

在使用查询列引用一个查询结果myQuery时,ColdFusion的行为不是那么直观。在不使用一个数组索引的前提下,Firstname和myQuery["Firstname"]这两种引用方式会生成不同结果。

下面是这些引用的规则:

(1)如引用myQuery.Firstname,ColdFusion自动将其转换成列中的第一行。例如,下面的代码行将打印单词"Ben":

<cfset myCol = myQuery.Firstname>
<cfoutput>#myCol#</cfoutput>

但下面的代码行将显示一条错误消息:

<cfset myCol = myQuery.Firstname>
<cfoutput>#myCol[1]#</cfoutput>

(2)如引用Query["Firstname"],ColdFusion不自动将其转换成列中的第一行。举个例子来说,下面的这行代码将造成一条错误消息,指出ColdFusion不能将一个复杂类型转换成简单值:

<cfoutput>#myQuery["Firstname"]#</cfoutput>

类似的,下面的代码将显示名称“marjorie",这是列中第二行的值:

<cfset myCol = myQuery["Firstname"]>
<cfoutput>#myCol[2]#</cfoutput>

然而,若进行一次赋值,并要求一个简单值,ColdFusion能将查询列自动转换成第一行的值。例如,下述代码将显示名称“Ben”:

<cfoutput>#myQuery.Firstname#</cfoutput>
<cfset myVar = myQuery["Firstname"]>
<cfoutput>#myVar#</cfoutput>

em10.gif

[ColdFusion的查询列引用注意事项]的回复

子心 于 2006-01-10 09:03:37 发表 | IP:218.75.106.*

经过CFquery以后返回的myQuery是一个Query类型。

<cfset myCol = myQuery.Firstname>
<cfoutput>#myCol#</cfoutput>
是能够正常输出的,但是
<cfset myCol = myQuery.Firstname>
<cfoutput>#myCol[1]#</cfoutput>
你已经cfset过了,myCol已经成为了string变量,你想把它列为数据类型,当然是不成的。

#myQuery["Firstname"]#该值应该是一个Array所以无法正确输出也是正常的,如果你换成#myQuery["Firstname"][1]#试试呢?那就可以了哦。

至于你最后一个问题,通过赋值输出正确,是因为你已经将<cfset myVar = myQuery["Firstname"]>给了myVar,而它是将数组默认赋值了,所以你才能输出myVar。

柠檬园主 于 2006-01-10 16:48:38 发表 | IP:59.44.76.*
嘎嘎,多谢子心指点,好长时间没关注CF了,趁最近的一次机会,第一次把CF实践一把,到时肯定会问题百出了,但也就有更大的机会把CF学会了
Post a Comment~