Insert into solo de campos completados

Tengo un codigo que recorre un subformulario completo para llevarlo a una tabla a traves de un insert into. Ahora lo que necesito es que solo me inserte en la tabla aquellos que cumplan con un criterio por (por ejemplo si no completaron una calificación ese registro no se guarda en la tabla).

Otra cosa que necesito es que posterior a insertar la información en la tabla me limpie algunos campos (previamente seleccionado):

Ver código utilizado:

Private Sub Comando9_Click()
DoCmd.SetWarnings False
DoCmd.GoToRecord , , acFirst
Dim i As Integer
For i = 1 To Form.Recordset.RecordCount
DoCmd. RunSQL "insert into aux(curso, alumno, no, calificacion, conducta, periodo, materia, profesor, evaluacion)values " _
& "('" & Me.Parent.cbo_curso & "','" & Me.Alumno & "'," & Me.No & ",'" & Me.Calificacion & "', '" & Me.Conducta & "','" & Me.Parent.cbo_periodo & "','" & Me.Parent.cbo_materia & "','" & Me.Parent.cboprofesor & "','" & Me.Parent.cbo_evaluacion & "')"
DoCmd.GoToRecord , , acNext
Next
DoCmd.GoToRecord , , acFirst
End Sub

1 respuesta

Respuesta
2

Siempre puedes validar un dato (o datos) antes de ejecutar la SQL, por ejemplo:

...
For i = 1 To Form.Recordset.RecordCount
If Not IsNull(Me.Calificacion) Then
DoCmd. RunSQL "insert into aux(curso, alumno, no, calificacion, conducta, periodo, materia, profesor, evaluacion)values " _
& "('" & Me.Parent.cbo_curso & "','" & Me.Alumno & "'," & Me.No & ",'" & Me.Calificacion & "', '" & Me.Conducta & "','" & Me.Parent.cbo_periodo & "','" & Me.Parent.cbo_materia & "','" & Me.Parent.cboprofesor & "','" & Me.Parent.cbo_evaluacion & "')"
End If
DoCmd.GoToRecord , , acNext
Next
...

Un saludo.

http://nksvaccessolutions.com/academy/ 

¡Gracias!  hermano y respecto a mi segunda pregunta.:

Otra cosa que necesito es que posterior a insertar la información en la tabla me limpie algunos campos (previamente seleccionado)

Para "limpiar" un control, basta con igualarlo a una cadena vacía, o a un nulo, si el tipo de campo lo admite:

Me.Alumno=""

Me.Curso=Null

Me.Curso=vbNullString

Pero ten en cuenta que al hacerlo en un subformulario dependiente (de una tabla), el cuadro que limpies te quedará sin valor en la tabla, y no sé si es lo que quieres...

¡Gracias! . De hecho lo que quiero limpiar no son los controles si no los campos que el usuario completo. En este caso calificación y conducta. Que están en un subformulario

Gracias hermano quedo bien. Sin embargo aun continua insertando en la tabla valores que tienen la calificación en blanco. Puedes ayudarme por favor

DoCmd.SetWarnings False
DoCmd.GoToRecord , , acFirst
Dim i As Integer
For i = 1 To Form.Recordset.RecordCount
If Not IsNull(Me.Calificacion) Then
DoCmd.RunSQL "insert into aux(curso,alumno,no,calificacion,conducta,periodo,materia,profesor,evaluacion,tipo,fecham)values " _
& "('" & Me.Parent.cbo_curso & "','" & Me.Alumno & "'," & Me.No & ",'" & Me.Calificacion & "', '" & Me.Conducta & "','" & Me.Parent!cbo_periodo & "','" & Me.Parent!cbo_materia & "','" & Me.Parent!cboprofesor & "','" & Me.Parent!cbo_evaluacion & "','" & Me.Parent!cboteval & "','" & Date & "')"
DoCmd.GoToRecord , , acNext
End If
Next
DoCmd.GoToRecord , , acFirst

Una cosa es que el campo este vacío ( nulo) o en blanco (cadena, por ej cuando le borras el valor ).

Cambia el: not isnull(me. Calificacion)

Por:

Nz(me. Calificacion, "")<>""

¡Gracias!  Lo reviso y te dejo saber

Lo revise y funciona bien. Siempre que el registro a insertar sea el primero sin embargo necesito que el busque cada registro e inserte lo que tienen información y deseche los que no. copio otra vez el código

DoCmd.SetWarnings False
DoCmd.GoToRecord , , acFirst
Dim i As Integer
For i = 1 To Form.Recordset.RecordCount
If Nz(Me.Calificacion, "") <> "" Then
DoCmd.RunSQL "insert into aux(curso,alumno,no,calificacion,conducta,periodo,materia,profesor,evaluacion,tipo,fecham)values " _
& "('" & Me.Parent.cbo_curso & "','" & Me.Alumno & "'," & Me.No & ",'" & Me.Calificacion & "', '" & Me.Conducta & "','" & Me.Parent!cbo_periodo & "','" & Me.Parent!cbo_materia & "','" & Me.Parent!cboprofesor & "','" & Me.Parent!cbo_evaluacion & "','" & Me.Parent!cboteval & "','" & Date & "')"
DoCmd.GoToRecord , , acNext
End If
Next
DoCmd.GoToRecord , , acFirst

Normal que no te funcione, porque no copiaste bien mi propuesta: el End If tiene que ir antes del DoCmd. GotoRecord,, acNext y no después. Fíjate en mi primera respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas