Programación General > Bases de Datos

 Decisiones Tipo If Else Resultado

<< < (2/3) > >>

F_Tanori:

--- Cita de: "usercode" ---
He probado algo como:
--- Citar ---
Select Sum(AM_lb) AS AM1, Sum(PM_lb) AS PM1, Sum(Total_lb) As Total1,
(Select (Sum(Total_lb)-44) As TotalLb From chl_tb Where TotalLb > 44) As Clau26,
Sum(AM_ext_d) As AM2, Sum(PM_ext_d) As PM2, Sum(Total_ext_d) As Total2,
Sum(AM_ext_n) As AM3, Sum(PM_ext_n) As PM3, Sum(Total_ext_n) As Total3
From chl_tb
Where NumEmp=30915
And Fecha Between #08/05/2007# And #20/05/2007#
--- Fin de la cita ---

--- Fin de la cita ---


En access puedes utilizar funciones en las consultas si quieres utilizar un if puede ser asi


--- Código: Text ---select numcuenta,mes,IIf([Saldo]&#60;0,0,[Saldo]) as SaldoF from cuentas 
y si quieres hacer referencia aun campo calculado, no puedes hacerlo con un where
tienes que usar Having y es posible que sea necesario agrupar por algun campo



--- Código: Text ---SELECT(Sum(Total_lb)-44) As TotalLb From chl_tb GROUP BY &#60;campo&#62;HAVING (Sum(Total_lb)-44) &#62; 44 

esa la resuelves como subconsulta en otra consulta para que puedas utilizarla, espero te sirva almenos de orientacion ya que no tengo de momento manera de probarlo en una bd


Saludos

UserCode:
Epale F_Tanori que tal como va todo, y la familia bien? a que bueno me alegro, que siga asi entonces  ^_^

Con eso que expones ya tengo plan B  :lol:

El plan A al cual había recurrido es el siguiente, con esta SQL de siempre:

--- Código: Text ---         SQL2 = &#34;Select Sum(AM_lb) AS AM1, Sum(PM_lb) AS PM1, Sum(Total_lb) As Total1, &#34;        SQL2 = SQL2 & &#34;Sum(AM_ext_d) As AM2, Sum(PM_ext_d) As PM2, Sum(Total_ext_d) As Total2, &#34;        SQL2 = SQL2 & &#34;Sum(AM_ext_n) As AM3, Sum(PM_ext_n) As PM3, Sum(Total_ext_n) As Total3 &#34;        SQL2 = SQL2 & &#34;From chl_tb &#34;        SQL2 = SQL2 & &#34;Where NumEmp=&#34; & TxtNEmp.Text & &#34; And &#34;        SQL2 = SQL2 & &#34;Fecha Between #&#34; & Format(DTPFecha1.Value, &#34;yyyy-mm-dd&#34;) & &#34;# And #&#34; & Format(DTPFecha2.Value, &#34;yyyy-mm-dd&#34;) & &#34;# &#34; Data2.RecordSource = SQL2Data2.Refresh  
Y de esa SQL meti sus Alias en unos Labels así:

--- Citar ---        Dim AMLb As Double
        Dim PMLb As Double
        Dim TotalLb As Double
        Dim Clausula26 As Double
        Dim AMextD As Double
        Dim PMextD As Double
        Dim TotalextD As Double
        Dim AMextN As Double
        Dim PMextN As Double
        Dim TotalextN As Double
       
        With Data2.Recordset
            While Not .EOF
                '.......................................
                'AM: (Horario Laboral Normal)
                If IsNumeric(![AM1]) = False Then
                    Exit Sub
                Else
                    AMLb = Val(AMLb) + Val(![AM1])
                End If
                '.......................................
                'PM: (Horario Laboral Normal)
                If IsNumeric(![PM1]) = False Then
                    Exit Sub
                Else
                    PMLb = Val(PMLb) + Val(![PM1])
                End If
                '.......................................
                'Total1: (Total Horas Laboradas)
                If IsNumeric(![Total1]) = False Then
                    Exit Sub
                Else
                    TotalLb = TotalLb + Val(![Total1])
                End If
                '.......................................
                'Clausula 26:
                If IsNumeric(![Total1]) = False Then
                    Exit Sub
                End If
               
                If Val(![Total1]) > 44 Then
                    Clausula26 = Clausula26 + Val(![Total1]) - 44
                Else
                    Clausula26 = 0
                End If
               
                '.......................................
                'AM Extra Diurna:
                If IsNumeric(![AM2]) = False Then
                    Exit Sub
                Else
                    AMextD = AMextD + Val(![AM2])
                End If
                '.......................................
                'PM Extra Diurna:
                If IsNumeric(![PM2]) = False Then
                    Exit Sub
                Else
                    PMextD = PMextD + Val(![PM2])
                End If
                '.......................................
                'Total Extra Diurnas:
                If IsNumeric(![Total2]) = False Then
                    Exit Sub
                Else
                    TotalextD = TotalextD + Val(![Total2])
                End If
                '.......................................
                'AM Extra Nocturna:
                If IsNumeric(![AM3]) = False Then
                    Exit Sub
                Else
                    AMextN = AMextN + Val(![AM3])
                End If
                '.......................................
                'PM Extra Nocturna:
                If IsNumeric(![PM3]) = False Then
                    Exit Sub
                Else
                    PMextN = PMextN + Val(![PM3])
                End If
                '.......................................
                'Total Extra Nocturna:
                If IsNumeric(![Total3]) = False Then
                    Exit Sub
                Else
                    TotalextN = TotalextN + Val(![Total3])
                End If
                '.......................................
                .MoveNext
            Wend
        End With
        LbAM1.Caption = AMLb
        LbPM1.Caption = PMLb
        LbTotal1.Caption = TotalLb
    LbClau26.Caption = Clausula26
        LbAM2.Caption = AMextD
        LbPM2.Caption = PMextD
        LbTotal2.Caption = TotalextD
        LbAM3.Caption = AMextN
        LbPM3.Caption = PMextN
        LbTotal3.Caption = TotalextN

--- Fin de la cita ---

Los Exit Sub entre ellas es porque cuando la SQL2 no encuentra nada en el rango de fechas, entonces daba error de Null. Estos Labels están abajo de un MSFlexGrid el cual es el que muestra la consulta de la tabla, generado por una SQL1. Estos Labels son Totales de columna del MSFlexGrid pero exactamente de la Tabla de la BD, la grilla solo se lo trae.

Pero con esto ultimo he visto que los Totales no sirven para decimales ya que esos Labels de Totales hacen esto: 1 + 1.5 = 2  

Yo creo que pondre en comentarios el Plan A y pasare a tu Plan B de "rompa el vidrio en caso de emergencia" y que quede lo que por fin sirva al 100% sin fallos :unsure:

PD: Estos totales solo salen en la ventana (Form) no se guardan en la BD, se generan en base a los datos de la BD pero no se guardan. Si salen en un reporte. Gracias a las funciones de Crystal eso del TotalLB>44 si se hace bien en el reporte, me costó pero ya se guardan decimales en la BD antes tambien caían redondeados como enteros, ya había provado con CDec(), CDbl(), CCur(), si salian los decimales pero se guardaban en la BD valores enteros, pero ya, ahora si se guardan decimales.  Todo estos datos son de Horas, al hablar de decimales es por lo que trabajar 1 y 1/2 siendo asi 1.5 (una hora y media)  En pocas palabras mi problme es realmente dos, decimales (2 digitos) sin redondeo y ese susodicho dato de Clausula26 y es todo y lo único que me falta para cerrar ese capitulo <_< jum!

UserCode:
Parece que ya esta resuelto  B)

Queria seguir probando con lo que ya tenia armado, me daba cosa probar de 0 con otra cosa distinta desde el comienzo, asi que ahí dandole a ver que podía arreglar de lo montado.

Cambie el:
AMLb = Val(AMLb) + Val(![AM1])

Por un leve ajuste:
AMLb = Format(CCur(AMLb) + CCur(![AM1]), standard)

E igual con los demás, y ya muestra decimales.

Todo listo, muchas gracias muchachos  :comp:

Ahora solo me queda resolver el redondeo de decimales en Crystal.
Aun indicando a cada campo del reporte, el Formato de decimal y aun trayendose los datos (que si estan en decimal) de la Tabla de la BD, Crystal los muestra como enteros y las Formulas de Sumatoria de Crystal me redondean esos datos, parece la historia sin fin  <_<
Pero al menos ya el programa se liberó del problema  :kicking:

UserCode:
Lo siento pero lo expuesto aquí anteriormente no dio resultado, se perdia la conexión (link) con los campos de la tabla, quedando de esa forma, un reporte en blanco, seguire intentando con la esperanza de por fin encontrar la solucion de esto.  :(

F_Tanori:
Hola UserCode


haz probado hacer algo como


<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]SELECT[/color] Sum(AM_lb) AS AM1, Sum(PM_lb) AS PM1, Sum(Total_lb) AS Total1, IIf(Sum([Clausula])>44,Sum([Clausula])-44,0) AS Clau26, Sum(AM_ext_d) AS AM2, Sum(PM_ext_d) AS PM2, Sum(Total_ext_d) AS Total2, Sum(AM_ext_n) AS AM3, Sum(PM_ext_n) AS PM3, Sum(Total_ext_n) AS Total3
FROM chl_tb; <!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->


prueba lo a ver si te sirve  :)

Saludos

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa