Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-10-2012
wull wull is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 30
Poder: 0
wull Va por buen camino
Question Problema al evaluar varias sentencias usando If y AND

Hola a todos de nuevo; según yo estaba a punto de terminar un pequeño proyecto pero descubrí un error, que después de varias pruebas pude identificar pero no halle solución. Estoy tratando de hacer una reporte con varias parámetros, uso adoquery y varios radiogroup para obtener de ahí los parámetros.

Estoy tratando con este codigo
Código Delphi [-]
  if ((RGanio.ItemIndex >-1) and (RGmes.ItemIndex >-1) and (RGstatus.ItemIndex >-1) and (RGregion.ItemIndex >-1)) then
    begin
      with Myquery do
        begin
          Close;
          SQL.Text:= 'SELECT * FROM DATOS WHERE ANIORECEP=:PANIO AND MESRECEP=:PMES AND STATUS=:PSTATUS AND REGION=:PREGION';
          Parameters.ParamByName('PANIO').Value:=RGanio.Items[RGanio.ItemIndex];
          Parameters.ParamByName('PMES').Value:=RGmes.Items[RGmes.ItemIndex];
          Parameters.ParamByName('PSTATUS').Value:=RGstatus.Items[RGstatus.ItemIndex];
          Parameters.ParamByName('PREGION').Value:=RGregion.Items[RGregion.ItemIndex];
          Open;
        end; // fin de with
        Myreport.ShowReport(True);
    end; // fin de if

El error, que segun yo, detecte es que el reporte me muestra datos erroneos porque solo esta tomando en cuenta el primer dato, es decir si selecciono año: 2012, mes: enero, status: on region: centro, lo que seri equivalente a decir en SQL algo asi
Código SQL [-]
slect * from mitabla where anio=2012 and mes=enero and status = on and region=centro
la cosa es que cuando el año cumple la condición ya no toma en cuenta las otras condiciones, es decir mientras el año sea 2012 me muestra todos los datos aunque no coincida con lo que estoy pidiendo; pero cuando el valor año no cumple la condición no me muestra nada; no entiendo porque me esta haciendo esto; no se si es problema del if o de SQL.. espero que me entiendan y me puedan ayudar.
Responder Con Cita
  #2  
Antiguo 25-10-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
A mi me parece que no estás pasando los valores de tus parámetros adecuadamente. Una de dos:

1. O encierras entre comillas los parámetros de la consulta SQL

Código SQL [-]
SELECT * FROM DATOS WHERE ANIORECEP=:PANIO AND MESRECEP=":PMES" AND STATUS=":PSTATUS" AND REGION=":PREGION"

2. O los pasas explícitamente como strings:

Código Delphi [-]
Parameters.ParamByName('PMES').AsString:=RGmes.Items[RGmes.ItemIndex];
Parameters.ParamByName('PSTATUS').AsString:=RGstatus.Items[RGstatus.ItemIndex];
Parameters.ParamByName('PREGION').AsString:=RGregion.Items[RGregion.ItemIndex];

Dado que Año es un valor numérico, este parámetro no da problemas si lo pasas tal cual.

De las dos opciones prefiero la segunda y, de hecho, no estoyseguro de que la primera sea correcta.

// Saludos
Responder Con Cita
  #3  
Antiguo 26-10-2012
wull wull is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 30
Poder: 0
wull Va por buen camino
Hola Roman ya probé tus recomendaciones; la primera no surte ningun efecto y con la segunda me marca error, me dice que AsString no ha sido definida o declarada.
Tratare de ser mas explicito a ver si me puedo explicar. Tengo 6 radiogrpup (año,mes,periodo,status,region, municipio) el reporte se genera a traves de las combinacionaciones de la seleccion de varias opciones de los grupos o de forma individual, es decir le reporte puede incluir solamente el año, o puedo contener el año y el mes; y asi puede ser con las diversas combinaciones ( 25 combinaciones segun yo, esas hice) entonces para lograrlo tengo condiciones a traves de sentencias if, algo asi:

Código Delphi [-]
 if (RGanio.ItemIndex > -1)  then// si se ha elegido el año solamente
begin
/ /codigo
end
Así lo hago para cada uno, para empezar y despues voy con las combinaciones. Aquí funciona muy bien, es decir mientras se seleccione solo una opción no importa si es año, mes etc.
El problema viene con las combinaciones por ejemplo, si tengo el siguiente registro:
Nombre: juan Perez
Tel: 48595
fecha de registro: año: 2012 mes: enero dia: 25
periodo: primero
municpio:tlapa
region: montaña
status: on

Si los parámetros de la consulta existen, me muestra el reporte sin problemas ( es decir si todos los parámetros coinciden), lo incesante viene aquí:
supongamos que en la consulta SQL, yo estoy pidiendo que muestre los registros donde año=2012, mes= febrero, periodo= segundo, municipio:zihuatanejo, region: costa. AL hacerlo así me muestra el registro anterior, porque el año si coincide no importa que el resto de parámetros sea incorrecto. Asi me pasa con el resto de combinaciones, ahora si seleccionan mes=enero, el reporte muestra el registro que escribe aunque municipio y el resto de parámetros sean distintos ( en este caso no incluyo año, y de cualquier manera ocurre lo mismo) por eso digo que es como si solamente tomara el primer parámetro, porque si el primer parámetro no coincide con ningún registro entonces me muestra el reporte vació, porque no hay un registro que cumpla los condiciones esto esta bien, por ejemplo si elijo año=2013 (el resto de parámetros sigue igual) , entonces como no hay un registro con esos datos.. el reporte esta en blanco.. cabe mencionar que solamente tengo un registro porque apenas lo estaba probando y estoy usando fastreport.
Responder Con Cita
  #4  
Antiguo 26-10-2012
cancun cancun is offline
Miembro
 
Registrado: may 2003
Ubicación: Cancun, México
Posts: 114
Poder: 21
cancun Va por buen camino
Hola


Deberías poner el código completo aunque sea largo, para examinar el resultado de tu consulta puedes usar un DBGrid (asi lo hago) y ya despues pasas al reporte cuando esten bien los datos, haz examinado como queda tu instrucción SQL final? como mencionas que se puede combinar las opciones supongo que por allí está el error, tambien deberias mencionar el tipo de los datos.


Saludos
__________________
Cancun, Q.Roo, México
Responder Con Cita
  #5  
Antiguo 26-10-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por wull Ver Mensaje
y con la segunda me marca error, me dice que AsString no ha sido definida o declarada
Cierto. No me había percatado que está usando ADO. Tendrías que especificar directamente el tipo de datos del parámetro:

Código Delphi [-]
Parameters.ParamByName('PMES').DataType:=ftString; // Algo así, no estoy seguro
Parameters.ParamByName('PMES').Value:=RGmes.Items[RGmes.ItemIndex];

// Saludos
Responder Con Cita
  #6  
Antiguo 30-10-2012
wull wull is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 30
Poder: 0
wull Va por buen camino
Thumbs up

Ufff por fin resolví el problema, y siguiendo el consejo de la otra guia de estilo, pues no había publicado la respuesta... jaaa. No es cierto la verdad es que no supe que paso, como ya había probado con las soluciones que me proporcionaron el foro y no funcionaron, decidí escribir el código de nuevo paso a paso; supongo que tenia algún error de dedo o no lo se, pero ahora que reescribí el código funciona todo bien, ya lo he probado. Roman te comento que probé con tus respuestas y no había ningún cambio, los parámetros los escribí de forma normal (es decir sin las comillas) y todo marcha bien. Gracias de nuevo por su ayuda.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ejecucion de varias sentencias StartKill PHP 1 08-02-2008 02:30:05
Ejecutar varias sentencias en MySQL DTAR SQL 2 23-10-2006 19:11:21
Problema al evaluar una expresión matemática JesusG Varios 2 08-09-2006 15:41:46
Realizar varias sentencias SQL a la vez walace_soy SQL 3 23-09-2004 12:15:17
varias sentencias CREATE en el mismo SCRIPT ronson Firebird e Interbase 17 18-02-2004 18:26:37


La franja horaria es GMT +2. Ahora son las 21:01:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi