Como agregar datos a una tabla desde un form de access usando script vba que no me funciona?

Adjunto este código que no me funciona porque me dice que hay un error en la sentencia INSERT INTO ... Agradecería desde ya si me pudieran ayudar a resolverlo

Private Sub Comando16_Click()
  Dim SENTSQL As String
  On Error GoTo ManipularError
  If FormEmpty Then
  SENTSQL = "INSERT INTO MI TABLA(Fecha,Usuario,Servicio,Proceso,Tipo_de_tareas,Tarea,Subtarea,Cantidad,Tiempo_real_por_actividad)" _
  & "VALUES(#" & "mm/dd/yyyy" & "# " _
  & " '" & Me.Usuario & "', '" & Me.Servicio & "','" & Me.Proceso & "','" & Me.tipo_tarea & "', '" & Me.Tarea & "','" & Me.Subtarea & "', " & "" & Me.cantidad_proc & ", " & Me.tiempos & " ) " _
  CurrentDb.Execute SENTSQL, dbFailOnError
  MsgBox "Registro Guardado", vbInformation, "Aviso"
  End If
  Exit Sub
ManipularError:
MsgBox Err.Description, vbCritical, "Aviso"
End Sub
Private Function FormEmpty() As Boolean
Dim Ctrl As Variant
On Error GoTo ManipularError
For Each Ctrl In Me.Controls
If IsNull(Ctrl) Then
 MsgBox "Faltan llenar campos" & vbCrLf & vbCrLf & "Verifique.", vbExclamation, "Aviso": Exit Function
 End If
 FormEmpty = True
 Next Ctrl
 Exit Function
ManipularError:
MsgBox Err.Description, vbCritical, "Aviso"
End Function
Private Sub Comando17_Click()
DoCmd.Close
End Sub
  

2 Respuestas

Respuesta
1

Lo siento, pero no le veo ningún sentido a la instrucción. Si el campo Fecha de la tabla donde vas a insertar es del tipo Fecha, no le puedes insertar un valor texto, que es lo que le indicas con

#" & "mm/dd/yyyy" & "# "

Además sobraría la última comilla. En todo caso, si fuera algo tipo

Cdate(format([fechaloquesea],"mm/dd/yyyy"))

Aún, aún.

Los campos fecha, aunque los veas como 23/03/2021, en realidad son números, por lo que no puedes ponerle un valor

mm/dd/yyyy que es lo que le indicas.

Por otro lado quieres insertar en un campo Cantidad algo que defines como

" & "" & Me.cantidad_proc & "

La verdad, no sé que significa la primera comilla, el & y la siguiente comilla.

Por otro lado, si los cuadros de texto se llaman igual que su origen del control, no necesitas tanto. Por ejemplo, tengo la tabla Tabla1

Y tengo el formulario donde a algunos controles les he puesto un nombre diferente

Cuando pulso el botón( aunque podría ser en cualquier otro evento)

Ya lo tienes insertado y el código no puede ser más simple

Private Sub Comando9_Click()
DoCmd.SetWarnings False
DoCmd. RunSQL "insert into tabla1(fecha, usuario, servicio, proceso, cantidad)values(fechainicio, usuario, ocupacion, otracosa, cuantos)"
End Sub

Le he dado sin querer a Enviar.

En el caso de la función FormEmpty, le dices que

For each control.....

Imagínate que se quedaran 8 controles en blanco. Te aparecería 8 veces el mensaje.

Respuesta
1

Pruebe con esto:

IF Empty=False Then

SENTSQL = "INSERT INTO MI TABLA(Fecha,Usuario,Servicio,Proceso,Tipo_de_tareas,Tarea,Subtarea,Cantidad,Tiempo_real_por_actividad)" _
& "VALUES(" & Format(Fecha, "\#mm\/dd\/yyyy\")" _
& "'" & Me.Usuario & "'" & "," & "'" & Me.Servicio & "'" & "," & "'" & Me.Proceso & "'" & "," & "'" & Me.tipo_tarea & "'" & "," & "'" & Me.Tarea & "'" & "," & "'" & Me.Subtarea & "'" & "," " & Me.cantidad_proc & "," & Me.tiempos & " ) "

Lo anterior es válido si los campos del formulario tienen diferente nombre a los de la tabla. En caso contrario no es necesario concatenar:

SENTSQL = "INSERT INTO MI TABLA(Fecha,Usuario,Servicio,Proceso,Tipo_de_tareas,Tarea,Subtarea,Cantidad,Tiempo_real_por_actividad) VALUES(Fecha,Usuario,Servicio,Proceso,tipo_tarea,Tarea,Subtarea,cantidad_proc,tiempos)"

La función Empty() debe quedar así:

Private Function FormEmpty() As Boolean
Dim Ctrl As Control
On Error GoTo ManipularError
For Each Ctrl In Me.Controls
If IsNull(Ctrl) Or Ctrl = "" Then
FormEmpty = True
End If
Next Ctrl

ManipularError_Exit:
Exit Function

ManipularError:
MsgBox Err.Description, vbCritical, "Aviso"
Resume ManipularError_Exit

End Function

En días pasados respondí sobre la validación de 120 campos y propuse una función que cambia de color los campos requeridos sin datos. Le complemetno la respuesta con esta función que se puede llamar desde cualquier formulario.

En los campos que se quieran validar del formulario mediante Propiedades, Otras, Información adicional se debe escribir algún texto, por ejemplo, validar. ¿Cómo se llama la función?

Antes de ejecutar un INSEERT INTO, UPDATE o antes que se ejecute un evento de botón o en el evento Antes de actualizar, se debe de llamar así:

LLamada desde un botón o en código antes del INSERT o UPDATE:

IF validar_campo then

  Msgbox "Faltan datos que son necesarios",vbInformation,"Error..."

  Exit Sub

End If

Llamada desde el evento Antes de actualizar (Solo formulario dependiente de datos)

IF validar_campo then

  Msgbox "Faltan datos que son necesarios",vbInformation,"Error..."

  Cancel=True

End If

Imagen de ejemplo:

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas