PDA

Ver la Versión Completa : [Compilador] Aplicacion CURD conectar servidor de MariaDB


nbiker
14 de diciembre de 2024, 23:38
Hola a todos, soy bastante nuevo por el foro.

He estado realizando diferentes programas para desoxidar mi COBOL, por ahora todo Bien. Uso gnu-Cobol, compilo el programa así:

$ cobc -v -debug -trace -x -free -L/usr/lib64 -lmariadb -o demo-sql demo-sql.cbl

En el siguiente nivel, he querido hacer la típica aplicación CURD guardando los datos en local. Todo OK,

Aquí vienen mis problemas, la misma programa lo he adaptado para conectarse a un MariaDB en un Red-hat 9, he hecho diferentes pruebas de conexión y todo correcto, desde C/C++/Rust/Python todos se conectan.

Os adjunto dos códigos, el primero sería una parte Cobol sencilla de solo conexión y que me responda con si ha realizado la conexión o no … Y a su vez así ha sido erróneo, que me dé tipo de error.

En el segundo código, sería la aplicación CURD que estoy realizando.

A ver si me podéis dar algún tipo de ayuda o pincelada por donde van los tiros.

La salida por pantalla del primer programa de conexión a MariaDB, me da esto:

[natxo@rh94 cobol]$ ./demo-sql
Starting MySQL connection test...
MySQL Client Version:
Initial DB-HANDLE: 0x0000000000000000
Status after init: 0004211024
DB-HANDLE after init: 0x0000000000000000
mysql_init failed - NULL handle returned
$

Codigo 1: https://pastebin.com/ehwjpLyr
Codigo 2: https://pastebin.com/7CbBp5L3

Kuk
15 de diciembre de 2024, 10:56
@nbiker, prueba así:


WORKING-STORAGE SECTION.
01 DB-HANDLE PIC S9(9) COMP-5.

PROCEDURE DIVISION.

*> Intentar inicializar MySQL
CALL "mysql_init" RETURNING DB-HANDLE

IF DB-HANDLE = 0 *> entonces ERROR, no debe ser 0 (nulo)

nbiker
26 de diciembre de 2024, 19:09
Gracias @Kuk, disculpa la contestacion a tu ayuda, entre fiestas y he estado enfermo, hasta hoy no he podido hacer pruebas de tu propuesta.

He realizado el cambio en el codigo de cobol, y ahora me sale un error nuevo de compilacion que no tenia antes ... y esta vez no se por donde pillarlo.

Te adjunto error al compilar:


[nvarona@rh94 cobol]$ cobc -x -free -L/usr/lib64 -lmariadb -o demo-sql demo-sql.cbl
/tmp/cob2842_0.c: En la función ‘CustomerMaria_’:
/tmp/cob2842_0.c:138:19: aviso: la asignación a ‘int’ desde ‘unsigned char *’ crea un entero desde un puntero sin una conversión [-Wint-conversion]
138 | (*(int *)(b_8)) = (cob_u8_ptr)NULL;
| ^
[nvarona@rh94 cobol]$

Kuk
26 de diciembre de 2024, 22:20
@nbiker, no te disculpes, las fiestas son la mejor causa que se me occurre para la ausencia de alguien. Lo menos bueno es que hayas estado pachucho, espero que nada grave ;)

La verdad es que no he trabajado con GnuCOBOL, hace mucho tiempo trabajé con COBOL-IT que es un fork del anterior, comercializado por un grupo de franceses hace unos 15 años y posteriormente comprado por Micro Focus. Así que voy un poco a ciegas.
Por lo que entiendo, en GnuCOBOL hemos de respetar la tipología C, (y ahora que lo pienso es lógico, porque el código Cobol se convierte en código C y después se compila con un compilador C).
Prueba la misma llamada pero con el campo declarado como lo tenías antes, con tipo POINTER.
Es decir:

WORKING-STORAGE SECTION.
01 DB-HANDLE POINTER.

PROCEDURE DIVISION.

*> Intentar inicializar MySQL
CALL "mysql_init" RETURNING DB-HANDLE

IF DB-HANDLE = 0 *> entonces ERROR, no debe ser 0 (nulo)

Joseg
27 de diciembre de 2024, 12:30
La forma más fácil que encontré para acceder a Bases de Datos con GnuCobol es usando la siguiente biblioteca:
https://github.com/mridoni/gixsql

Si tiene dificultades para instalar, este IDE instala todo automáticamente y está listo para usar (también se ejecuta en Linux)
https://github.com/mridoni/gix.

José

nbiker
27 de diciembre de 2024, 20:33
Gracias @Joseg lo miro este proyecto y tu sugerencia. Al final estoy moviendo todo lo que había empezado en Red-hat a una Raspberry Pi CM4 que tengo, y estoy haciendo pruebas de nuevo, a ver como me va ... a nivel de crear programas de cobol, bien, funcionan, pero quería meterle base de datos ...

Gusaiello
28 de diciembre de 2024, 15:16
Perdón @nbiker, que me meta con una pregunta que no tiene nada que ver, pero recuerdo que era como una encuesta de opinión que había puesto Andrés en su foro y nunca supe cual era el motivo.
Hay alguna ventaja que tengan las bases de datos sobre los archivos indexados?
Desde ya muchas gracias.

Kuk
28 de diciembre de 2024, 17:36
@Gusaiello, las ventajas de las BBDD son las siguientes:


Facilidad de manejo: tratas con una capa de abstracción mediante el lenguaje SQL (una gran parte del cual es común para todas las BBDD relacionales). Y lo que dices es qué es lo que quieres y no cómo. Es el motor de la BBDD quién se ocupa de cómo hacerlo
Reducción de líneas de código: puesto que dices qué es lo que quieres y no cómo obtenerlo, generalmente las líneas de código son inferiores en comparación con el tratamiento de ficheros. Sobre todo teniendo en cuenta las múltiples condiciones (filtros) que se le aplican a los datos. En SQL se pueden codificar cosas bastante complejas como un programa entero con bastantes menos líneas de código.
Añadir o quitar columnas es dinámico, no necesitas reemplazar el fichero, tratar con FILLERs y demás historias, el motor lo hace por ti
El motor crea unos metadatos que le sirven para mejorar el acceso y la recuperación de los datos, proporcionando (generalmente) el mejor rendimiento posible para cada filtro de condiciones
Transaccionalidad - posibilidad de confirmar las modificaciones o anular todo el trabajo si algo falla por el medio, (concepto de Transacción = todo o nada).


Las desventajas son:

Suelen ser de pago
Instalación de componentes adicionales, su mantenimiento (el único motor portable que se me viene a la cabeza es SQLite, que no se usa con grandes cantidades de datos porque no rinde lo suficiente)
Necesidad de adquirir al menos ciertos conocimientos de DBA (administración).
Evidentemente una capa de abstracción (el motor) reduce el rendimiento, aunque hoy en día, con los avances del hardware y mejoras de algoritmos del motor, la verdad es que es irrelevante (salvo algunos casos Batch).


Posiblemente se me escapa algo, dejo a los compañeros completar la información.

Fito
30 de diciembre de 2024, 15:48
Hola Amigos. Este tema daría para un post aparte, pero siguiendo el hilo de lo que pregunta Gustavo, todas las consideraciones de Carlos son reales.

Los grandes temas que me seducen de las BBDD son:
1-) Transacciones
2-) Manejo de Integridad Referencial
3-) Replicación de Datos

Recién estoy tratando de meterme en el tema. todavía no tengo nada en producción. Dentro de lo Open Source, me parece que Postgres es ideal y de los de pago Microsoft SQL Server (que es con el que estoy probando).

Otro tema no menor es que trabajando con BBDD, nosotros que estamos en COBOL, tenemos la posibilidad de empezar a desarrollar con otras herramientas fuera de COBOL (Pyton, Windev, etc). Está muy complicado conseguir gente que programe en COBOL, Ahora se viene todo el tema de la IA y me parece que ya tenemos que empezar a manejas herramientas más adecuadas para eso.
También está lo web, aunque todavía en COBOL se puede trabajar muy bien para eso.

Pero necesitamos ir avanzando en tecnologías más nuevas para no quedarnos.

Saludos...

Fito...