Consulta con recordset (no me sale)
Tengo un ligero problemilla con un formulario. He intentado que funcione pero mis conocimientos de SQL son limitados por no decir nulos. Os pongo en antecedentes:
Tengo una tabla de PERSONAL donde cada personal puede tener uno, dos o más cursos. Para ello he creado 3 campos independientes de donde obtengo la información de los cursos que han realizado y que luego me sirven para, o bien buscar en una consulta SQL o bien INSERTARLOS en la tabla de FORMACIONPERSONAL.
Lo que quería hacer es una consulta que me busque por el NOMBRECURSO y si ese trabajador ya ha realizado ese curso que me ponga un box donde me lo diga y no me permita duplicarlo o, por el contrario, si no ha realizado ese curso que me lo INSERTE.
He conseguido hacer que me inserte los curso, pero es que me los inserta todos, duplicados y no duplicados. Todo esto está en un botón que pone "Grabar" y que ejecute el código: Si estan en blanco alguno de los campos no deja seguir. Si están los 3 campos (Fecha curso, nhoras y nombrecurso) con datos, que ejecute la consulta y en la consulta que vaya leyendo cada registro que sale (supongo que es eso del recordset)y que compare si los cursos son iguales, hasta que llegue al final de los registros (eso hará que el curso no aparezca como duplicado) y si lo encuentra que me ponga otro box que me diga que ese trabajador ya hizo ese curso.
Y al darle al boton de GRABAR, me pone "Calculando ..." y se cuelga el access ...
Os pongo el código a ver si me podeis ayudar ... Gracias de antemano.
Private Sub Comando46_Click()
Dim strcurso As String
Dim cursoc, dni, dnic As String
Dim fecha As Date
Dim cadSQL As String
dni = Me.dni
dnic = Me.dni
cursoc = Me.cursoc
' Compruebo que los campos no están vacíos.
If IsNull(fechac) Or IsNull(horasc) Or IsNull(cursoc) Then
MsgBox "No se pueden dejar campos en blanco", vbCritical, "ATENCION"
Exit Sub
End If
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim SQL As String
Set db = CurrentDb
SQL = "SELECT nombrecurso FROM formacionpersonal WHERE dni ='" & dnic & "'"
Set rs = db.OpenRecordset(SQL)
Do While rs.EOF = False
rs.MoveFirst
If rs.Fields("nombrecurso") <> cursoc Then Exit Do
' Comparar el valor del registro actual con el valor de nombrecurso
If rs.Fields("nombrecurso") = cursoc Then
'En caso de que los valores coincidan se envía un mensaje de advertencia
MsgBox "No se puede duplicar la formación. Esa formación ya existe."
Exit Sub
End If
rs.MoveNext
Loop
'En caso de que la formación no coincida, inserta el curso en la tabla FORMACIONPERSONAL
cadSQL = "INSERT INTO formacionpersonal " & "(dni, fechacurso, nombrecurso, nhoras) " & "VALUES ('" & dnic & "','" & fechac & "', '" & cursoc & "', '" & horasc & "')"
CurrentDb.Execute cadSQL
' Pongo los valores en blanco
Me.cursoc = Null
Me.fechac = Null
Me.horasc = Null
Me.fechac.SetFocus
Forms!copiadepersonal.formacionp.Form.Requery
End Sub