Access - CONSULTA

 
Vista:

CONSULTA

Publicado por GRIS (20 intervenciones) el 10/08/2007 14:12:43
Hola tengo una consulta :

Set sql5 = CurrentDb()
strSQL5 = "SELECT PORCENTAJE FROM FLETE where ORIGEN like '*" & origen1 & "*'order by fecha DESC"
Set tabla5 = sql5.OpenRecordset(strSQL5, dbOpenDynaset)
If tabla5.RecordCount = 0 Then
fletec1 = 0
Else
fletec1 = IIf(IsNull(tabla5.Fields("PORCENTAJE")), "", (tabla5("PORCENTAJE")))
End If
If Not IsNull(fletec1) Then
cc1 = Replace(cc1, ",", ".")
fletec1 = Replace(fletec1, ",", ".")
cambiom1 = Replace(cambiom1, ",", ".")
flete1 = (Val(fletec1) * Val(cc1)) * Val(cambiom1)
Else
flete1 = 0
End If

pero al momento de que el campo origen está vacío me devuelbe en fletec1 el valor de 0.20, porque hace esto y que pordría hacer para evitarlo ??? ...

la estructura de donde saco el flete es la siguiente

Id ORIGEN PORCENTAJE FECHA
2 ARG 0.08 01-Agosto-2007
3 CAN 0.15 01-Agosto-2007
4 USA 0.08 01-Agosto-2007
5 EU 0.08 01-Agosto-2007
6 CHI 0.20 01-Agosto-2007

Gracias por su ayuda ...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Manejo de valores nulos en cálculos de porcentajes y fletes

Publicado por Alejandro (4142 intervenciones) el 17/08/2023 17:13:30
En tu código, cuando el campo "ORIGEN" está vacío, estás obteniendo el valor 0.20 para "fletec1" porque no estás manejando el caso correctamente. Esto sucede porque el flujo de tu programa llega al bloque "Else" que asigna 0.20 a "fletec1" en lugar de dejarlo como 0.

Para evitar que esto suceda y manejar el caso de un campo "ORIGEN" vacío, puedes realizar algunas modificaciones en tu código. Aquí está una versión corregida:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Set sql5 = CurrentDb()
strSQL5 = "SELECT PORCENTAJE FROM FLETE WHERE ORIGEN LIKE '*" & origen1 & "*' ORDER BY fecha DESC"
Set tabla5 = sql5.OpenRecordset(strSQL5, dbOpenDynaset)
 
If tabla5.RecordCount = 0 Then
    fletec1 = 0
Else
    If IsNull(tabla5.Fields("PORCENTAJE")) Then
        fletec1 = 0
    Else
        fletec1 = tabla5.Fields("PORCENTAJE")
    End If
End If
 
If Not IsNull(fletec1) Then
    cc1 = Replace(cc1, ",", ".")
    fletec1 = Replace(fletec1, ",", ".")
    cambiom1 = Replace(cambiom1, ",", ".")
    flete1 = (Val(fletec1) * Val(cc1)) * Val(cambiom1)
Else
    flete1 = 0
End If

En esta versión, he agregado un segundo nivel de verificación dentro del bloque "Else" para comprobar si el campo "PORCENTAJE" también es nulo. Si "PORCENTAJE" es nulo, entonces se asigna 0 a "fletec1". De esta manera, incluso si "ORIGEN" está vacío y la consulta devuelve un registro, "fletec1" se establecerá correctamente en 0.

Esta corrección debe evitar que se asigne incorrectamente el valor 0.20 a "fletec1" cuando "ORIGEN" está vacío.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar