Insertar campo calculado vba access a tabla

Tengo un formulario que contiene un cuadro de texto calculado(independiente) y al ejecutar desde un botón una sql lo hace bien pero el importe lo pasa sin decimales.

El campo calculado tiene formato moneda al igual que el campo de la tabla a la que se inserta el dato.

1 Respuesta

Respuesta
3

Verifica que en el la tabla el campo lo has definido (el tipo de dato, no su formato) como doble, decimal, moneda o cualquier otro que admita decimales.

Si lo anterior ya lo tienes, yo probaría a usar la función CCur() para pasar el valor, por ejemplo:

CurrentDb.Execute "INSERT INTO Tabla(Campo) VALUES (" & CCur(Me.CampoIndep) & ")"

Por si el problema está (que no creo) en el separador decimal.

¡Gracias! . He probado pero sigue igual. Hace la inserción pero si tengo un valor de 23,40€ me inserta en la tabla de destino 23,00€. Es como si redondease la cantidad. La variable que tengo definida antes de ejecutar la sql es de tipo long. A ver si te da más pistas. Un saludo y gracias por contestar.

Long es un  tipo de dato numérico que no admite decimales, usa Double, Currency o Decimal, cono te indicaba para el campo de la tabla.

Si la variable VResultado es de tipo Double,Currency me da error. Si que veo que carga bien el importe como se aprecia en la imagen.

En cambio:

 Con la variable Long si carga pero redondea los decimales

Private Sub Comando1429_Click()
Dim liquidacionSQL As String
Dim vResultado As Long
vResultado = Nz(Me.txtLiquidacion.Value, 0)
Me.txtnumero.Value = vResultado
mensaje = (MsgBox("?Quiere guardar liquidaci?n?", vbQuestion + vbYesNo, "Aviso"))
Me.Form.Requery
    If mensaje = vbYes Then
    CurrentDb.Execute "INSERT INTO tb_liquidacion(n?delegacionL,empleadoL,a?oL,fechaActualL,tipoIngresoL,importeLiquidacionL)" _
    & "VALUES (" & Me.cboDelegacion & ",'" & Me.cboEmpleado & "'," & Me.txtA?o & ",'" & Me.txtFecha & "','" & Me.tipoIngresoIN & "'," & vResultado & " )", dbFailOnError
MsgBox "Se ha cargado datos correctamente", vbInformation, "Aviso"
Me.Form.Requery
Else
MsgBox ("Importaci?n cancelada"), vbExclamation, "Importaci?n cancelada"
End If
End Sub

¿Y qué error te da?

A vResultado la deberías declarar igual que el campo de la tabla al que lo quieres insertar (importeLiquidacion), es decir, si en la tabla lo tienes como Moneda, declárala como Currency, si lo tienes como Doble, declárala como Double y así...

¡Gracias! El error es:

Se ha producido el error '3346' en tiempo de ejecución:

El número de valores de consulta y el numero de campos de destino son diferentes.

Abajo pongo  donde salta el error:

    CurrentDb.Execute "INSERT INTO tb_liquidacion(n?delegacionL,empleadoL,a?oL,fechaActualL,tipoIngresoL,importeLiquidacionL)" _
    & "VALUES (" & Me.cboDelegacion & ",'" & Me.cboEmpleado & "'," & Me.txtA?o & ",'" & Me.txtFecha & "','" & Me.tipoIngresoIN & "'," & vResultado & " )", dbFailOnError

Saludos y gracias por su atención.

Como te indicaba en mi primera respuesta, además de declarar la variable con el tipo adecuado, usa CCur(), porque el problema es que te interpreta la coma decimal como un valor para insertar en otro campo:

 CurrentDb. Execute "INSERT INTO tb_liquidacion(n?delegacionL, empleadoL, a?oL, fechaActualL, tipoIngresoL, importeLiquidacionL)" _
    & "VALUES (" & Me.cboDelegacion & ",'" & Me.cboEmpleado & "'," & Me.txtA?o & ",'" & Me.txtFecha & "','" & Me.tipoIngresoIN & "'," & CCur(vResultado) & " )", dbFailOnError

Si con CCur() ves que te sigue sin funcionar, usa CStr():

 CurrentDb. Execute "INSERT INTO tb_liquidacion(n?delegacionL, empleadoL, a?oL, fechaActualL, tipoIngresoL, importeLiquidacionL)" _
    & "VALUES (" & Me.cboDelegacion & ",'" & Me.cboEmpleado & "'," & Me.txtA?o & ",'" & Me.txtFecha & "','" & Me.tipoIngresoIN & "'," & CStr(vResultado) & " )", dbFailOnError

O también puedes usar Replace(), para cambiar las comas por puntos:

 CurrentDb. Execute "INSERT INTO tb_liquidacion(n?delegacionL, empleadoL, a?oL, fechaActualL, tipoIngresoL, importeLiquidacionL)" _
    & "VALUES (" & Me.cboDelegacion & ",'" & Me.cboEmpleado & "'," & Me.txtA?o & ",'" & Me.txtFecha & "','" & Me.tipoIngresoIN & "'," & Replace(vResultado,",",".") & " )", dbFailOnError

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas