Access - ¡¡¡AYUDA!!! con borrado de registros

 
Vista:

¡¡¡AYUDA!!! con borrado de registros

Publicado por Victor Manuel (101 intervenciones) el 20/04/2007 18:57:25
Este es el codigo que tengo pusto en mi boton de borrar:

Private Sub CmdBorrar_Click()
On Error Resume Next
Dim mens As Integer
If OAño.Value = True Then
mens = MsgBox("¿ Confirma la eliminación de este Registro ?", vbQuestion + vbYesNo + vbDefaultButton2, "Eliminar Registro")
If mens = vbYes Then
Set rst = New ADODB.Recordset
rst.Open "SELECT * From TablePrincipal Where Numero ='" & NumeroReporte & "'", cnn, adOpenDynamic, adLockOptimistic
If Not rst.EOF Then
rst.Delete
rst.Update
rst.Close: Set rst = Nothing
LimpiaCampos
End If
End If
If mens = vbNo Then
NumeroReporte.SetFocus
End If
Else
If OFecha.Value = True Then
mens = MsgBox("¿ Confirma la eliminación de este Registro ?", vbQuestion + vbYesNo + vbDefaultButton2, "Eliminar Registro")
If mens = vbYes Then
Set rst = New ADODB.Recordset
rst.Open "SELECT * From TablePrincipal Where Numero ='" & NumeroReporte & "'", cnn, adOpenDynamic, adLockOptimistic
If Not rst.EOF Then
rst.Delete
rst.Update
rst.Close: Set rst = Nothing
LimpiaCampos
End If
Set rst1 = New ADODB.Recordset
rst1.Open "SELECT * From TablePrincipalBackup Where Numero ='" & NumeroReporte & "'", cnn, adOpenDynamic, adLockOptimistic
If Not rst1.EOF Then
rst1.Delete
rst1.Update
rst1.Close: Set rst1 = Nothing
End If
If mens = vbNo Then
NumeroReporte.SetFocus
End If
End If
End If
End If
Err.Clear
End Sub

lo que tengo en mi base de datos son dos tablas las cuales son identicas, lo que pretendo al tener dos tablas es que una es como un respaldo de la otra, lo que quiero es que si elimino un registro en la primera tabla el mismo registro se elimine en la segunda, uso un codigo parecido para guardar los datos y si me los guarda bien, aqui solamente me elimina el registro de la primera tabla y no de la segunda.

¿QUE ES LO QUE HAGO MAL?, ALGUIEN QUE PUEDA DECIRME EN QUE ESTOY MAL, POR FAVOR, AYUDA, SALUDOS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¡¡¡AYUDA!!! con borrado de registros

Publicado por Enrique (1299 intervenciones) el 20/04/2007 20:30:33
Hola Victor:
Hay casos en que se requiere usar ADO o DAO, como por ejemplo para cargar o grabar registros en Formularios con campos "Independientes" y otros casos más complejos como traspasar muchos registros de Tabla a Tabla, etc, etc. pero hay otros, como este tuyo de ahora, en que solo se necesita elimitar un único registro de dos Tablas y para esto no es necesario; es como matar una mosca con un cañón, seguramente la matarás pero...... ¿ a que coste de recursos ?.

Con dos simples consultas de eliminación por código lo resuelves:

Private Sub CmdBorrar_Click()
Dim BorraTb1 As String, BorraTbl2 As String

'BORRA REGISTRO DE LA PRIMERA TABLA
BorraTbl1 = "Delete * From TablePrincipal Where Numero='" & NumeroReporte & "'"
CurrentDb.Execute BorraTbl1

'BORRA REGISTRO DE LA SEGUNDA TABLA
BorraTbl2 = "Delete * From TablePrincipalBackup Where Numero='" & NumeroReporte & "'"
CurrentDb.Execute BorraTbl2
End Sub

A cada una de estas consultas de eliminación le puedes poner la parte que te pide confirmación de eliminación con los Avisos de MsgBox, tal como lo tienes ya hecho. Esta es mi opinión y tu ya sabes lo que a mi me gusta programar con ADO, pero sinceramente no creo que necesites usarlo en este caso.

Un saludo
Enrique
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

MUCHISIMAS GRACIAS

Publicado por Victor Manuel (101 intervenciones) el 20/04/2007 20:48:39
Este codigo esta bien y muchisimas gracias, pero ya lo habia soluionado exactamente con un DAO, este es el codigo.

mens = MsgBox("¿ Confirma la eliminación de este Registro ?", vbQuestion + vbYesNo + vbDefaultButton2, "Eliminar Registro")
If mens = vbYes Then
Dim base As DAO.Database
Dim tabla1 As DAO.Recordset
Dim tabla2 As DAO.Recordset
Dim Borrar As String

Set base = CurrentDb
Set tabla1 = base.OpenRecordset("TablePrincipal", dbOpenDynaset)
Set tabla2 = base.OpenRecordset("TablePrincipalBackup", dbOpenDynaset)

Borrar = Me.NumeroReporte.Value
tabla1.FindFirst ("Numero= '" & Borrar & "'")
tabla1.Delete
tabla1.Close
tabla2.FindFirst ("Numero= '" & Borrar & "'")
tabla2.Delete
tabla2.Close
base.Close
LimpiaCampos
If mens = vbNo Then
NumeroReporte.SetFocus
End If

Pero bueno el tuyo es muchisimo mas corto lo empleare ya que me ahorro muchas lineas de texto, Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

OYE OTRA PREGUNTA

Publicado por Victor Manuel (101 intervenciones) el 20/04/2007 21:05:00
Bueno lo de borrar el mismo registro en las dos tablas ya lo tengo resuelto, pero te explico cual es la voluntad de mi sistema bueno mas bien mi voluntad.

Tengo las dos tablas, y el formulario de altas de registros, cuando estoy dando de alta un registro y llego a la fecha o año de inicio, tengo dos opciones una que se llama fecha y otra Año.

Si escojo fecha me permite guardar una fecha completa con formato dd/mm/yyyy que tomo de un monthview, ahora si le doy guardar el registro y tengo la opcion fecha activada este registro se me guarda en las dos tablas.

Ahora si le doy en la opcion Año en vez de poder poner fecha completa por medio del monthview en el combobox me despliega una lista con valores que van desde el 2000 hasta el 2100 esto para nada mas capturar el año solamente y al darle guardar si Año esta activado solamente me lo guarda en la primera tabla y no en la segunda.

El proposito de ello es para no tener problemas a la hora de hacer los informes ya que filtro un informe en un rango de fechas, y la primera tabla los campos fechao año inicial y fechao año final son de tipo texto ya que si fueran tipo date/time no me permitiria solamente ingresar el año y en la otra tabla si son date/time ya que solo guardo los registros de fecha completa.

Y bueno tu sabes que al hacer filtro entre rangos de fecha pues los campos tienen que ser de tipo date/time, por ello baso ese informe con la tabla 2, ya que si lo basaria con la tabla1 no me permitiria hacer el informe, o al menos eso yo creo que no seria posible.

AHORA EL PROBLEMA ES ESTE:

Cuando yo guardo un registro con la opcion Fecha activada se guarda en las dos tablas y cuando lo guardo con Año activado se guarda en la primera, el problema es que si yo quiero modificar un registro de la segunda tabla y le modifico la Fecha que en vez de fecha completa se cambie a Año y solamente al Año, al darle guardar se va a guardar en la tabla uno y en la tabla 2 se quedara el mismo pero con fecha completa.

Lo que yo quiero hacer es que si yo le modifico la fecha a Año que de la tabla 2 se me borre ya que esa tabla solamente es para guardar registros con fecha completa y no con Año solamente, como le podria hacer?

ME IMAGINO QUE PUEDO USAR AL HACER CLICK EN GUARDAR Y PONER UNA CONDICION POR AY PARA QUE SI LO MODIFICO SE ME BORRE DE LA TABLA 2 Y SE ME GUARDE A LA TABLA 1.

ESPERO HABER SIDO CLARO Y DISCULPA EL PALABRERIO TENIA QUE EXPLICAR CUAL ES LA SITUACION.

Saludos
Victor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:OYE OTRA PREGUNTA

Publicado por Enrique (1299 intervenciones) el 20/04/2007 22:42:04
Victor, ¿ has probado a extraer el Año de las fechas completas con la Función Format, en vez de seleccionarlo de un combo ?

No entiendo para qué necesitas dos Tablas, una con la fechas completas y otra con los Años, cuando mediante una consulta y un par de campos calculados puedes obtener los Años.

Me parece que no termino de entender lo que realmente necesitas.

Un saludo
Enrique
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:OYE OTRA PREGUNTA

Publicado por Victor (101 intervenciones) el 20/04/2007 23:52:35
La funcion Format no me sirve ya trate de probarla para loq ue yo quiero que me haga el programa y no funciona, y bueno mis conociminentos no diron para mas.

Lo que pasa es que el sistema es para diversas tareas, en la compañia aveces se hacen trabajos y no se sabe la fecha exacta en que se hizo el trabajo pero si el año solamente o la fecha de finalizacion, me parecio lo mas cuerdo, ya que si yo quiero guardar solamente el año por ejemplo 2007 no me dejaba puesto que era tipo date/time pero bueno ese no es el punto.

Lo que yo quiero hacer es poder eliminar los registros que se modifiquen las fechas y darlos de alta en la tabla principal.

Pero bueno si tienes alguna idea es bienvenida sino haber que se me ocurre, aunque tratare de buscar en otras fuentes o simplemente ingeniarmelas.

Muchisimas gracias Enrique por tu tiempo, Saludos

Victor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:OYE OTRA PREGUNTA

Publicado por Pepe (766 intervenciones) el 21/04/2007 11:33:34
Hola Victor

Si no te entiendo mal, en la tabla 1 guardas todos los registros y en la tabla 2 unicamente los registros que los campos de fecha estan cumplimentados.

Lo que quieres es que si un registro de la tabla 1 que tiene cumplimentados los campos de fecha, lo modificas quitando la fecha y poniendo el año, el registro equivalente que esta en la tabla 2 se elimine ¿es así?.

Para eso una posible solución podría ser la siguiente:

A la tabla 1, si no tiene un campo autonumérico, añadeselo y llamale por ejemplo [numero de registro].

A la tabla 2 añadele un vampo de tipo numérico que se llame [numero de registro] o como se llame en la tabla 1 si ya tenías el autonumérico.

Este campo de la tabla 2, tiene que tener el valor del campo de la tabla 1 que le corresponda.

Luego prepara una consulta de eliminación sobre la tabla 2, y en criterios del [numero de registro] que sea el del [numero de registro] de la tabla 1 que has modificado quitandole la fecha.

En el evento que utilizas para guardar al modificar el registro, que ejecute la consulta, con la condición de que el campo de fecha sea nulo.

Con esto siempre que modifiques un registro de la tabla, al guardar si el campo fecha esta nulo, ejecutará la consulta y te eliminará de la tabla 2 el registro que coincide con el nº de registro de la tabla 1.

Espero haber comprendido tu pregunta y que te sirva la solución.

Pepe
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias

Publicado por Victor Manuel (101 intervenciones) el 21/04/2007 16:27:20
Seria una buena solucion, aunque mi form tiene un campo llamado Numero de reporte que es el que identifica a los registros.

Si entendiste lo que trato de decir, empleare ese metodo, haber si me resulta algo positivo, Muchas Gracias.

Saludos

Victor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gracias

Publicado por Victor Manuel (101 intervenciones) el 21/04/2007 16:36:56
COMO DECIRLE A MI FORM QUE EL VALOR DE FECHA ES NULO SI LO CAMBIO POR UN VALOR DE NUMEROS, OSEA EN EL MISMO CAMPO CAMBIO DE FORMATO FECHA A FORMATO AÑO.

SE ME OCURRE DECIRLE AL FORM QUE SI EL VALOR DEL CAMPO ESE ES DIFERENTE DEL FORMATO FECHA DD/MM/YYYY QUE ME LO BORRE DE LA TABLA 2 Y ME LO GRABE EN LA TABLA UNO SOLAMENTE.

PODRIA SER UNA SOLUCION, DE TODOS MODOS AY QUE PROBAR, ALGUNA OTRA IDEA SERIA INTERESANTE.

SALUDOS

Victor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

YA ESTA SOLUCIONADO

Publicado por Victor Manuel (101 intervenciones) el 21/04/2007 17:06:19
Efectivamente lo solucione con una consulta de eliminacion de la tabla secundaria utilizando este codigo con la condicion al cambiar del campo donde se captura la fecha o año:

borratbl2 = "Delete * From TablePrincipalBackup Where Numero='" & NumeroReporte & "'"
CurrentDb.Execute borratbl2

A la mejor a alguien le sirve.

NOTA debes declarar borratbl2 como string.

Saludos

Victor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:YA ESTA SOLUCIONADO

Publicado por Enrique (1299 intervenciones) el 21/04/2007 18:15:56
Hola Victor:
Dices que ya está solucionado y el sistema que empleas, si mi vista no me engaña, es exactamente igual al que yo te indiqué en mi primer mensaje, pero después se han generado siete mensajes más en este hilo, cuando la solución la tenías desde el principio. Además ahora pones una nota diciendo que la variable borratbl2 se debe declarar como String, como si fuera una novedad, cuando eso tambien está claramente indicado en mi primera respuesta.

Parece que no hablamos el mismo idioma pero me alegro mucho que lo hayas resuelto por tu cuenta.

Un saludo
Enrique
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Un comentario y Fin.

Publicado por Victor Manuel (101 intervenciones) el 21/04/2007 18:57:18
Olvide aclarar que la solucion era realmente la misma que me habias dado con anterioridad, solo que antes se tenia que guardar en dos tablas y ahora pues eliminar en la taba 2 y guardar en la tabla uno.

Enhorabuena y Gracias a las personas que me han apoyado en este tan camino que me llevo a terminar la aplicaion.

Y lo de la NOTA lo puese simplemente para algunos que se enuentren en la misma situacion pues lo sepan y bueno, lo habias dicho con anterioridad. Lo que pasa es que se me presento otro asunto y bueno crei que seria prudente volverlo a decir. Pero queda claro que el procedimiento es tuyo y solamente tuyo, solamente para aclarar y que no haya malos entendidos.

Gracias a Enrique y a Pepe me ayudaron mucho, Saludos.

Victor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Un comentario y Fin.

Publicado por PYSICO (2 intervenciones) el 27/09/2007 19:42:31
NO MANCHEN COMO HICIERON ESO YO QUIERO PASAR DE UNA TABLA A OTRA REGISTROS OSEA MOVERLOS COMO SI LOS DIERA DE BAJA PERO TENER A ESOS REGISTROS GUARDADOS EN OTRA TABLA COMO PUEDO HACERLO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA CON TABLAS

Publicado por PYSICO (2 intervenciones) el 27/09/2007 19:42:58
NO MANCHEN COMO HICIERON ESO YO QUIERO PASAR DE UNA TABLA A OTRA REGISTROS OSEA MOVERLOS COMO SI LOS DIERA DE BAJA PERO TENER A ESOS REGISTROS GUARDADOS EN OTRA TABLA COMO PUEDO HACERLO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar