![]() |
SQlite3 con PowerCobol
Permite integrar el motor de base de datos de SQlite con nuestras aplicaciones.
En mi caso es para poder interactuar con una aplicacion que hice para Android y poder leer la informacion de la BD y evitar utilizar archivos con formato .CSV como interface. Su implementacion es muy sencilla descargar Binarios precompilados para Windows para su version 32 bits (sqlite3.dll) no hace falta registrarla. 1 - Copiar Sqlite3.dll en la carpeta del proyecto 2 - Agregar la funciones de la libreria en el Archivo COBOL85 3 - Luego llamar a esas funciones via call 4 - Informacion de las funciones en : https://sqlite.org/c3ref/funclist.html Ejemplo para abrir , crear , insertar , actualizar un registro y cerrar Declaracion Variables Código COBOL:
Abrir BD Código COBOL:
Crear BD Código COBOL:
Insertar Registro BD Código COBOL:
Actualizar Registro BD Código COBOL:
Cerar BD Código COBOL:
Saludos.... |
Muito interessante!
Obrigado |
Gracias @fastpho, lo único que recomiendo encarecidamente cuando se trabaja con BDs, es que los nombre de las variables que usemos para esas BDs, no contengan el guion medio (-), y sí el guion bajo (_), esto es porque sql, lo puede confundir con el signo de restar (-), el programa puede hacer cosas inesperadas y te vuelves loco buscando el error, (por experiencia propia). Aquí, no parece que se vaya a dar la condición, pero, no es malo, coger esa costumbre. Sólo hay que fijarse en las variables propias de sql, en las que todas son SQLITE_xxxx, y no SQLITE-xxxx
Por lo demás, un excelente aporte Un salu2.- |
Gracias @Josber , voy a tomar la sugerencia para evitar posibles problemas
Saludos.... |
un idx2sqlite seria fabuloso, así se traslada datos sin intermediarios
|
1 Archivos Adjunto(s)
Cita:
Para criar o .LIB na mesma pasta a onde esta o SQLITE3.DLL Linha de comandos: lib /DEF:sqlite3.def /OUT:sqlite3.lib /MACHINE:x32 (ou x64) |
Hola,
Como implementar un loop en PowerCobol? Ejemplo de lista de todos los registros de "MyTable": Código SQL:
Creo que tienes que usar "sqlite3_prepare" y "sqlite3_step", o implementar una "devolución de llamada" (callback), Código COBOL:
... pero no lo estoy consiguiendo. Gracias, Jose |
Hola @Joseg
Para poder realizar un "select" yo no lo pude hacer por "CALLBACK" trabajo con la version 5.0 de PowerCobol y no acepta PROCEDURE-POINTER Entonces para resolverlo hago : sqlite3_open_v2 sqlite3_prepare_v2 sqlite3_step aca hay que meter el loop si Código:
SQLITE_ROWCódigo:
SQLITE_DONEsqlite3_close_v2 Saludos... |
Cita:
Pero, sigue sin funcionar :( Código COBOL:
¿Qué tiene de malo esta parte del código? call "sqlite3_step" da el error SQLITE_MISUSE = 21. *> Library used incorrectly Powercobol v9 Gracias, José |
@Joseg
La funcion sqlite3_step espera el valor por value no por reference seria asi : Código COBOL:
Código COBOL:
|
Cita:
En PWC, con SQL_Embebido, sería algo así: Código COBOL:
por lo menos, esa es la manera con la que yo hago un bucle. Lo puedes hacer con un PREPARE también pero, es más lioso, y se usa si tienes que montar la consulta armando un STRING, pero ese es otro tema. Un salu2.- |
Cita:
Ok, la función "sqlite3_step" ya está bien. La función "sqlite3_column_count" también está bien. La siguiente función siempre devuelve NULL (5) Código COBOL:
Gracias por la ayuda. Jose |
Hola @Joseg como recorrer la tabla para saber que tipo valor se puede almacenar por columnas
Código COBOL:
|
Cita:
Muchas gracias. Tu ayuda ha sido muy importante. Mi ultima duda es como convertir un puntero en texto o una fecha o un campo numerico o incluso un "BLOB", ser consultable en powercobol. ejemplo: Código COBOL:
Saludos José |
Hola @Joseg con respecto a los tipos de datos
yo estoy trabajando en Android(B4A) con: Código COBOL:
*Tema: Tipo dato Entero* Para pwcobol es un PIC 9(1...13) dependiendo el uso. Código COBOL:
*Tema : Tipo de dato Fecha* en Android represento las fechas en ticks(type Long) Código VB:
Para pwcobol la paso a PIC X(13) (SomeTime) Código COBOL:
*Tema : Tipo de dato Real* Tambien lo trato con sqlite3_column_text y lo muevo a Código COBOL:
Código COBOL:
*Tema : Tipo de dato Blob* No lo he implementado en android Pero creo que lo mejor es guardar la direccion de la imagen fisica del archivo de la memoria del celular o mobil y no la imagen como tal. *Tema : Tipo de dato Text* simplemente como text PIC X(1...256) Espero que te ayude y se entienda. Saludos... |
Gracias por la ayuda. Todo está funcionando ahora. :bat::bat::bat:
Abrazo. José |
El problema de todo esto, es la cantidad de código y lo poco explícito que parece para acceder a los datos.
YO ya os dije que utilizo un activex que me hicieron para acceder y ejecutar y es tremendamente sencillo y claro. Llevo muchos años trabajando practicamente solo con bases de datos y estoy encantado :) |
Cita:
La idea de acceder a SQLITE directamente, sin ODBC, es facilitar la instalación de la aplicación por parte de "no informáticos". |
Cita:
En algún mensaje expliqué como empecé con las bases de datos en Power. Ya sabemos que power tiene varios controles para ello, el primero DbAccess, es por donde empecé para ir comprendiendo , pero pronto te das cuenta que no es lo que buscas. Luego continué con sql embebido y la configuración de cobol85, que tampoco me terminaba de convencer, aunque hacía su función. Lo siguiente y con lo que mas he estado ha sido utilizado el control ADO, con ese casi todo lo puedes hacer, la pena es que no hay mucha información enPower, pero a fin de cuentas es ADO, y de ado hay muuuuucha información en internet, empecé a ver todos los métodos, funciones, etc ... y aplicarlas en power, unas iban bien y otras no , me quedé con las que funcionaban y así he estado varios años completamente satisfecho. Pero mi interés por la sql seguía creciendo y necesitaba aplicar consultas mas grandes, procedimientos almacenados, funciones, etc ... en ese momento empecé a buscar por internet, pero no encontré gran cosa. Pero conocía a una empresa que tenía varios ocx y con la que ya había contactado , la empresa es FathSowtware, que por cierto hace unos meses cerró y ya no hay manera de encontrar sus productos, pero Admir que es quien llevaba la empresa, lo había conocido e intercamabiado correos, así que le dije si me podía hacer un activex para acceder nativamente a sqlserver y .... tras 27 prototipos y 200 dolares , conseguí lo que buscaba :) Desde entonces todo ha cambiado. Si queréis le puedo preguntar si estaría dispuesto a venderlo o regalarlo o lo que sea, es un ocx sencilla,se registra y se distribuye y por ahora y tras varios años, todo perfecto. Y siento si el mensaje anterior se malinterpretó, admiro el trabajo de cada uno de vosotros. |
Todo bien.
Estamos aquí para ayudarnos unos a otros. Este OCX parece interesante, pero comprar un producto aparentemente descatalogado no sería buena idea. Como producto gratuito/de código abierto, me gustaría probarlo. Saludos |
Cita:
para que puedan entenderlo , por eso se ve poco explicito y tantas lineas de codigo como decis...(no he malinterpretado tu mensaje) :bien: La idea de esto es hacerle mas facil la vida (programacion) a los/las futuros desarrolladores y sepan que con COBOL se puede hacer lo mismo que con otros lenguajes y obtener los mismos resultados y en algunos casos hasta mas rapido y efeciente. Este es un lenguaje denominado de "VIEJOS" , que ya ni se enseña , no es un lenguaje "COOL" , pero hay que tratar de llevar a la juventud a creer en el. No voy a seguir delirando ..... Volviendo al tema sqlite , es muy simple su implementacion como explique en el post nro 1 Lo que he echo es envolver la funciones del libreria(sqlite3.dll) de tal forma que queda exactamente igual a cualquier llamada por (invoke o call) de un activex (dll o ocx) y evitar tantas lineas de codigo. Saludos.... |
@fastpho, siento el mensaje :(, os juro que no iba con mala intención.
He hablado con la persona que me hizo el ocx y me ha dicho que lo puedo distribuir libremente. He pensado en hacer un pequeño video explicando como lo utilizo, un pequeño manual con los métodos y os voy pasado el ocx a quien lo quiera. El ocx pesa 2 mb Decidme si merece la pena. |
Cita:
Puedes usar Mega para subir (u otro). Gracias |
@Nitzer, puedes subirlo al foro directamente ;)
|
Cita:
@Nitzer Seria muy bueno que puedas compartir la ocx ;) Muchas gracias |
Hola:
Estoy muy interesado Andrés. Te estaba persiguiendo por discord por ese tema :mola: Saludos Fito |
:astro:
el OCX fue compartido?! |
| La franja horaria es GMT +2. Ahora son las 13:47. |
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.