Eliminar registro y que aparezca en otra tabla

Ando liado con una trabajito que me han encargado. El tema es que tengo una tabla (Tabla Socios) y quiero que mediante un formulario (Dar de baja) me aparezcan en otra tabla (Bajas) los socios que se vayan dando de baja, todo para tener un pequeño control de antiguos socios. He estado buscando por internet pero no he conseguido nada mas que errores de programación.

La tabla Bajas unicamente tiene 3 campos (Nombre, Apellidos y Fechadebaja). Por lo que me gustaría que mediante el Formulario creado a partir de Tabla Socios me inserte en la tabla Bajas los campos Nombre y Apellidos, puesto que Fechadebaja lo completaría yo manualmente.

Lo que estoy intentando ahora es mediante un botón, le he creado un evento que tiene estas lineas de código, pero me da error:

Private Sub Eliminar_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO Bajas (Nombre, Apellidos) SELECT TabladeSocios.Id, TabladeSocios.Nombre, TabladeSocios.Apellidos FROM TabladeSocios WHERE TabladeSocios.Id =" & [Forms]![TabladeSocios]![Id]
DoCmd.SetWarnings True
End Sub

Siento si no me he explicado bien, a ver si me podéis echar una manita.

1 respuesta

Respuesta
1

La sql para insertar datos está mal escrita, si tienes 2 campos para insertar (nombre y apellidos) ... ¿cómo seleccionas 3 valores (id, nombre y apellidos) para insertar?

Después... ¿por qué no meter la fecha de baja en el mismo formulario...?

Yo lo que haría sería crear un formulario independiente (no lo bases en ninguna tabla o consulta)

En este formulario inserto:

1.- Cuadro combinado:

Nombre: selSocio

Origen de la fila: Select Nombre, Apellidos from TabladeSocios

Columna dependiente: 1

Nº de columnas: 2

Al hacer clic ---> Procedimiento de evento ---> picas en el cuadrado de la derecha, el de los ... para abrir el generador de código y pones:

Me. Refresh (para actualizar el formulario)

form! TxtFecha. SetFocus (para mandar el foco al cuadro de texto txtFecha

2.- Cuadro de texto para introducir la fecha:

Nombre: txtFecha

3.- Un botón, en el código de este botón:

DOCmd.RunSql "Insert Into Bajas (Nombre, Apellidos, FechaBaja) Values ('" & Form!selSocio.Value & "', '" & form!selSocio.Coumn(1) & "', cDate('" & form!txtFecha & "'))"

Como en el cuadro combinado hemos puesto columna dependiente=1 y en el origen de la fila la 1ª columna seleccionada es el nombre ---> este será el valor del cuadro combinado, el apellido será la 2ª columna, si pongo column(1) es porque, internamente, access empieza a contar desde cero.

La fecha, como es el valor del cuadro de texto txtFecha, lo tenemos que pasar a tipo fecha, esto lo hacemos con la función cDate.

Primero muchas gracias por responder.

Ahora mismo estoy haciendo las cosas que me dijiste pero lo único que consigo es un error del tipo "438". Entiendo que en el cuadro combinado me da la opción de elegir los socios que tenga dentro de la tabla de TabladeSocios, pero no me da esa opción y al dar click sobre el botón me provoca dicho error. Entiendo que a la hora de hacer el cuadro combinado lo haga sin el asistente no?

Muchas Gracias

He seguido trabajando y he conseguido que inserte datos en la tabla Bajas, pero al nombre le da un valor numérico y al apellidos le asocia el nombre del usuario. Aparte de que me gustaría también si fuera posible que eliminase dicho registro de la TabladeSocios puesto que una vez realizada una baja se tienen que reordenar el numero de socios.

Muchas Gracias

Un cuadro combinado funciona de la siguiente manera:

En el origen de la fila, en el Select seleccionas los campos de una tabla en un orden determinado, que serán las columnas del cuadro combinado, por ejemplo, si seleccionas:

Select id, nombre, apellido

La primera columna será el id, la segunda el nombre y la tercera el apellido.

Por otro lado está el valor del cuadro combinado, este valor lo da la "columna dependiente" de forma que si pones: columna dependiente: 1 el valor del cuadro combinado será, en nuestro ejemplo, el id. Si pones columna dependiente: 2 el valor será el del nombre... Cuando ponemos form! SelSocio.Value estamos refiriéndonos a este valor.

También se puede referir el valor de las distintas columnas de la forma:

form! SelSocio. Column(nº del columna) empezando el nº de columna por el cero, de forma que si ponemos column(0) nos estaríamos refiriendo al Id column(1) al nombre etc...

Al valor de la columna dependiente te puedes referir de las dos formas:

form!selSocio.Value

form! SelSocio. Column(nº de columna)

Para eliminar el registro tendrás que hacer un delete filtrando por el valor del cuadro combinado (conviene que sea el Id para que sea único)

doCmd.Runsql "delete * from TabladeSocios where id='" & form!selsocio.value & "'"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas