Error en vba access pocos parámetros

Tengo el siguiente código para anexar datos a un tabla y me arroja un error de pocos parámetros, se esperaban 3, llevo casi 2 días tratando de resolverlo y no lo he logrado, por favor ayuda

Option Compare Database
Dim str, strForm As String

Private Sub AceptaObs_Click()
Set dbs = CurrentDb
str = "INSERT INTO ObservacionesItems (IdPedidoParte, IdObservacion, FechaEstimada)"
str = str & " SELECT InsumosReservasParteSub.IdPedidoParte, Forms!ObservacionesReservas.ObservacionSel, Forms!ObservacionesReservas.FechaSel"
str = str & " FROM InsumosReservasParteSub"
str = str & " WHERE (((InsumosReservasParteSub.Saldo)>0) AND ((InsumosReservasParteSub.Parte)=Forms!ReservasInsumosParte.[# Parte]))"
dbs.Execute (str)
End Sub

1 respuesta

Respuesta
2

La SQL que usas no tiene sentido en esta parte:

str = str & " SELECT InsumosReservasParteSub.IdPedidoParte, Forms!ObservacionesReservas.ObservacionSel, Forms!ObservacionesReservas.FechaSel"

Lo que te marco debería ser InsumosReservasParteSub, que es el nombre de la tabla.

Por tanto tu código debiera quedarte así:

Private Sub AceptaObs_Click()
Set dbs = CurrentDb
str = "INSERT INTO ObservacionesItems (IdPedidoParte, IdObservacion, FechaEstimada)"
str = str & " SELECT InsumosReservasParteSub.IdPedidoParte, InsumosReservasParteSub.ObservacionSel, InsumosReservasParteSub.FechaSel"
str = str & " FROM InsumosReservasParteSub"
str = str & " WHERE (((InsumosReservasParteSub.Saldo)>0) AND ((InsumosReservasParteSub.Parte)=Forms!ReservasInsumosParte.[# Parte]))"
dbs.Execute (str)
End Sub

Buenas noches, lo que pasa es que ObservacionSel viene de un cuadro combinado que se encuentra en el formulario activo ObservacionesReservas y FechaSel viene de un cuadro de texto de este mismo formulario, no lo podría cambiar a insumosReservasParteSub ya que estos valores no se encuentran allí.

Se puede hacer o estoy haciendo algo imposible

En ese caso, prueba este código:

Private Sub AceptaObs_Click()
Set dbs = CurrentDb
str = "INSERT INTO ObservacionesItems (IdPedidoParte, IdObservacion, FechaEstimada)"
str = str & " SELECT InsumosReservasParteSub.IdPedidoParte, '" 
str = str & Forms!ObservacionesReservas.ObservacionSel & "' AS Exp1, #"
str = str & Forms!ObservacionesReservas.FechaSel & "# AS Exp2"
str = str & " FROM InsumosReservasParteSub"
str = str & " WHERE (((InsumosReservasParteSub.Saldo)>0) AND ((InsumosReservasParteSub.Parte)=Forms!ReservasInsumosParte.[# Parte]))"
dbs.Execute (str)
End Sub

He supuesto que ObservacionSel es de tipo texto (Si fuera numérico tendrás que quitar las comillas simples) y FechaSel de tipo fecha (si te diera error, prueba a pasarla en formato americano: Format(Forms!ObservacionesReservas.FechaSel,"mm/dd/yyyy") )

Buenos días, estoy probando pero ahora me salen los siguientes problemas

1- He usuado el formato americano pero me coloca la fecha 30-Dic-1899 y no la que dígito en el cuadro de texto

2- Cuando el cuadro de texto esta vacío (Null) me arroja error y puede suceder que alguno de estos 2 campos estén vacíos

3-Al estar los 2 campos con datos, falla, me arroja pocos parámetros se esperaba 1, he desactivo la condición where y funciona, al parecer la condición la tengo mal.

Efectivamente, el Where lo tienes mal, pero ahí ya no había llegado:

str = str & " WHERE (((InsumosReservasParteSub.Saldo)>0) AND ((InsumosReservasParteSub.Parte)=" & Forms!ReservasInsumosParte.[# Parte]))

Porque entiendo que es un campo numérico.

Lo del formato americano, ni idea, yo siempre lo uso en las SQL y sin problemas. Prueba quitandoselo o con este formato: "yyyy/mm/dd"

Para los campos vacíos, prueba de esta forma:

Nz(Forms! ObservacionesReservas. ObservacionSel) y Nz(Forms! ObservacionesReservas. FechaSel)

Sin ver la BD poco más te puedo decir.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas