Guardar muchos registros en access y no guardar campos vacíos

Tengo una base de datos en access

Lo que quiero es guardar 25 registros con sus características

Sin embargo si esta vació la clave o el nombre

Quisiera que no guarde el registro

No se si esta bien el código para guardar

Y quisiera saber como agregar la condición

Private Sub guarda_Click()
Dim rst As DAO.Recordset
Dim i As Byte
Set rst = CurrentDb.OpenRecordset("INSERT INTO LIBRETA(NOOFICIO, AÑOOF, CLAVE, FCONCURSO," _
    & "NOMBRE, PRE, CODIGO, OAFDE, OAFA")
If rst.RecordCount = 0 Then GoTo Salida
rst.MoveLast: rst.MoveFirst
If rst.RecordCount <= 25 Then
   i = 1
   Do Until rst.EOF
      Me.Controls("P1") = rst("NOOFICIO")
      Me.Controls("AÑOOF1") = rst("AÑOOF")
      Me.Controls("P" & i) = rst("CLAVE")
      Me.Controls("F" & i) = rst("FCONCURSO")
      Me.Controls("PN" & i) = rst("NOMBRE")
      Me.Controls("PR" & i) = rst("PRE")
      Me.Controls("C" & i) = rst("CODIGO")
      Me.Controls("D" & i) = rst("OAFDE")
      Me.Controls("H" & i) = rst("OAFA")
      rst.MoveNext
      i = i + 1
   Loop
Else
   For i = 1 To 25
      Me.Controls("P1") = rst("NOOFICIO")
      Me.Controls("AÑOOF1") = rst("AÑOOF")
      Me.Controls("P" & i) = rst("CLAVE")
      Me.Controls("F" & i) = rst("FCONCURSO")
      Me.Controls("PN" & i) = rst("NOMBRE")
      Me.Controls("PR" & i) = rst("PRE")
      Me.Controls("C" & i) = rst("CODIGO")
      Me.Controls("D" & i) = rst("OAFDE")
      Me.Controls("H" & i) = rst("OAFA")
      rst.MoveNext
   Next i
End If
Salida:
   rst.Close
   Set rst = Nothing
End Sub

1 respuesta

Respuesta
2

Obviamente no has probado a ejecutar ese código, porque si lo hubieses hecho, comprobarías que no está nada bien...

Así a bote pronto veo lso siguientes errores:

1º/ No puedes abrir un recordset sobre una SQL de tipo INSERT INTO

2º/ Si quieres usar el recordset rst para guardar los datos, primero has de editarlo (rst.Edit), darle valor al campo del recordset( rst("NOOFOCIO")=Me.Controls("P1")) y luego actualizarlo (rst.Update

3º/ ¿Realmente tienes una tabla con 177 campos? Porque eso lo que estás diciendo con Me.Controls("xxx" & i). Además, a P1 y AÑOOF1 le estás sobreescribiendo el valor en cada pasada del bucle, con lo que al final solo te cogerá el del registro 25...

Por otro lado, la condición que has de validar es muy sencilla: 

If IsNull(Clave) OR IsNulll(Nombre) Then

'No haces nada

Else

'Aquí el código para guardar

End If

Tendrás que poner dentro del IsNull el control de tu formulario o campo del recordset que tenga los valores para año y nombre.

Un saludo.


Muchas gracias por la ayuda

Es que ando algo perdida

Me intente guiar del código con el que me ayudo para mostrar datos guardados

Lo que quiero hacer es guardar los registros en la tabla

Todos tendrán el mismo numero de oficio y año

Son 25 claves con su nombre y datos como folio (f), numero correspondiente (p), código (c), etc

Los nombres de los campos son :

NoOFICIO (es el mismo no cambia)

AÑO ( es el mismo no cambia)

f1, p1, c1

f2, p2, c2

f3,p3, c3 

...

f25,p25,c25

Gracias por toda la ayuda

Sigo sin ver lo que intentas hacer...

Tu tabla destino (¿LIBRETA?) ¿Cuántos campos tiene?

Los datos a guardar ¿dónde los tienes? ¿En un formulario? ¿Ese formulario es independiente o está basado en una tabla? ¿En cuál?...

Lo que quiero hacer es:

Tengo un formulario donde pueden escribir de 1 a 25 claves (la clave es el identificador que le dan a los empleado), cada clave va a tener los datos del nombre de la persona que la ocupara, y las fechas en que la ocuparan, y el código.

Quedando así

Oficio 1

Año 2018

clave    nombre               i nicia                   fin                          motivo 

001         ana              12/01/2018      12/05/2018         clave vacante

002        laura            12/01/2018      12/05/2018              sustitucion

003        miguel         12/01/2018      12/05/2018              renuncia 

(En el ejemplo son solo 3 claves, pero puede haber casos donde sean los 25 claves)

Como puedo guardar los registros sin guardar los 25 si solo me están pidiendo 3 registros

Los campos en el formulario están nombrados de la siguiente forma;

NoOFICIO

AÑOF

P1       PN1         D1          H1      C1

P2       PN2         D2          H2      C2

P3       PN3         D3          H3      C3

.

.

.

P25       PN25         D25          H25      C25

Espero haberme explicado mejor

Muchas gracias por la ayuda

Mi tabla se llama libreta y esta compuesta por los campos clave, nombre, inicia, fin, motivo

Vale, ahora sí:

Private Sub guarda_Click()
Dim rst As DAO.Recordset
Dim i As Byte
Set rst = CurrentDb.OpenRecordset("LIBRETA")
For i = 1 to 25
   If Nz(Me.Controls("P" & i),"")<>"" AND Nz(Me.Controls("PN" & i),"")<>"" Then
      rst.AddNew
      rst("NOOFICIO") = Me.Controls("NoOFICIO") 
      rst("AÑOOF") = Me.Controls("AÑOF") 
      rst("CLAVE") = Me.Controls("P" & i)
      rst("FCONCURSO")= Me.Controls("F" & i)
      rst("NOMBRE") = Me.Controls("PN" & i)
      rst("PRE") = Me.Controls("PR" & i) 
      rst("CODIGO") = Me.Controls("C" & i) 
      rst("OAFDE") = Me.Controls("D" & i)
      rst("OAFA") = Me.Controls("H" & i)
      rst.Update
   End If
Next i
Salida:
   rst.Close
   Set rst = Nothing
End Sub

Comprueba que los nombres de los campos se correspondan con los de tu formulario.

¿Te sirvió el código o no?

¡Gracias! SI muchísimas gracias

¿sorry hasta hoy me estoy conectando una pregunta es muy diferente para actualizar los datos con este mismo método?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas