[REAbierto]Exportar una Consulta desde OODB a txt.
[REAbierto]Exportar una Consulta desde OODB a txt.
Soy nuevo en esto y no tengo conocimiento en programación:
Lo que estoy necesitando es una Macro (o alguna forma) que me exporte una Consulta a un archivo txt y que las separaciones entre campos sea con un pipe (|)
Busque en el foro y encontré un montón de códigos para Calc y Write, los pocos que encontré para Openoffice Base de Datos no me funcionaron, tiraron error o directamente no logre hacerlo andar.
Creo un post nuevo porque mi caso es distintos a los otros, por eso no lo pude hacer andar.
Cualquier dato que necesiten o prueba que necesitan que haga para resolver mi problema, estoy aquí atento.
Muchas gracias de antemano.
Kecho.
Re: Exportar una Consulta desde OODB a txt separado por "|"
Para cambiar el separador de campos a |, ejecute este comando
Código: Seleccionar todo
SET PROPERTY "textdb.fs" '|'
Si la consulta es
Código: Seleccionar todo
SELECT * FROM "FakeData" WHERE "Ser_Num" = 'AXAA'
Código: Seleccionar todo
SELECT * INTO TEXT "Export" FROM (SELECT * FROM "FakeData" WHERE "Ser_Num" = 'AXAA');
Código: Seleccionar todo
DROP TABLE "Export";
Código: Seleccionar todo
SELECT * INTO TEXT "Export" FROM (SELECT * FROM "FakeData" WHERE "Ser_Num" = 'AXAA');
DROP TABLE "Export";
Re: Exportar una Consulta desde OODB a txt separado por "|"
EDITO:
Amigo eres un verdadero Genio, casi se acerca a la perfección que necesito:
Este es el comando que puse basado en lo que vos pusiste:
Código: Seleccionar todo
SET PROPERTY "textdb.fs" '|'
SELECT * INTO TEXT "999998_ds.txt" FROM (SELECT "Tipo_de_arch", "Cod_Obra_Social", "CUIL", "Cod_del_Certif", "Venc_del_Certif", "Periodo_Prestacion" FROM "Subsidios");
DROP TABLE "999998_ds.txt";
Y por otro lado, necesitaría en un formulario crear un botón para ejecutar esto, calculo que lo correcto es grabar un Macro ejecutando el comando, nunca lo hice, me podrías decir por favor si es esto correcto o no?
Muchas gracias de antemano.
Kecho.
Re: Exportar una Consulta desde OODB a txt separado por "|"
Código: Seleccionar todo
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDB = oBaseContext.getByName("DB_SQL_Class") 'DB_SQL_Class es el nombre del archivo de Base
oCon = oDB.getConnection("", "") 'getConnection("usuario", "contrasena")
oSQL = oCon.createStatement()
res = oSQL.executeQuery("SELECT * INTO TEXT ""99Export"" FROM (SELECT * FROM ""FakeData"" WHERE ""Ser_Num"" = 'AXAA');DROP TABLE ""99Export"";"
oCon.close()
NAME "C:\Users\fjcc\Documents\_9export.csv" AS "C:\Users\fjcc\Documents\99Export.txt"
Re: Exportar una Consulta desde OODB a txt separado por "|"
Este código que me pasas lo edite con mi código anterior pero no se donde ponerlo, en ejecución SQL me tira error en el comando NAME, como consulta SQL me dice que esta mal la sintaxis pero no me dice que parte, también genere un macro con el código y me tira error en la Sintaxis, te paso el código que use:
Código: Seleccionar todo
Sub Main
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDB = oBaseContext.getByName("Integracion.odb") 'DB_SQL_Class es el nombre del archivo de Base
oCon = oDB.getConnection("", "") 'getConnection("usuario", "contrasena")
oSQL = oCon.createStatement()
res = oSQL.executeQuery("SET PROPERTY "textdb.fs" '|'
SELECT * INTO TEXT "999998_ds.txt" FROM (SELECT "Tipo_de_arch", "Cod_Obra_Social", "CUIL", "Cod_del_Certif", "Venc_del_Certif", "Periodo_Prestacion" FROM "Subsidios");
DROP TABLE "999998_ds.txt";"
oCon.close()
NAME "C:\Users\kecho\Desktop\_99998_ds_txt" AS "C:\Users\kecho\Desktop\999998_ds.txt"
End Sub
Código: Seleccionar todo
oSQL.executeQuery("SET PROPERTY "
Re: Exportar una Consulta desde OODB a txt separado por "|"
Creo que en la linea
Código: Seleccionar todo
NAME "C:\Users\kecho\Desktop\_99998_ds_txt" AS "C:\Users\kecho\Desktop\999998_ds.txt"
Dentro de la consulta que se pasa a executeQuery() es necesario escribir las comillas dos veces en cada lugar. Por ejemplo, escriba ""Tipo_de_arch"" y no "Tipo_de_arch".
Mi versión de su código:
Código: Seleccionar todo
Sub Main
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDB = oBaseContext.getByName("Integracion.odb") 'DB_SQL_Class es el nombre del archivo de Base
oCon = oDB.getConnection("", "") 'getConnection("usuario", "contrasena")
oSQL = oCon.createStatement()
res = oSQL.executeQuery("SELECT * INTO TEXT ""999998_ds.txt"" FROM (SELECT ""Tipo_de_arch"", ""Cod_Obra_Social"", ""CUIL"", ""Cod_del_Certif"", ""Venc_del_Certif"", ""Periodo_Prestacion"" FROM ""Subsidios"");
DROP TABLE ""999998_ds.txt"";"
oCon.close()
NAME "C:\Users\kecho\Desktop\_99998_ds_txt.csv" AS "C:\Users\kecho\Desktop\999998_ds.txt"
End Sub
Puede ejecutar la macro desde la ventana de OpenOffice Basic pulsando el botón verde que resalté en la imagen.
Re: Exportar una Consulta desde OODB a txt separado por "|"
EDITO: Le puse una comilla despues del ultimo ";" donde dice:
Código: Seleccionar todo
res = oSQL.executeQuery("SELECT * INTO TEXT ""999998_ds.txt"" FROM (SELECT ""Tipo_de_arch"", ""Cod_Obra_Social"", ""CUIL"", ""Cod_del_Certif"", ""Venc_del_Certif"", ""Periodo_Prestacion"" FROM ""Subsidios"");"
EDITO 2: Le puse una comilla delante de la palabra TABLE y como que paso al siguiente error.
Ahora me marca esto como error:
Código: Seleccionar todo
oDB = oBaseContext.getByName("Integracion.odb") 'DB_SQL_Class es el nombre del archivo de Base
Seguramente estoy haciendo cualquiera porque no se, pero voy probando, es codigo con los 2 cambios que hice me quedo asi:
Código: Seleccionar todo
Sub Main
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDB = oBaseContext.getByName("Integracion.odb") 'DB_SQL_Class es el nombre del archivo de Base
oCon = oDB.getConnection("", "") 'getConnection("usuario", "contrasena")
oSQL = oCon.createStatement()
res = oSQL.executeQuery("SELECT * INTO TEXT ""999998_ds.txt"" FROM (SELECT ""Tipo_de_arch"", ""Cod_Obra_Social"", ""CUIL"", ""Cod_del_Certif"", ""Venc_del_Certif"", ""Periodo_Prestacion"" FROM ""Subsidios"");"
DROP "TABLE ""999998_ds.txt"";"
oCon.close()
NAME "C:\Users\kecho\Desktop\_99998_ds_txt.csv" AS "C:\Users\kecho\Desktop\999998_ds.txt"
End Sub
Re: Exportar una Consulta desde OODB a txt separado por "|"
En esta versión guardé la consulta en cuatro variables.
Código: Seleccionar todo
Sub Main
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDB = oBaseContext.getByName("Integracion") 'En mi código, no use el .odb en el nombre del archivo
oCon = oDB.getConnection("", "") 'getConnection("usuario", "contrasena")
oSQL = oCon.createStatement()
Consulta1 = "SELECT * INTO TEXT ""999998_ds.txt"" FROM"
Consulta2 = " (SELECT ""Tipo_de_arch"", ""Cod_Obra_Social"", ""CUIL"", ""Cod_del_Certif"", ""Venc_del_Certif"", ""Periodo_Prestacion"""
Consulta3 = " FROM ""Subsidios"");"
Consulta4 = " DROP TABLE ""999998_ds.txt"";"
res = oSQL.executeQuery(Consulta1 & Consulta2 & Consulta3 & Consulta4)
oCon.close()
NAME "C:\Users\kecho\Desktop\_99998_ds_txt.csv" AS "C:\Users\kecho\Desktop\999998_ds.txt"
End Sub
Editado: NAME es una función de BASIC, no de SQL. No se puede usar esa parte del código en Herramientas → SQL |
Re: Exportar una Consulta desde OODB a txt separado por "|"
Hice el cambio con el nuevo codigo y me marca el error en:
Código: Seleccionar todo
oDB = oBaseContext.getByName("Integracion") 'En mi código, no use el .odb en el nombre del archivo
La única diferencia es que donde dice Integracion.odb dice Integracion solo.
Re: Exportar una Consulta desde OODB a txt separado por "|"
Re: Exportar una Consulta desde OODB a txt separado por "|"
EDITO: Tambien probe esto:
Código: Seleccionar todo
oDB = oBaseContext.getByName("C:\Users\kecho\Desktop\Integracion.odb") 'En mi código, no use el .odb en el nombre del archivo
EDITO 2: Subo el archivo para que lo veas mejor
Re: Exportar una Consulta desde OODB a txt separado por "|"
Código: Seleccionar todo
Sub Main
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
'URL = convertToURL("C:\Users\fjcc\Desktop\Integracion.odb")
URL = convertToURL("C:\Users\kecho\Desktop\Integracion.odb")
'oDB = oBaseContext.getByName("Integracion.odb") 'DB_SQL_Class es el nombre del archivo de Base
oDB = oBaseContext.getByName(URL)
oCon = oDB.getConnection("", "") 'getConnection("usuario", "contrasena")
oSQL = oCon.createStatement()
res = oSQL.executeQuery("SELECT * INTO TEXT ""999998_ds.txt"" FROM (SELECT ""Tipo_de_arch"", ""Cod_Obra_Social"", ""CUIL"", ""Cod_del_Certif"", ""Venc_del_Certif"", ""Periodo_Prestacion"" FROM ""Subsidios""); DROP TABLE ""999998_ds.txt"";"
oCon.close()
'NAME "C:\Users\fjcc\Desktop\_99998_ds_txt.csv" AS "C:\Users\fjcc\Desktop\999998_ds.txt"
NAME "C:\Users\kecho\Desktop\_99998_ds_txt.csv" AS "C:\Users\kecho\Desktop\999998_ds.txt"
End Sub
- Adjuntos
-
- Integracion.zip
- (58.2 KiB) Descargado 111 veces
Re: Exportar una Consulta desde OODB a txt separado por "|"
Voy a sacar la foto de Mascherano que tengo en la pieza y voy a poner la tuya ahí jejejeje
funciono a la perfección, ahora solo queda seguir trabajándolo porque me falta configurarle bien las consultas que en realidad necesito, pero lo mas difícil que tenia era esto.
Estoy mas que agradecido contigo.
EDITO: Me acabo de dar cuenta que hay algo que esta mal, me esta tomando una tabla y no una consulta, pero para que veas que soy buen alumno y que aprendo rápidamente lo solucione yo sólito
Acá paso el código donde saca la info de la Consulta1:
Código: Seleccionar todo
Sub Main
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
'URL = convertToURL("C:\Users\fjcc\Desktop\Integracion.odb")
URL = convertToURL("C:\Integracion\Integracion.odb")
'oDB = oBaseContext.getByName("Integracion.odb") 'DB_SQL_Class es el nombre del archivo de Base
oDB = oBaseContext.getByName(URL)
oCon = oDB.getConnection("", "") 'getConnection("usuario", "contrasena")
oSQL = oCon.createStatement()
'res = oSQL.executeQuery("SELECT * INTO TEXT ""999998_ds.txt"" FROM (SELECT ""Tipo_de_arch"", ""Cod_Obra_Social"", ""CUIL"", ""Cod_del_Certif"", ""Venc_del_Certif"", ""Periodo_Prestacion"" FROM ""Subsidios""); DROP TABLE ""999998_ds.txt"";"
res = oSQL.executeQuery("SELECT * INTO TEXT ""999998_ds.txt"" FROM (SELECT ""Subsidios"".""Tipo_de_arch"", ""Subsidios"".""Cod_Obra_Social"", ""Personas"".""CUIL"", ""Personas"".""Cod_del_Certif"", ""Personas"".""Venc_del_Certif"", ""Subsidios"".""Periodo_Prestacion"" FROM ""Personas"", ""Subsidios""); DROP TABLE ""999998_ds.txt"";"
oCon.close()
'NAME "C:\Users\fjcc\Desktop\_99998_ds_txt.csv" AS "C:\Users\fjcc\Desktop\999998_ds.txt"
NAME "C:\Integracion\_99998_ds_txt.csv" AS "C:\Integracion\999998_ds.txt"
End Sub
EDITO2: Me acabo de dar cuenta que en realidad el código hace la Consulta, no necesito tener una consulta creada, igual me sirve crear la consulta para luego copiar el código e insertarlo en el que vos hiciste, y así el mismo código hace la consulta por mas que no haya una consulta creada.
Perdón por ser una pesadilla que no entiende nada, pero voy aprendiendo de a poco
Re: [REAbierto]Exportar una Consulta desde OODB a txt.
Primero, no me respeta el formato que tengo en la tabla, por ejemplo:
La consulta me tira esta linea:
Código: Seleccionar todo
DS 200400 19252365472 201612 25568686332 07 E 11/10/2016 21354651313121 0023 00004551 00005161,00 00005156,00 015 000015 16 S
Código: Seleccionar todo
DS|200400|19252365472|||201612|25568686332|7|E|2016-10-11|21354651313121|23|4551|5161|5156|15|15|16|true
Por otro lado necesito que pueda especificarle desde cuando a cuando de una tabla de fecha me tire el listado.
Desde una consulta lo puedo hacer lo mas bien:
Código: Seleccionar todo
SELECT "Tipo_de_arch", "Cod_Obra_Social", "CUIL", "Cod_del_Certif", "Venc_del_Certif", "Periodo_Prestacion", "CUIT_Prestador", "Tipo_Comprobante", "Tipo_de_emision", "Fecha_Emision_Comp", "Num_Cae_Cai", "Puntos_de_Venta", "Num_de_Comprob", "Imp_del_Comprob", "Imp_Solicitado", "Cod_de_Practica", "Cantidad", "Provincia", "Dependencia" FROM "Subsidios" WHERE "fecha_de_carga" >= :Desde AND "fecha_de_carga" <= :Hasta
Código: Seleccionar todo
WHERE "fecha_de_carga" >= :Desde AND "fecha_de_carga" <= :Hasta
Código: Seleccionar todo
Sub Main
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
'URL = convertToURL("C:\Users\fjcc\Desktop\Integracion.odb")
URL = convertToURL("C:\Integracion\Integracion.odb")
'oDB = oBaseContext.getByName("Integracion.odb") 'DB_SQL_Class es el nombre del archivo de Base
oDB = oBaseContext.getByName(URL)
oCon = oDB.getConnection("", "") 'getConnection("usuario", "contrasena")
oSQL = oCon.createStatement()
'res = oSQL.executeQuery("SELECT * INTO TEXT ""999998_ds.txt"" FROM (SELECT ""Tipo_de_arch"", ""Cod_Obra_Social"", ""CUIL"", ""Cod_del_Certif"", ""Venc_del_Certif"", ""Periodo_Prestacion"" FROM ""Subsidios""); DROP TABLE ""999998_ds.txt"";"
res = oSQL.executeQuery("SELECT * INTO TEXT ""999998_ds.txt"" FROM (SELECT ""Tipo_de_arch"", ""Cod_Obra_Social"", ""CUIL"", ""Cod_del_Certif"", ""Venc_del_Certif"", ""Periodo_Prestacion"", ""CUIT_Prestador"", ""Tipo_Comprobante"", ""Tipo_de_emision"", ""Fecha_Emision_Comp"", ""Num_Cae_Cai"", ""Puntos_de_Venta"", ""Num_de_Comprob"", ""Imp_del_Comprob"", ""Imp_Solicitado"", ""Cod_de_Practica"", ""Cantidad"", ""Provincia"", ""Dependencia"" FROM ""Subsidios""); DROP TABLE ""999998_ds.txt"";"
oCon.close()
'NAME "C:\Users\fjcc\Desktop\_99998_ds_txt.csv" AS "C:\Users\fjcc\Desktop\999998_ds.txt"
NAME "C:\Integracion\_99998_ds_txt.csv" AS "C:\Integracion\999998_ds.txt"
End Sub
Re: [REAbierto]Exportar una Consulta desde OODB a txt.
¿Es la solución aceptable?
- Adjuntos
-
- Integracion.zip
- (65.7 KiB) Descargado 133 veces
Re: [REAbierto]Exportar una Consulta desde OODB a txt.
Eh probado todo el día la base de datos que has subido y no logre hacer nada, primeramente no pude hacer que la consulta Desde_Hasta ingrese el resultado en el Archivo Consulta_a_CSV.ods.
Segui tus pasos, hago la consulta, voy al archivo y Selecciono el Rango Import1 y no pasa nada, se abre el ODS se selecciona el primer rango de la misma y hace el archivo txt, pero siempre con los mismos datos, osea si yo borra los datos del mismo archivo (ODS) y ejecuto la consulta, el macro CSWritre que me tira error pero no me marca donde (Error al acceder a la fuente de datos 'Integracion': com.sun.star.container.NoSuchElementException: Integracion), y Selecciono el rango y el archivo TXT aparece vacio.
Lo bueno que he probado darle forma a los datos en el archivo ODS y cuando lo paso a TXT me lo respeta. Solo tengo que hacer que la consulta que yo haga vaya a parar a ese archivo.
EDITO: No encontré como hiciste la vinculación entre la consulta y el archivo ODS por medio de Import1.
Re: [REAbierto]Exportar una Consulta desde OODB a txt.
1. Cambie la consulta Desde_Hasta para que no usa los parámetros Desde y :Hasta. Esto es necesario para implementar el vinculo. Después puede restablecer los parámetros.
2. Registre la base de datos en el menú Herramientas → Opciones → OpenOffice Base → Bases de datos.
Guarde y cierre el archivo Integracion.odb. 3. Elimine el archivo Consulta_a_CSV.ods
4. Cree un documento de Calc y seleccione el menú Ver → Fuentes De Datos.
5. Arrastre la consulta Desde_Hasta a la celda A1. El resultado de la consulta aparecerá en la hoja. Guarde y cierre el archivo. (Nombre = Consulta_a_CSV.ods. ) 6. Ahora puede restablecer los parámetros en la consulta.
La macro CSVwrite ya debe funcionar.