Problema con código de anexar y eliminar en formulario

Hola de nuevo neckkito,
Estoy acabando una base de datos y me surgen los últimos problemas. Te cuento:
Tengo un formulario en el cual hay otro subformulario vinculado. Bien, dicho subformulario tiene unos datos que en función del registro principal del formulario, en mi caso CODIGO_OFICINA. He generado un botón de eliminación de anexado y eliminar registros del subformulario. Cuando quiero eliminar dicho registro del subformulario quiero que tenga en cuenta el campo CODIGO_OFICINA (formulario principal) y el campo NUMERO DE OFICINA, ya que para cada CODIGO_OFICINA pueden haber varior NUMERO DE OFICINA. Por eso quiero que tenga en cuenta estos dos registros. El código que he generado y no me funciona es:
Private Sub Comando16_Click()
On Error GoTo Err_Comando16_Click
If MsgBox("¿Estas seguro de eliminar este registro?", vbQuestion + vbYesNo + vbDefaultButton2, "AVISO") = vbNo Then Exit Sub
CurrentDb.Execute "Insert Into [OFICINA ELIMINADA] Select * from [OFICINA] where [CODIGO_OFICINA]=" & Form![NUMERO DE OFICINA].Value & ""
CurrentDb.Execute "Delete * from OFICINA where [CODIGO_OFICINA]=" & Form![NUMERO DE OFICINA].Value & ""
Me.Requery
Exit_Comando16_Click:
Exit Sub
Err_Comando16_Click:
MsgBox Err.Description
Resume Exit_Comando16_Click
End Sub
Y no encuentro el error del código.
Gracias

1 Respuesta

Respuesta
1
No he analizado a fondo tu código, pero a simple vista lo que veo son varios errores de sintaxis y algo que no acabo de entender:
- El primer error es el <Form!> Que utilizas para identificar al formulario. Eso, en todas las SQL, debería ir "en plural". Es decir, Forms![...
- Por lógica supongo que tanto número de oficina como código son valores numéricos. Luego tus SQL no están bien construidas. Deberían finalizar con:
where [CODIGO_OFICINA]=" & Forms![NUMERO DE OFICINA].Value
- Finalmente, lo que no acabo de entender (que no digo que esté mal), es que el filtro WHERE haga una comparación entre el código de oficina y el número de oficina.
Si me dices que para código de oficina puede haber varios números de oficina el WHERE, para mí, no tiene sentido. Por ejemplo:
Código Oficina: 123
Número de oficina: 1
Número de oficina: 2
Número de oficina: 3
El WHERE, en este caso, no te filtraría nada, porque no tienes ningún número de oficina 123. En definitiva, sólo te anexaría y eliminaría un registro si el código de oficina es igual al número de oficina. En principio, y sin conocer la estructura de tu información, eso no parece tener mucho sentido (visto desde fuera, claro).
Bueno. Ya me dirás.
Hola neckkito,
El asunto esta que en el formulario principal que visualizo hay solo un único codigo_oficina. En cambio, para el subformulario, para este codigo_oficina tenemos varios registros, que se identifican con el campo numero de oficina. Lo que quiero decirle es que me borre para este codigo_oficina, el campo numero de oficina que estoy visualizando en el subformulario.
No se si me he explicado bien... Bueno anexar y borrar, tal y como he puesto en el código.
He probado tus cambios pero no hay manera...
Gracias neckkito.
Saludos.
Hola neckkito,
Te pongo un ejemplo.
- Informe principal:
CODIGO_OFICINA 15
En el subinforme para este CODIGO_OFICINA tendré:
Unas flechas en las que me dirán los registros que hay para este CODIGO_OFICINA, y en total podre tener, por ejemplo 4 y los visualizare correlativos con el campo NUMERO DE OFICINA. Por tanto, lo que quiero es poder borrar solo algún registro del subformulario de estos 4, y he pensado en utilizar el campo NUMERO DE OFICINA, que es un campo numérico y correlativo.
No se si me he explicado....
Saludos neckkito
Un par de preguntas:
1. El subformulario, ¿lo tienes en vista Hoja de Datos o en vista formularios continuos?
2. Aunque tu respuesta a la pregunta anterior ya me permitiría verlo, para asegurar te hago esta segunda: el Comando16 (el botón que utilizas), ¿dónde lo tienes, en el formulario o en el subformulario?
Ya me dirás.
Hola neckkito,
El formulario lo tengo en vista de un único formulario, mientras que los botones de las funciones y en este caso, el comando 16, se encuentra en el subformulario.
A ver que puedes hacer...
Gracias por todo.
Saludos,
La información que das, en general, resulta un poco confusa. Por eso voy a hacer la suposición siguiente:
- En tu tabla OFICINA tienes, entre otros, dos campos, que son [CODIGO_OFICINA] y [NUMERO DE OFICINA]
Tras eso te escribo cómo podría ser el código (aunque sin ver tu BD no sé si saldrá algún problema) asociado a ese botón:
...
Private Sub Comando16_Click()
On Error GoTo Err_Comando16_Click
If MsgBox("¿Estas seguro de eliminar este registro?", vbQuestion + vbYesNo + vbDefaultButton2, "AVISO") = vbNo Then Exit Sub
CurrentDb.Execute "Insert Into [OFICINA ELIMINADA] Select * from [OFICINA] where ([CODIGO_OFICINA]=" & Forms![NombreFormulario].[CODIGO_OFICINA].Value & " AND [NUMERO DE OFICINA]=" & Me.[NUMERO DE OFICINA].Value & ")"
CurrentDb.Execute "Delete * from OFICINA where ([CODIGO_OFICINA]=" & Forms![NombreFormulario].[CODIGO_OFICINA].Value & " AND [NUMERO DE OFICINA]=" & Me.[NUMERO DE OFICINA].Value & ")"
Me.Requery
Exit_Comando16_Click:
Exit Sub
Err_Comando16_Click:
MsgBox Err.Description
Resume Exit_Comando16_Click
End Sub
...
Donde pone NombreFormulario tú debes poner el nombre de tu formulario (NO subformulario) de trabajo.
Te aconsejo que hagas una prueba en una copia de tu BD, no sea que elimines algo que no debas ;)
Ya me dirás.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas