[返回]
中国计算机报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〉