[RESUELTBoton y/o macro para borrar registros (parcialmente)

Discute sobre las herramientas de la base de datos
Responder
ugab
Mensajes: 141
Registrado: Mar May 17, 2011 9:46 pm

[RESUELTBoton y/o macro para borrar registros (parcialmente)

Mensaje por ugab »

Esto podría valer.

Buenas como estan

He realizado un "programita" a partir de una base de datos, la cual incrusto en base, el problema es que dicha base de datos (.DBF) tiene muchos registros y quisiera
de ser posible mediante un boton y/o macro borrar registros.
He encontrado esto en el foro

" Sub EliminarRegistros
Dim opcion As integer
opcion = MsgBox ("¿Realmente deseas borrar los registros ",36,"BORRAR REGISTROS")
If opcion = 6 Then
Dim oCon
Dim oStat
Dim sSQL
oCon = ThisDatabaseDocument.CurrentController.ActiveConnection
oStat = oCon.CreateStatement
'Ejecuto la consulta
sSQL = "DELETE FROM ""Tabla1"""'
oStat.ExecuteUpdate(sSQL)
Wait 1000 'Aqui modificas el tiempo de espera
MsgBox "Los registros han sido borrados"
End If
End Sub
"

Pero ni idea como eliminar solo los registros deseados.
Desde ya muchas gracias por cualquier ayuda
Última edición por ugab el Jue Abr 12, 2018 3:16 pm, editado 1 vez en total.
OpenOffice 4.1.5 en Windows 10 - Ubuntu
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Boton y/o macro para borrar registros (parcialmente)

Mensaje por mauricio »

Tienes que construir la instrucción SQL correcta de lo que quieres borrar, por ejemplo:

Código: Seleccionar todo

sSQL = "DELETE FROM ""Tabla1"" WHERE ID > 100"'
Cuidado con las comillas...

Para una mejor ayuda, puedes mostrar la estructura de tu tabla y que criterio quieres usar para borrar, para que te podamos ayudar con la instrucción SQL correcta.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
ugab
Mensajes: 141
Registrado: Mar May 17, 2011 9:46 pm

Re: Boton y/o macro para borrar registros (parcialmente)

Mensaje por ugab »

Mauricio, gracias por la pronta respuesta.
Adjunto la tabla, lo que deseo borrar depende de las fechas que le pasaría.
Por ejemplo: freserva >= "" .and. freserva <= ""
Adjuntos
PSOCIAL.rar
(944 Bytes) Descargado 266 veces
OpenOffice 4.1.5 en Windows 10 - Ubuntu
Longi
Mensajes: 808
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Boton y/o macro para borrar registros (parcialmente)

Mensaje por Longi »

Buenas!
Si lo que tienes es un CSV que lo conectas a Base, y el problema es sólo para empezar a trabajar (que no necesites más eliminaciones en otro momento) yo lo haría a lo bruto, es decir, ordenaría en el CSV por las fechas y elimino las filas que están por encima o por debajo del rango. Con ello ya tendrías para ir empezando.
Si no es así, la opción de Mauricio se puede adaptar, pero si no estás muy ducho, lo haces dos veces, una con los registros que superan la última fecha y otra con los registros que no llegan a la primera.

Un saludo!
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
ugab
Mensajes: 141
Registrado: Mar May 17, 2011 9:46 pm

Re: Boton y/o macro para borrar registros (parcialmente)

Mensaje por ugab »

Buenas Longi..

Lo que hago es lo siguente, abro la base de datos (tabla) en Calc la ordeno por el campo FRESERVA y manualmente elimino las fechas que no quiero.
Lo vuelvo a guardar como .DBF y listo.
Luego de hecho esto, abro Base con el "programita".
Necesariamente tengo que borrar datos porque de lo contrario la consulta que realizo en el "programita" no me trae lo que corresponde.
Les adjunto toda la Base así ven de lo que se trata.
La DBF original pesa 42mg y borrando los datos que no necesito la dejo en 486kb.
Resumiendo lo que quiero hacer es automatizar con un boton el delete de la DBF original entre dos fechas que le pasaría.
Espero que puedan entender lo que se busca..
Como siempre gracias por la ayuda ....
Adjuntos
ConsultaSocios2.7z
(41.27 KiB) Descargado 249 veces
OpenOffice 4.1.5 en Windows 10 - Ubuntu
Longi
Mensajes: 808
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Boton y/o macro para borrar registros (parcialmente)

Mensaje por Longi »

Buenas!
En su día te comenté que con los orígenes de datos distintos de HSQLDB me encuentro no del todo cómodo, ya que hay comportamientos que no son los mismos que con Base, digamos...normal.
Te pongo aquí una macro para eliminar FRESERVA antes de una fecha y después de otra. Te va a preguntar las fechas con un inputbox, y tienes que tener cuidado de meterlas en formato dd/mm/aa ó dd/mm/aaaaa ya que si no es posible que no lo reconozca como fecha, y por lo tanto no podrá calcular.
Estaría mejor con un diálogo en el que poder escoger entre fechas con un calendario desplegable, pero de momento mira a ver si te funciona como quieres.
Otra alternativa es la de hacer la selección de fechas con una consulta normal y corriente, y usarla como fuente de datos para formularios, informes, etc. De este modo tienes todos los datos, pero solo haces los cálculos sobre aquellos que quieres.
Ah! Solo lo he probado aplicando directamente la macro (sin poner botón), pero me dio problemas con la conexión con la base de datos, de tal manera que primero tenía que abrir la tabla, y después de cerrarla, entonces trabajaba bien. Es como si tuviese que saludar primero para luego poder trabajar. Seguramente esto no ocurra si pones un botón en un formulario, ya que el propio formulario habría hecho el saludo previamente.
Bueno, te dejo el código.

Código: Seleccionar todo

Sub Main

    Fecha1= InputBox("¿Cuando empieza el rango de fechas?")
    Inferior= RIGHT(CDate(Fecha1),4) &"-"& RIGHT(LEFT (CDate(Fecha1),5),2) &"-"& LEFT (CDate(Fecha1),2)

    Fecha2= InputBox("¿Cuando acaba el rango de fechas?")
    Superior= RIGHT(CDate(Fecha2),4) &"-"& RIGHT(LEFT (CDate(Fecha2),5),2) &"-"& LEFT (CDate(Fecha2),2)

	Conn = ThisDatabasedocument.CurrentController.ActiveConnection                    
    oStat=Conn.createStatement()                                                              
    '---------------------------------------------------------
    ' 2º Establecemos la consulta para eliminar

    sSQL = "DELETE FROM ""PSOCIAL"" WHERE""FRESERVA""<= {d '"& Inferior &"'}OR ""FRESERVA""> {d '"& Superior &"'} "
    oStat.ExecuteUpdate(sSQL) 

End Sub
Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
ugab
Mensajes: 141
Registrado: Mar May 17, 2011 9:46 pm

Re: Boton y/o macro para borrar registros (parcialmente)

Mensaje por ugab »

Buenos días, primero que nada gracias.
La he probado y me da error en

Conn = ThisDatabasedocument.CurrentController.ActiveConnection
oStat=Conn.createStatement() ** DICE VARIABLE DE OBJETO NO ENCONTRADO

Asigne la macro para que se inicialize cuando se abre el documento.
OpenOffice 4.1.5 en Windows 10 - Ubuntu
Longi
Mensajes: 808
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Boton y/o macro para borrar registros (parcialmente)

Mensaje por Longi »

Ah! Solo lo he probado aplicando directamente la macro (sin poner botón), pero me dio problemas con la conexión con la base de datos, de tal manera que primero tenía que abrir la tabla, y después de cerrarla, entonces trabajaba bien. Es como si tuviese que saludar primero para luego poder trabajar. Seguramente esto no ocurra si pones un botón en un formulario, ya que el propio formulario habría hecho el saludo previamente.
Ya te avisé que daba problemas, con respecto al comportamiento normal de base (se está manejando otra fuente de datos).
En vez de asignarlo al inicio de la aplicación, lo asigné a un botón en un nuevo formulario (formulario1), y este formulario es el que ya inicia 'conversaciones' con la base de datos (la conexión). A partir del momento de abrir el formulario, al clickar en el botón, actúa correctamente.
Como pirueta puedes asignar una macro al inicio del programa para que abra un formulario. En el evento 'al cargar' del propio formulario puedes asignarle la macro, y tendría finalmente el efecto deseado.

Un saludo! ;)
Adjuntos
Planilla.7z
(46.94 KiB) Descargado 259 veces
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
ugab
Mensajes: 141
Registrado: Mar May 17, 2011 9:46 pm

Re: Boton y/o macro para borrar registros (parcialmente)

Mensaje por ugab »

Hola buenos días.

Longi he probado lo que realizaste y le hice algunas modificaciones, ya que los datos que borraba eran solo la fecha de inicio y de final, los demás registros no.
Así que opte por pasar solamente una fecha (final) de esta manera sí funciona y borra todos los registros anteriores a dicha fecha.
De todas formas cuando haces la consulta no despliega nada, ningun dato.
Es como que no refresca la tabla (al realizar el delete).
Lo que se me ocurrió fue cerrar la Base y abrir la tabla con Calc, la volví a guardar y de esta manera efectivamente funciona.
Así que bueno ni idea de como "refrescar" la tabla.
Como siempre gracias.
Saludos !!
OpenOffice 4.1.5 en Windows 10 - Ubuntu
Longi
Mensajes: 808
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Boton y/o macro para borrar registros (parcialmente)

Mensaje por Longi »

Buenas!

La consulta borra los registros con fecha menor o igual a lo que colocas como fecha de inicio (consideraba que querías trabajar con un rango de fechas, por lo que las anteriores no interesaban) y los registros con fecha mayor que lo que colocas como fecha de finalización:
En el ejemplo que pusiste hay fechas desde el 02/02/18 hasta el 07/02/18.
Si en el primer inputbox marcas el 03/02/18 se borrarán las del día 2 y las del día 3.
Si en el segundo inputBox marcas el 05/02/18, se borrarán las de los días 6 y 7, pero el día 5 te ha de quedar.
El resultado final, con las fechas que te he descrito( 03/02/18 y 05/02/18) te quedarán solo fechas del día 5, ya que en el listado que aportaste no hay ninguna del día 4. Si estuviesen en el listado aportado, allí estarían. Habrás borrado del 3 para atrás, con el 3 incluido, y del 5 para adelante sin incluir el 5.
Yo lo comprobé abriendo la tabla después de apretar el botón del formulario, y tiene pinta de ir bien.
También pensé que como lo que querías era eliminar registros, una vez hecho no hay que hacer nada, la tabla está para trabajar como quieras, así que no puse ningún aviso tipo msgbox "La eliminación de registros se realizó con éxito", pero la tabla está con los registros entre una fecha y la otra.
Tienes la posibilidad de hacer un control de tabla en el formulario en el que te puse el botón, donde vengan los registros de la tabla, y al terminar la macro, le haces un refresco, para ver el efecto, pero no le veo mayor interés al asunto.
Mira bien los límites del rango de fechas (no es el rango de fechas con el que te viene la tabla del otro programa, sino el rango de fechas en el que te quieres mover tu), y puedes cambiar el '>' por '>=' y el '<=' por '<' según tu conveniencia.
Vamos!, que considero que el asunto debiera haber quedado resuelto, pero eso lo tienes que decidir tu.

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
ugab
Mensajes: 141
Registrado: Mar May 17, 2011 9:46 pm

Re: Boton y/o macro para borrar registros (parcialmente)

Mensaje por ugab »

Longi, muchas gracias por tu ayuda..
El tema es asi:
La tabla (psocial) viene de un programa realizado en FOX, esta tabla guarda los datos de las personas que alquilan locales en nuestro Parque.
De dicho programa se imprimen planillas para que el personal realice los controles correspondientes.
Mi idea fué la de crear en Base un "programita" a partir de esta tabla (psocial).
Este programa genera a partir de una consulta (el operador elige la fecha a imprimir) un informe y/o un formulario.
La consulta no funcionaba bien y llegue a la conclusión de que se debía a la cantidad de registros que tiene la tabla.
De ahí que probe con éxito borrar los registros que no necesitaba, esto lo hago mediante Calc, abriendo la tabla, ordenando por el campo freserva y borrar aquellas fechas que no quiero.
Se me ocurrió que esto mismo se podía hacer mediante una macro en el propio Base.
Con tu gran ayuda se logra borrar las fechas o la fecha que se le pasa.
Primariamente lo que se pretendía era que borrara todo entre tal FECHA y tal OTRA, quizas ahí yo no me exprese bien.
Pero eso lo solucione con solo pasarle la fecha limite.
Lo que sí no logro es que una vez que la tabla esta borrada (quedan solo los registros que quiero) que la consulta para generar el informe funcione.
Al borrar los datos y correr la consulta tanto el formulario como el informe aparcen vacios.
Adjunto la tabla con la base..
Adjuntos
Consulta socios.rar
(66.43 KiB) Descargado 248 veces
OpenOffice 4.1.5 en Windows 10 - Ubuntu
Longi
Mensajes: 808
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Boton y/o macro para borrar registros (parcialmente)

Mensaje por Longi »

Buenas!
Con el ejemplo que te mandé a mi me funciona bien en LibreOffice, pero también en OpenOffice.
Lo que hice en un principio fue abrir la tabla de datos externa con calc (para ver lo que había dentro).
Después abrí la base de datos que la conecta, y fui al valor FRESERVA, que me encontré que estaba en formato numérico, cambiándolo a fecha, con lo que pude saber con qué fechas estaba trabajando.
Si usas el formulario que te mandé en el otro ejemplo (formulario 1) y pulsas el botón, te pedirá dos fechas (como ya has visto) y deja la tabla con los registros entre ambas fechas (mayor que la inicial y menor o igual que la final).
Después, tanto si se abre la consulta como el informe, te pide una fecha en concreto, que a mi sí que me muestra los resultados (quizá por la transformación a formato de fecha que te indiqué antes).
Puedes intentar lo mismo quitando el parámetro de la consulta, con lo que te sacaría todos los datos que hay en la tabla (no es con lo que pretendes trabajar, pero te indicaría que todo está a la vista).
Te reenvío el ejemplo que mandaste, pero con el formulario que hice yo.
Y ya, por hacer todas las pruebas posibles, intenta hacer las cosas sin tener el otro programa abierto, a ver si la diferencia entre tus resultados y los míos tiene que ver con esa interferencia....
Adjuntos
Nueva carpeta.7z
(48.18 KiB) Descargado 259 veces
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
ugab
Mensajes: 141
Registrado: Mar May 17, 2011 9:46 pm

Re:[RESUELTOBoton y/o macro para borrar registros (parcialme

Mensaje por ugab »

Estimado Longi.

Lo he probado con el ejmplo que enviaste y el error (no actualizar) se sigue dando, creo que se debe a la cantidad de registros de la Tabla Original, porque lo probe
borrando datos de la Tabla de pruebas y al tener (500 o 600 registros) funciona.
Así que desde ya mil gracias por tu ayuda y la de todos.
Lo tendré que dar por Resuelto.
Ya que tengo que cambiar bastante el diseño y la programación de la Planilla, así que supongo que pronto estaré necesitando vustra ayuda nuevamente.
Gracias
OpenOffice 4.1.5 en Windows 10 - Ubuntu
Responder