Foros del Web » Programación para mayores de 30 ;) » Programación General »

Consulta dentro de un CFLOOP

Estas en el tema de Consulta dentro de un CFLOOP en el foro de Programación General en Foros del Web. Tengo el siguiente problema: En una página CFM recibo mediante checkbox unos registros desde una base de datos. Envio por medio de CFFORM estos datos ...
  #1 (permalink)  
Antiguo 30/09/2004, 12:43
 
Fecha de Ingreso: septiembre-2004
Mensajes: 14
Antigüedad: 19 años, 7 meses
Puntos: 0
Consulta dentro de un CFLOOP

Tengo el siguiente problema:
En una página CFM recibo mediante checkbox unos registros desde una base de datos. Envio por medio de CFFORM estos datos a otra página que los lee mediante un CFLOOP trabajando como lista; pero al tratar de ejecutar una consulta con estos datos ColdFusion genera automáticamente un CFOUTPUT lo que me deja inválida la consulta:

lo que llega a la base de datos es algo así como:
select * from pedidos where cod_pedido=<CFOUTPUT>2</CFOUTPUT>
lo que necesito es que la consulta quede:
select * from pedidos where cod_pedido=2

Que estoy haciendo mal? he buscado documentación sobre el CFLOOP pero todo indica que lo que quiero se puede hacer de esta manera.

Gracias de antemano por sus respuestas...
  #2 (permalink)  
Antiguo 30/09/2004, 13:14
Avatar de orchabel  
Fecha de Ingreso: marzo-2002
Ubicación: Hundido en un rincón...
Mensajes: 401
Antigüedad: 22 años, 2 meses
Puntos: 1
no uses cfoutput, coloca la variable que usas con el cfloop en la lista si usas algo como

<cfloop list="lista">
<cfquery>
select * from pedidos where cod_pedido=#lista#
</cfquery>
</cfloop>

además si vas a ejecutar querys dentro de un ciclo trata de que los nombres de los querys no sean identicos.. porque se confundenlos resultados algo así

<cfset i=0>
<cfloop list="lista">
<cfquery name="query#i#">
select * from pedidos where cod_pedido=#lista#
</cfquery>
<cfset cant = Evaluate("query#i#").recordcount>
<cfset i = incrementvalue(i)>
</cfloop>

saludos!
__________________
BugHunter II
"si quieres un mañana mejor, piensa en ser mejor para un mañana"
  #3 (permalink)  
Antiguo 01/10/2004, 09:10
 
Fecha de Ingreso: septiembre-2004
Mensajes: 14
Antigüedad: 19 años, 7 meses
Puntos: 0
Gracias por contestar.

Es que yo no pongo el <CFOUTPUT> lo coloca Coldfusion por defecto cuando envía el query a la BD.

este es mi código:

<cfloop list="#form.facturar#" delimiters="," index="CodigoPed">
<cfquery datasource="equia" name="ConsPedido">
select * from pedidos where Cod_Pedido = #codigoped#
</cfquery>
</cfloop>

form.facturar es un CFFORM que envía una lista de valores mediante CHECKBOX desde otra página. He probado enviando los datos a una variable y despues haciendo el query porque pensaba que el problema estaba en el CFLOOP pero tampoco me funciona.

<cfset lista="">
<cfloop list="#form.facturar#" delimiters="," index="CodigoPed">
<cfset lista=ListAppend(#lista#,#CodigoPed#)>
</cfloop>
<cfquery datasource="equia" name="ConsPedido">
select * from pedidos where Cod_Pedido in #lista#
</cfquery>

Por último este es el error:

Error Executing Database Query.
[Macromedia][SequeLink JDBC Driver][ODBC Socket][Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'Cod_Pedido in (2,3,5,7)'.

The error occurred in D:\CFusionMX\wwwroot\Equia\SQL.cfm: line 84

83 : <cfquery datasource="equia" name="ConsPedido">
84 : select * from Pedidos where Cod_Pedido in (#lista#)
85 : </cfquery>



--------------------------------------------------------------------------------

SQL select * from Pedidos where Cod_Pedido in (<cfoutput>2</cfoutput>,<cfoutput>3</cfoutput>,<cfoutput>5</cfoutput>,<cfoutput>7</cfoutput>)
DATASOURCE equia
VENDORERRORCODE -3100
SQLSTATE 42000

Please try the following:
Check the ColdFusion documentation to verify that you are using the correct syntax.
Search the Knowledge Base to find a solution to your problem.


Browser Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)
Remote Address 127.0.0.1
Referrer http://localhost:8500/equia/InsFacturas.cfm
Date/Time 01-Oct-04 03:09 AM

Un saludo
  #4 (permalink)  
Antiguo 01/10/2004, 10:33
Avatar de orchabel  
Fecha de Ingreso: marzo-2002
Ubicación: Hundido en un rincón...
Mensajes: 401
Antigüedad: 22 años, 2 meses
Puntos: 1
pues yo creo que el error no está en la forma como lo recibes sino en la que lo envias... revisaste los values de los checkbox en la forma antes de enviarlos?...

la otra es que no veo necesario que realices un listAppend para generar otra lista... ya que el mismo #form.facturar# es una lista... solo coloca esto

<cfquery datasource="equia" name="ConsPedido">
select * from pedidos where Cod_Pedido in ('#form.facturar#')
</cfquery>

saludos!
__________________
BugHunter II
"si quieres un mañana mejor, piensa en ser mejor para un mañana"

Última edición por orchabel; 01/10/2004 a las 11:01
  #5 (permalink)  
Antiguo 01/10/2004, 10:54
 
Fecha de Ingreso: septiembre-2004
Mensajes: 14
Antigüedad: 19 años, 7 meses
Puntos: 0
Si revisé los valores. Es mas en la página de error aparecen:

Syntax error (missing operator) in query expression 'Cod_Pedido in (2,3,5,7)'.

Estos numeros correspoden a valores del campo Cod_Pedido en la Tabla Pedidos. el problema radica en que no se porque carajos el genera esta instrucción como parte de la consulta y la envía a la BD

SQL select * from Pedidos where Cod_Pedido in (<cfoutput>2</cfoutput>,<cfoutput>3</cfoutput>,<cfoutput>5</cfoutput>,<cfoutput>7</cfoutput>)
DATASOURCE equia
VENDORERRORCODE -3100
SQLSTATE 42000

De todas formas voy a probar lo que me sugieres y les cuento

Otra vez gracias
  #6 (permalink)  
Antiguo 04/10/2004, 10:51
 
Fecha de Ingreso: septiembre-2004
Mensajes: 14
Antigüedad: 19 años, 7 meses
Puntos: 0
Tenías razón; el problema venía de la forma que recibía los chekbox.
Había un cfinput que en su value tenia <cfoutput>facturar</cfoutput> y lo enviaba así a la otra forma. Tuve en cuenta tu recomendación en cuanto a la redundancia en el código y me quedó muy bien...

Un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:58.