2011-08-17 5 views
0

J'ai un composant Coldfusion, avec une méthode qu'il a appelé getColumnNamesméthode Coldfuson CFScript "de setSQL" n'a pas été trouvé

Cette juste interroge une table MySQL, et retourne le 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; 
} 

Si j'accède cela à distance dans le navigateur, avec page.cfc? Method = getColumnNames, alors je récupère la liste attendue de colonnes.

Cependant, si je tente d'y accéder à l'intérieur une autre méthode dans le composant, je reçois une erreur

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

La décharge d'erreur pour le code ci-dessus renvoie le message « La méthode setSQL n'a pas été trouvé ».

Donc, quelqu'un peut-il m'aider à trouver pourquoi cela fonctionne comme un appel à distance, mais pas lorsqu'il est appelé à partir d'une autre méthode à l'intérieur du même composant.

+1

Ah j'ai encore une fois répondu à ma propre question. Pardon. J'ai utilisé le même nom * qProcessCars * else où dans le composant, je n'avais pas mis ** var ** devant eux. Je ne sais pas POURQUOI c'était le problème, mais c'était le cas. Peut-être que ** setSQL ** ne peut être appelé qu'une seule fois par * requête * objet? Je ne peux pas vraiment répondre à cela pour le moment car je viens juste de l'énumérer –

+0

Oups, on dirait que vous avez répondu avant d'avoir terminé ma réponse. – Sergii

Répondre

2

Le problème peut être causé par des conditions de concurrence. Si vous faites peu d'appels qui interfèrent, qProcessCars peut déjà être un résultat de requête, donc la méthode d'invocation n'est pas possible.

Je voudrais essayer de rendre la variable locale qProcessCars définie (var qProcessCars = new Query(); ) et/ou essayer d'utiliser un autre nom de variable pour les résultats de la requête.

L'étape suivante consiste à inclure le code de construction/d'exécution de la requête dans le verrou nommé.

0

Ah J'ai encore une fois répondu à ma propre question. Pardon.

J'ai utilisé le même nom qProcessCars autre où dans le composant, je ne l'avais pas mis var devant eux.

Je ne sais pas POURQUOI c'était à l'origine du problème, mais c'était le cas. Peut-être setSQL ne peut être appelé qu'une seule fois par requête objet?

Questions connexes