找不到Coldfuson CFScript“setSQL”方法

时间:2011-08-17 14:24:35

标签: mysql coldfusion components

我有一个Coldfusion组件,其中有一个名为 getColumnNames 的方法

这只是查询MySQL表,并返回列表:

remote string function getColumnNames() {
    qProcessCars = new Query();
    qProcessCars.setDataSource('#APPLICATION.dsn#');
    qProcessCars.setSQL('SELECT * FROM sand_cars WHERE 1 LIMIT 1');
    qProcessCars = qProcessCars.Execute().getResult();

    return qProcessCars.columnlist;
}

如果我在浏览器中使用 page.cfc?method = getColumnNames 远程访问此页面,那么我会返回预期的列列表。

但是,如果我尝试从组件中的另一个方法内部访问它,我会收到错误

remote string function otherFunction() {
   ...
   sColumns = getColumnNames();
   ...
}

上述代码的错误转储返回消息“找不到setSQL方法”。

所以任何人都可以帮助我找出它作为远程调用的原因,但不是从同一组件内的其他方法调用时。

2 个答案:

答案 0 :(得分:2)

问题可能会导致某种竞争条件。如果你做几个干扰的调用,在某些时候qProcessCars可能已经是查询结果,所以调用方法是不可能的。

我会尝试将qProcessCars变量设为局部范围(var qProcessCars = new Query(); )和/或尝试使用另一个变量名来查询结果。

接下来可能的步骤是将查询构建/执行代码包含在命名锁中。

答案 1 :(得分:0)

啊我再次回答了我自己的问题。遗憾。

我使用了相同的名称​​ qProcessCars 否则在组件中我没有将 var 放在它们前面。

我不知道为什么导致这个问题,但确实如此。也许每个查询对象只能调用 setSQL 一次?