Programación General > Bases de Datos
Decisiones Tipo If Else Resultado
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]<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 <campo>HAVING (Sum(Total_lb)-44) > 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 = "Select Sum(AM_lb) AS AM1, Sum(PM_lb) AS PM1, Sum(Total_lb) As Total1, " SQL2 = SQL2 & "Sum(AM_ext_d) As AM2, Sum(PM_ext_d) As PM2, Sum(Total_ext_d) As Total2, " SQL2 = SQL2 & "Sum(AM_ext_n) As AM3, Sum(PM_ext_n) As PM3, Sum(Total_ext_n) As Total3 " SQL2 = SQL2 & "From chl_tb " SQL2 = SQL2 & "Where NumEmp=" & TxtNEmp.Text & " And " SQL2 = SQL2 & "Fecha Between #" & Format(DTPFecha1.Value, "yyyy-mm-dd") & "# And #" & Format(DTPFecha2.Value, "yyyy-mm-dd") & "# " 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
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa