Error 94 en tiempo de ejec. Uso no válido de Null.

¿Cómo les va? Desde ya muchas gracias por leer mi consulta...

Estoy queriendo hacer la suma de unos campos... Me tira el erro que marco en el título... No me doy cuenta adónde le estoy errando!

¿A ver si me pueden ayudar? Este es código: Lo tengo después del código de dar el alta y me lo muestra en una grilla que fue dado de alta... El problema es que no me va mostrando los totales en las cajas de texto...

StrSUMSUB105 = "SELECT SUM(Subtotal) AS SUBT105, SUM(Importe) AS IMP105 from Temporal_Factura WHERE Tipo_IVA ='" & 10.5 & "' AND Num_Factura =" & txtNum_Factura.Text & ""
                Set RstSUMSUB105 = New ADODB.Recordset
                RstSUMSUB105.Open StrSUMSUB105, Base, adOpenStatic, adLockOptimistic
                With RstSUMSUB105
                'MsgBox RstSUMSUB105!SUBT105
                    'If .EOF = False Then Exit Sub
                    SUMSUBT105 = !SUBT105
                    MsgBox SUMSUBT105
                    txtSubtotal(0).Text = SUMSUBT105
                    'CDbl(SUMSUBT105)
                    Importe105 = CDbl(!IMP105)
                    TxtImporte(0).Text = CDbl(Importe105)
                    SUMIVA105 = CDbl(!IMP105 - !SUBT105)
                    txtSumatoriaIVA(0).Text = CDbl(SUMIVA105)
                End With
                

1 Respuesta

Respuesta
2

Daniel, no dices dónde te salta el error, y así, por lo pronto, podría venir por dos lados:

1º/ que el recordset no devuelva registros, lo que solucionarías si lo compruebas antes de pasar los datos a los cuadros de texto

2º/ que algún campo no tenga valor, lo que puedes solucionar usando la función Nz() para convertir los nulos a valores válidos para el campo, o bien, analizando si el campo es nulo antes de pasarlo al cuadro de texto.

Gracias por responder!! Perdón la omisión... Todo el código está dentro de un botón (INSERTAR) Luego de insertar un registro... (lo muestro en un Datagrid, con la consulta pertinente con lo cual veo que está...) Luego del procedimiento para mostrar el registro ponía los procedimientos para hacer los cálculos de suma... (antes de hacer un UPDATE...) Ahí creo está el error... 

Igualmente... Ahora lo pongo luego del UPDATE y me sigue sin mostar nada... Quizá esté haciendo mal la consulta... ya que ésta que pego abajo me muestra bien los IMPORTES....

      StrSeleccionaImporte = "Select SUM(Importe) AS Imp from Temporal_Factura WHERE Num_Factura= " & txtNum_Factura.Text & " "
        Set RstSeleccionaImporte = New ADODB.Recordset
        RstSeleccionaImporte.Open StrSeleccionaImporte, Base, adOpenStatic, adLockOptimistic
        Importe = CDbl(RstSeleccionaImporte!IMP)
        TxtImporteTotal.Text = Format(CCur(CDbl(Importe)), "$###,###,###,##0.00")

Pero ésta que tiene la condición del IVA no me muestra nada. Quizá esté haciendo mal la consulta??? La cambié de todas las maneras posibles y no me doy cuenta.

StrSUMSUB105 = "SELECT SUM(Subtotal) AS SUBT105, SUM(Importe) AS IMP105 from Temporal_Factura WHERE Num_Factura =" & txtNum_Factura.Text & " AND Tipo_IVA ='" & 10.5 & "'"
Set RstSUMSUB105 = New ADODB.Recordset
RstSUMSUB105.Open StrSUMSUB105, Base, adOpenStatic, adLockOptimistic
With RstSUMSUB105
If .EOF = False Then Exit Sub
SUMSUBT105 = CDbl(!SUBT105)
txtSubtotal(0).Text = CDbl(SUMSUBT105)
Importe105 = CDbl(!IMP105)
TxtImporte(0).Text = CDbl(Importe105)
SUMIVA105 = CDbl(!IMP105 - !SUBT105)
txtSumatoriaIVA(0).Text = CDbl(SUMIVA105)
End With

Desde ya muchas gracias!!!

Esta línea que pones no tiene ninguna sentido:

If .EOF = False Then Exit Sub

Esa línea quiere decir que si el recordset tiene datos (no está en el End Of File), salga del procedimiento, y por tanto, no te hace el traspaso de los datos del recordset a los cuadros de texto.

Además de lo que puse arriba... Antes, el error: 94 en tiempo de ejec. Uso no válido de Null. Me lo tiraba porque faltaba esta línea:

If .EOF = False Then Exit Sub

Igual, luego de poner esta línea no me muestra la suma de los campos...

OK... Gracias por la aclaración.... Pero... Si lo saco me tira el error... Si no corresponde poner el "If .EOF = False Then Exit Sub" Cómo sería la consulta para que funcione... 

La consulta imagino que está bien, al no saber qué es lo que buscas ni la estructura de la BD...

Si quieres comprobar que el recordset (la consulta) devuelve registros, puedes hacerlo con cualquiera de éstas:

If Not .EOF Then

If Not (.BOF AND .EOF) Then

If Not (.BOF = .EOF) Then

If .RecordCount>0 Then

En cualquier caso, lo que pongas después del Then, se ejecutará si el recordset devuelve algún registro.

Lo pude resolver poniendo la estructura así: 

 If .BOF Or .EOF Then
        Exit Sub
          'código....             
 End If
              

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas