[返回]
中国计算机报1999年第71期
如何用ColdFusion从数据库中取出任意记录集
朱非白
假设你要从一个有关报价的数据库中取出一个报价,数据库中包含3项内容:报价编号、报价人以及报价内容。报价编号对于数据库而言是最关键的内容,它是一个独一无二的数字值(在这个例子中,就是Microsoft
Access数据库中一个自动生成的数字);报价人是一个简单的文本区;报价内容属于一个摘要记录区域。
从数据库中提出一个任选值有两种可能发生的情况。
第一种情况:
首要关键值(报价编号)对于每个记录集来说构成了一个连续的顺序。这样,第一个记录的报价编号是1,第二个记录的报价编号是2,第三个记录的报价编号是3,依次类推。首先我们计算出数据库中共有多少条记录。
〈CFQUERY name=″GetTotalNumber″ datasource=″Cnet″〉
SELECT MAX(QuoteID) AS TotalQuotes
FROM Quotes
〈/CFQUERY〉
知道数据库中记录的总数量以后,第二步是定义一个任选范围,并从这一范围中选出一个任意记录。
〈CFSET RandomQuote = RANDRANGE(1, GetTotalNumber.TotalQuotes)〉
最后,使用任意记录数字作为选择标准执行一个查询。
〈CFQUERY name=″GetQuote″ datasource=″CNet″〉
SELECT Quote, Author
FROM Quotes
WHERE QuoteID = #RandomQuote#
〈/CFQUERY〉
现在你只需要使用标识符〈CFOUTPUT〉将这个报价输出到你的HMTL页面就可以了。
第二种情况:
当数据库中的记录是按数字顺序排列时,我们在“第一种情况”中讨论的方法完全可以胜任。但是,如果你曾经删除过一些记录,在记录的自然顺序中就会出现空缺。使用第一种方法提取记录时就有可能去提取已经不存在了的记录,结果是返回一个空的记录或者导致报错。
这时,你应该只从有效的记录池中选择一个任意记录,ColdFusion
的list 函数可以解决这个问题。
让我们依然使用“第一种情况”中的例子,假定你需要从报价的数据库中任意取出一个报价。数据库中包括了三个项目:报价ID、报价人、还有报价内容。报价ID还是首要关键项,并且是一个惟一的数字值(在本例中,是由Microsoft
Access自动地给出一个数字项)。报价人是一个简单的文本区,报价内容属于一个摘要记录区域。
第一步是从数据库中查询所有有效的首要关键项(即报价编号):
〈CFQUERY name=″GetQuoteID″ datasource=″CNet″〉
SELECT QuoteID
FROM Quotes2
〈/CFQUERY〉
接下来,为查询到的有效值建立列表,确定列表中元素的编号。使用函数RANDRANGE在列表中选择一个特定位置,ColdFusion将从这个位置选择一个报价ID并将值设置为一个变量。
〈CFSET QLIST = ValueList(GetQuoteID.QuoteID)〉
〈CFSET ListPosition = RANDRANGE(1,ListLen(QList))〉
〈CFSET RandomQuote = ListGetAt(Qlist, ListPosition)〉
最后,使用随机选定的报价ID查询数据库提取相应的报价。
〈CFQUERY name=″GetQuote″ datasource=″CNet″〉
SELECT Quote, Author
FROM Quotes2
WHERE QuoteID = #RandomQuote#
〈/CFQUERY〉