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

Problemas con IFNULL????

Estas en el tema de Problemas con IFNULL???? en el foro de .NET en Foros del Web. Hola a todos Haber si me dan una mano. Tengo la siguiente query (aportada por Jurena del foro MySql) para hacer una consulta a una ...
  #1 (permalink)  
Antiguo 02/09/2008, 07:41
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Problemas con IFNULL????

Hola a todos

Haber si me dan una mano. Tengo la siguiente query (aportada por Jurena del foro MySql) para hacer una consulta a una BD MySql al probarla sobre el SqlYog funciona sin ningún problema, pero al hacer la consulta desde el formulario de VB empiezan mis dramas. Tengo la sospecha que el " IFNULL" es ignorado por VB al momento de leer el codigo, digo esto porque el campo lo he cambiado de lugar dentro del select y no parece haber ningun cambio en el orden de las columas.
Para precisar el problema es que la columna "evaluaciones" que debe lisatarme la cantidad de evaluaciones no aparace en el flexgrid del formulario, es como si no existiera.

desde ya agradesco su ayuda

Código:
"SELECT a.Nombre_agente as AGENTES,a.Empleador_agente AS EMPRESA," _
                   & " a.Estado , a.tipo_turno,IFNULL( T1.eval, '0' ) evaluaciones " _
                   & "FROM callcapture.agentes a " _
                   & "LEFT JOIN (SELECT a.Nombre_agente na, COUNT( a.Nombre_agente ) eval  " _
                   & "FROM callcapture.agentes a " _
                   & "INNER JOIN callcapture.evaluaciones e ON a.Nombre_agente = e.agente_evaluado " _
                   & "WHERE e.fecha_evaluacion BETWEEN '2008-06-01' AND '2008-08-30' " _
                   & "GROUP BY a.Nombre_agente )T1 ON a.Nombre_agente = T1.na " _
                   & "WHERE a.empleador_agente like '%' " _
                   & "AND a.tipo_turno like '%' " _
                   & "AND a.estado like '%' " _
                   & "ORDER BY a.Nombre_agente", cnn, adOpenKeyset, adLockOptimistic
  #2 (permalink)  
Antiguo 02/09/2008, 08:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problemas con IFNULL????

1. Cambiar de posición el IFNULL(T1.Eval,'0') no cambiará nada en el ordenamiento de los registros, porque ni T1.Eval ni su alias son parte del ORDER BY.

2. La pregunta que no aclaras es si la columna evaluación aparece con '0' en algún registro. SI lo ahce, el IFNULL está funcionando, ni no lo hace y aparece una celda vacía, el problema es que el campo en ese registro no contiene NULL, contiene un caracter vacío...

3. IFNULL no puede ser "ignorado" como supones, porque VB no ejecuta el IFNULL, lo ejecuta la base de datos. Para VB IFNULL es una parte de un string que se envía a la base de datos, y que no interpreta por sí mismo.

4. Respecto a no aparecer en en flexgrid, sería conveniente verificar que efectivamente se está invocando la carga del mismo. En ese sentido lo mejor sería que postearas el código que usas para poner los datos obtenidos de MySQL en el FG.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 02/09/2008, 08:52
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: Problemas con IFNULL????

Gracias por la rapida respuesta:

Haber si aclaro un poco el tema:
Cita:
1. Cambiar de posición el IFNULL(T1.Eval,'0') no cambiará nada en el ordenamiento de los registros, porque ni T1.Eval ni su alias son parte del ORDER BY.
Perdon me refería a que cambie la ubicación de las columnas de la consulta, por ejemplo, el select lo comencé con el IFNull....., '0'), y luego los otros campos, pero en el flexgrid me seguia aparciendo las columnas en el orden agente, empresa, estado, turno, como si la columna evaluaciones no existiera. o sea no me refiero al Order by

Cita:
2. La pregunta que no aclaras es si la columna evaluación aparece con '0' en algún registro. SI lo ahce, el IFNULL está funcionando, ni no lo hace y aparece una celda vacía, el problema es que el campo en ese registro no contiene NULL, contiene un caracter vacío...
Claro lo que pasa es que la columna evaluaciones NO aparece en el flexgrid (ni el encabezado ni mucho menos los valores), y al hacer la misma consulta directamente sobre la Mysql levanta la columna en la que hay datos en '0', y con valores mayores, o sea funciona
Cita:
3. IFNULL no puede ser "ignorado"
fue lo primero que se me ocurrió, pero entonces porque no levanta datos ???

Cita:
4.
Este es el codigo del modulo bas, en el tengo hecha la conexión al BD (cnn) y el recorset es rs

Código:
       Set FlexAgentes.DataSource = rs
        With FlexAgentes
            .ColWidth(0) = 3700
        .ColWidth(1) = 1500
        .ColWidth(2) = 1200
        .ColWidth(3) = 1300
        .ColWidth(4) = 1600
        .ColWidth(5) = 1500
        .ColWidth(6) = 1500
        .ColWidth(7) = 1500
                
        .ColAlignmentFixed(1) = 1
       .ColAlignment(1) = 1
             End With
El codigo del select es el que postee mas abajo y lo ajecuto con rs.Open " Select..." Bueno este mismo flex es ocupado para hacer varias consultas sobre las mismas tablas y funciona sin problemas, de hecho esta misma consulta funcionaba bien, pero necesitaba listar los datos de esta manera, entoces aparecio este codigo que mediante el ifnull cuenta las evaluaciones en 0 cuando los agentes no han tenido movimiento dentro de un periodo determinado.
  #4 (permalink)  
Antiguo 02/09/2008, 18:26
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: Problemas con IFNULL????

Alguna idea de lo que puede estar pasando??

Gracias
  #5 (permalink)  
Antiguo 04/09/2008, 13:33
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: Problemas con IFNULL????

Hola

Por si a sirve para alguien, solucioné el problema del IFNULL IFNULL( T1.eval, '0' )AS EVALUACIONES, (que por alguna razón se peleó con VB) y lo cambien por sum(if(t1.eval='',a.nombre_agente ,t1.eval)) Evaluaciones y asunto arreglado


Código:
 rs.Open "SELECT a.Nombre_agente AGENTES, a.Empleador_agente EMPRESA," _
                   & " a.Estado ESTADO , a.tipo_turno TURNO," _
                   & "sum(if(t1.eval='',a.nombre_agente ,t1.eval)) Evaluaciones " _
                   & "FROM callcapture.agentes a " _
                   & "LEFT JOIN (SELECT a.Nombre_agente na, COUNT( e.agente_evaluado ) eval  " _
                   & "FROM callcapture.agentes a " _
                   & "INNER JOIN callcapture.evaluaciones e ON a.Nombre_agente = e.agente_evaluado " _
                   & "WHERE e.fecha_evaluacion " _
                   & "" & Vfechadesde & " " _
                   & "" & Vfechahasta & " " _
                   & "GROUP BY a.nombre_agente )T1 ON a.Nombre_agente = T1.na " _
                   & "WHERE " _
                   & "" & VEmpresaAgente & "" _
                   & "" & VEstadoAgente & "" _
                   & "" & VTipoTurno & "" _
                   & "GROUP BY a.id_agente " _
                   & "ORDER BY a.Nombre_agente ", cnn, adOpenKeyset, adLockOptimistic
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 00:48.