5 votes

Comment supprimer une ligne d'une requête ColdFusion ?

Étant donné une requête (pseudo-code) :

<cfquery name="myquery">SELECT * FROM stuff</cfquery>

Comment se débarrasser du premier enregistrement ? Dans ce cas, il n'est pas possible de modifier le code SQL. J'ai essayé : myquery.RemoveRows(0,1); mais a reçu une erreur :

No matching Method/Function for Query.REMOVEROWS(numeric, numeric) found

Je suis sur Railo 3 BTW

11voto

DustMason Points 1224

Et voilà :

myquery.RemoveRow(1);

Fait exactement ce que je voulais. Il faut laisser à Railo le soin de faire les choses un peu différemment !

4voto

charliegriefer Points 2588

Je ne connais pas de moyen de supprimer une ligne de l'objet d'origine. Deux choses me viennent à l'esprit :

  1. effectuer une ou plusieurs requêtes. Cela suppose que vous soyez en mesure d'identifier les enregistrements que vous ne et les spécifier dans le champ WHERE.

  2. construire une nouvelle requête avec queryNew(). Bouclez sur la requête originale en effectuant un querySetCell() dans la nouvelle requête pour les enregistrements que vous souhaitez. Cette fonctionnalité pourrait être incorporée dans un UDF assez facilement. En fait, en disant cela, j'ai pensé à vérifier cflib.org. Voir #3

  3. Consultez cflib.org :) Voir http://www.cflib.org/udf/QueryDeleteRows

2voto

TheGerm Points 481

"RemoveRows" est en fait un appel à la méthode Java sous-jacente, vous devez donc convertir ces nombres comme suit :

myquery.RemoveRows(
    JavaCast( "int", 0 ) // starting row, zero-based
    ,JavaCast( "int", 1 ) // number to delete, returns error if too many
)

La méthode est donc probablement "int,int", et si vous ne la cassez pas, elle ressemble à "numeric,numeric". On pourrait dire que ce n'est pas documenté, mais c'est tellement succinct qu'on pourrait (comme je l'ai fait) l'intégrer dans une fonction, de sorte qu'en cas de changement, il suffirait de remplacer le contenu de la fonction par une solution de rechange.

2voto

enigment Points 1044

Railo a ajouté removeRows, voir aquí . Mon code ACF qui utilise cette méthode fonctionne maintenant sur Railo aussi, sans changement.

Ainsi, la mise en œuvre de Railo correspond désormais à celle d'ACF. (Notez également que l'implémentation originale de Railo était basée sur 0, alors que la nouvelle implémentation et la version ACF sont toutes deux basées sur 1).

0voto

Dave Long Points 3716

Normalement, je procéderais avec une ou plusieurs requêtes telles que celles qui suivent :

SELECT * FROM myquery
LIMIT {1,10000}

Cela devrait fonctionner avec Railo. Ce qu'il fait, c'est décaler la requête d'une unité et extraire 10000 enregistrements.

Vous pouvez également procéder de la manière suivante :

SELECT * FROM myquery
WHERE {primarykey} <> {value}

Il sélectionne tous les enregistrements à l'exception de la valeur de la clé primaire que vous transmettez.

Ce qui est génial avec ColdFusion, c'est qu'il y a des tonnes de façons de faire exactement ce que vous cherchez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X