[RESUELTO] Instrucción SQL Delete no trabaja con fechas

Para discutir temas generales, incluso si no tienen que ver directamente con Apache OpenOffice
Responder
Néstor Londoño B.
Mensajes: 261
Registrado: Lun Dic 01, 2008 7:59 am
Ubicación: Pereira, Colombia

[RESUELTO] Instrucción SQL Delete no trabaja con fechas

Mensaje por Néstor Londoño B. »

Saludos a los miembros del foro:
Tengo una Tabla de Pagos en una BD de OOo con 4 columnas, IDPago (Entero,Inc Automático), Fech (Date), Descr(CharVar) e IDClte (Entero). Esta Tabla se crece mucho y la mejor forma de actualizarla es eliminando los datos de mas de, digamos, 18 meses; pero no he encontrado la forma de utilizar la instrucción SQL desde una macro, (sSQL ="DELETE FROM ""Pagos"" WHERE ""Fech"" <=" & Fe ) que funcione seleccionando una fecha inferior (<=) a ( Fe = DateAdd("m", -NM, Date) , cambiando a todos los formatos (dd/mm/aaaa, aaaa,mm,dd, aaaa-mm-dd), pero si lo hace con IDPago, sin embargo es mucho más facil borrar por medio de la "antiguedad" del registro, no hay que abrir la tabla para ver el número. El mensaje de error es:
Error de ejecución de BASIC
Se ha producido una excepción
Type: com.sun.star.sdbc.SQLException
Message: Wrong data tipe:java.lang.illegal.argumentException
Creo importante escribir la macro de ejecución

Sub Actualiza
NM = 18
Doc = ThisComponent
BDB = Doc.URL
Ctrl = Doc.CurrentController
If Not Ctrl.IsConnected Then Ctrl.Connect
Con = Ctrl.ActiveConnection
Sta = Con.CreateStatement()
Fe = DateAdd ("m", -NM, Date)
'Fe = Format(Fe,"yyyy,mm,dd"
Ins = "DELETE FROM ""TCompbts"" WHERE ""Fech"" <= " & Fe
Res = Sta.Execute (Ins)
Con.Close()
End Sub

Agradezco su ayuda orientada a solucionar o aclarar el problema, atentamente,
Última edición por Néstor Londoño B. el Sab Jun 04, 2011 6:37 pm, editado 2 veces en total.
Néstor
S,O. Ubuntu 15 AOO_4.0.1
mriosv
Mensajes: 2335
Registrado: Sab Dic 27, 2008 1:12 am
Ubicación: Galiza (España)

Re: Instrucción SQL Delete no trabaja con fechas

Mensaje por mriosv »

Porque no prueba dando a la fecha el mismo formato que se genera cuando creas una consulta con base para una fecha:
"FECHA" <= {D '2010-01-01' }
Puedes usar "Subir adjunto" en Respuesta rápida - Editor Completo - Pestaña Subir adjunto
Apache OpenOffice 4, LibreOffice (Win10x64)
Néstor Londoño B.
Mensajes: 261
Registrado: Lun Dic 01, 2008 7:59 am
Ubicación: Pereira, Colombia

Re: Instrucción SQL Delete no trabaja con fechas

Mensaje por Néstor Londoño B. »

Cordial saludo: Muchas gracias por su rápida respuesta, pero no entiendo la fórmula {d '2010-01-01] realmente nunca la he usado, para automatizar el sistema yo empleo Format(Fecha,"yyyy-mm-dd"), establezco el valor como variable para poder entrarlo por Msgbox o por diálogos, de forma que pueda ser usado por cualquier persona. En el uso de INSERT, emplee un formato "YYYY-MM-DD" y me funciona, pero en éste, no. Si me puede aclarar un poco, mejor. Nuevamente reitero mis saludos, atentamente,
Néstor
S,O. Ubuntu 15 AOO_4.0.1
mriosv
Mensajes: 2335
Registrado: Sab Dic 27, 2008 1:12 am
Ubicación: Galiza (España)

Re: Instrucción SQL Delete no trabaja con fechas

Mensaje por mriosv »

La forma mencionada es la que se ve en la SQL que se genera a través de base cuando se crea una consulta con un campo de fecha como condición.
O quizás la coma no es el separador correcto.
Fe = Format(Fe,"yyyy,mm,dd" ==> Fe = Format(Fe,"yyyy-mm-dd")
Puedes usar "Subir adjunto" en Respuesta rápida - Editor Completo - Pestaña Subir adjunto
Apache OpenOffice 4, LibreOffice (Win10x64)
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Instrucción SQL Delete no trabaja con fechas

Mensaje por RMG »

Hola Nestor,

Creo que como dice Miguel posiblemente el error lo tengas en la coma (,) de separación del formato de la fecha. Prueba con el guión (-). De todas formas formas te doy otra opción que tengo en mi proyecto de Gesfactura, que efectivamente elimina registros innecesarios con el paso del tiempo, pero aquí yo empleo años enteros, por si te interesa, esta es la macro y para ver como la empleo en el formulario de "Albaranes de compra" lo tienes.
Sub BorrarAlbaranes(Evento)
'BORRAR REGISTROS
Dim oCon As Object
Dim oStat As Object
Dim sSQL As String
Dim iFecha As Integer
Dim opcion As integer
opcion = MsgBox ("¿Realmente deseas borrar los albaranes ",36,"BORRAR ALBARANES")
If opcion = 6 Then
'Obtengo el año
iFecha=InputBox("Introducir el año a BORRAR:","SELECCIONAR AÑO","")
'Si cancelo o no pongo datos, salgo de la macro
If iFecha = 0 Then
Exit Sub
End If
oCon = ThisDatabaseDocument.CurrentController.ActiveConnection
oStat = oCon.CreateStatement
'Actualizo todos los datos en una consulta
sSQL = "DELETE FROM ""tabAlbaranesCompras"" WHERE TO_CHAR( ""Fecha"", 'yyyy' )="& iFecha
oStat.ExecuteUpdate(sSQL)
Evento.Source.Model.Parent.Reload
End If
End Sub

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Néstor Londoño B.
Mensajes: 261
Registrado: Lun Dic 01, 2008 7:59 am
Ubicación: Pereira, Colombia

Re: Instrucción SQL Delete no trabaja con fechas

Mensaje por Néstor Londoño B. »

Señores: No tengo palabras para agradecerles, pero tampoco esperaba menos de Uds. Con la nueva instrucción enviada por Ramón pude el menos desbloquear el sistema, al utilizar el formato YYYY-MM-DD, no ejecutaba ninguna acción la cambie a DD-MM-YY y realizó un trabajo que esoy tratando de entender, el programa le resta NM meses a la fecha actual por lo que al asignarle 15 la fecha obtenida es 3/2/2010 (Dia de ayer), y eliminó los registros >= 1/5/11 and <= 22/5/11. Si algo les comunicaré mas tarde, por ahora voy a dar por resuelto el presente hilo.
Mi conclusión es que la instrucción solo trabaja con fracciones de fechas (años, meses, dias)), adolece del manejo completo de la fecha reduciendo su funcionabilidad.Cordial saludo. Muchas gracias,
Néstor
S,O. Ubuntu 15 AOO_4.0.1
mriosv
Mensajes: 2335
Registrado: Sab Dic 27, 2008 1:12 am
Ubicación: Galiza (España)

Re: [RESUELTO] Instrucción SQL Delete no trabaja con fechas

Mensaje por mriosv »

Porque no intentas hacer una consulta con base de forma que selecciones según quieres y después que obtengas los resultados correctos, puedes ver el formato correcto de la condición y utilizarlo en el DELETE. Me resulta muy increible que las fechas no funcionen como condición y mas teniendo en cuenta que estamos hablando de SQL.
Puedes usar "Subir adjunto" en Respuesta rápida - Editor Completo - Pestaña Subir adjunto
Apache OpenOffice 4, LibreOffice (Win10x64)
Néstor Londoño B.
Mensajes: 261
Registrado: Lun Dic 01, 2008 7:59 am
Ubicación: Pereira, Colombia

Re: [RESUELTO] Instrucción SQL Delete no trabaja con fechas

Mensaje por Néstor Londoño B. »

Cordial saludo: Entre los ensayos que realicé ese fué uno, la instrucción SQL Resultante tiene dos puntos (:) antes de la variable paramétrica, como indicativo del tipo de variable introducida, parecida a la instrucción en la consulta, para poder entrar la variable por teclado >= :[FechaInicio]. No puedo descartar de plano que yo me haya equivodao o dejado de hacer mas reemplazos en tipos de variables en el dimensionamiento o en la fórmula de Ramón, la cual entre otras cosas, no la había encontrado en los manuales que tengo, pero la instrucción DELETE FROM ""Tabla"" WHERE TO_CHAR (""Columnn"", 'Formato' ) >= " & Variable, vuelvo y la repito tiene mucho mas aplicaciones para estos casos.
No me quedé quieto, también busque y en la dirección http://www.ite.educacion.es/formacion/m ... delete.htm encontré otra forma de la instrucción: DELETE FROM "Alumnos" WHERE ("FechaNacimiento" <= '1990-12-31') , la que para mis aplicaciones en una macro con variable String YYYY-DD-MM quedó así Ins = "DELETE FROM ""TCompbts"" WHERE (""Fech"" <= '" & Fb & "')", que funciona perfectamente, y es la solución. Tenía razón Miguel.
Néstor
S,O. Ubuntu 15 AOO_4.0.1
Responder