2011-08-17 116 views
0

我有一个ColdFusion组件,有一种方法叫getColumnNamesColdfuson CFSCRIPT未找到 “setSQL” 方法

这只是一个查询MySQL表,并返回columnlist:

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方法未找到”。

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

+1

啊我已经回答了我自己的问题了。抱歉。 我已经使用了相同的名称* qProcessCars * else在组件中,我没有把** var **放在它们的前面。 我不知道为什么导致这个问题,但它是。也许** setSQL **只能针对每个* query *对象调用一次? 我实际上不能回答这个问题,因为我刚刚列出了它 –

+0

糟糕,看起来你已经在我完成我的答案之前回答了它。 – Sergii

回答

2

问题可能会导致某种竞争条件。如果几乎没有干扰的调用,qProcessCars可能已经是查询结果,因此调用方法是不可能的。

我会尝试使qProcessCars变量局部作用域(var qProcessCars = new Query(); )和/或尝试对查询结果使用另一个变量名称。

下一步可能的步骤是将查询构建/执行代码封装到指定的锁中。

0

啊我已经回答了我自己的问题了。抱歉。

我使用相同的名称qProcessCars其他地方的成分,我没有把VAR在他们面前。

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

相关问题