Ver la Versión Completa : [Duda] Comenzar con BBDD...
Fito
5 de febrero de 2019, 17:08
Hola Amigos:
Quiero comenzar con el uso de alguna BBDD (postgres seguramente), y quiero alguna recomendación de qué utilizar.
Estoy en la duda si encarar por el lado de Control DBAcces, Ado, o Sql enbebido o alguna otra cosa. Mi idea es ir generando tablas paralelas a mis archivos cobol, es decir, seguir grabando mis archivos como siempre, y a su vez ir metiendo los mismos datos en la BBDD, para ir haciendolo paulatinamente.
Saludos.
Fito...
Josber
6 de febrero de 2019, 11:15
A ver yo he utilizado SQL Embebido, porque me parecía el más sencillo y controlable de las 3 opciones. Intenté con ADO, pero me parecía muy costoso de escribir el código, y DBAccess, ni lo intenté. Buscando documentación y ejemplos, al final me quedé con el embebido. Funciona perfectamente, es senciullo, rápido y todo lo que necesitas. Tiene sus pegas, (que con ADO creo que no existen), y es que hay algunas instrucciones que no las reconoce, como son CREATE, ALTER y algunas más, que no recuerdo ahora, por lo que las tablas, han de venir creadas y/o modificadas "de casa", la conexión a la BD, también hay que hacerla a través de un fichero de configuración y un ODBC, pero, si te acostumbras a solventar ésto desde fuera de tus programas. SQL Embebido, funciona perfectamente.
Un saludo.-
Fito
6 de febrero de 2019, 15:05
Hola:
Gracias Josber por responder. No me preocupa "mantener" las tablas desde el Cobol, solamente quiero hacer ABM. Lo demás lo haría con la herramienta de la BBDD.
Bien, SQL Embebido 1, controles ADO y DBAcces 0.
Saludos.
Fito...
Kuk
6 de febrero de 2019, 19:33
Fito, Josber, he añadido una encuesta ;)
Lascu
7 de febrero de 2019, 15:36
Hola Fito, me sumo a la respuesta de Josber. Es más sencillo de usar y mantener sql embebido que ADO, en mi opinión.
Te adjunto una rutina que uso para leer un registro de usuario.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
#INCLUDE "FD\BD-TABLAS.CPY".
01 BDUSUARIOS.
02 BDIDUSR PIC S9(06).
02 BDLOGIN PIC X(20).
02 BDNOMBRE PIC X(60).
02 BDTIPOUSR PIC X(04).
02 BDCLAVE PIC X(20).
02 BDCAMBIO PIC X(08).
02 BDHOST PIC X(80).
02 BDFOTOUSR PIC X(80).
02 BDACCESO PIC X(14).
01 SQLFECHA PIC X(08) GLOBAL.
01 SQLSTATE PIC X(5) global.
01 SQLCODE PIC S9(09) COMP-5 GLOBAL.
01 SQLMSG PIC X(128) GLOBAL.
EXEC SQL END DECLARE SECTION END-EXEC.
01 DATOS-IMAGEN.
02 FILLER PIC X(06) VALUE "FOTOS".
02 NOM-FOTO PIC X(15).
01 WK-COMBO.
02 WK-VALOR PIC X(04).
02 FILLER PIC X(03) VALUE " - ".
02 WK-DESCR PIC X(40).
LINKAGE SECTION.
01 LK-ID PIC 9(04).
01 LK-NOMBRE PIC X(20).
PROCEDURE DIVISION USING LK-ID, LK-NOMBRE.
INITIALIZE BDUSUARIOS.
EXEC SQL CONNECT TO DEFAULT END-EXEC.
EVALUATE TRUE
WHEN REG-EXISTE
MOVE LK-ID TO BDIDUSR
EXEC SQL SELECT * FROM usuarios WHERE iduser = :BDIDUSR
INTO :BDIDUSR, :BDLOGIN, :BDNOMBRE, :BDTIPOUSR, :BDCLAVE, :BDCAMBIO, :BDACCESO
END-EXEC
WHEN REG-CAMBIO
MOVE LK-NOMBRE TO BDLOGIN
EXEC SQL SELECT * FROM usuarios WHERE iduser = :BDLOGIN
INTO :BDIDUSR, :BDLOGIN, :BDNOMBRE, :BDTIPOUSR, :BDCLAVE, :BDCAMBIO, :BDACCESO
END-EXEC
END-EVALUATE.
IF SQLSTATE = "00000" THEN
PERFORM DATOS-A-PANTALLA
ELSE
MOVE SQLSTATE TO WX-SQLSTATE-ERROR
MOVE SQLMSG TO WX-SQLMSG-ERROR
INVOKE POW-SELF "CallForm" USING "INICIOERROR" "ERRORBD.DLL"
END-IF.
EXEC SQL DISCONNECT DEFAULT END-EXEC.
EXIT PROGRAM.
DATOS-A-PANTALLA.
MOVE BDIDUSR TO "Caption" OF LBL-CODIGO.
MOVE BDLOGIN TO "Text" OF PIC-LOGIN.
MOVE BDNOMBRE TO "Text" OF PIC-NOMBRE.
MOVE BDCLAVE TO "Text" OF PIC-CLAVE.
* MOVE BDFECHA TO "Caption" OF LBL-FECHA-ACCESO.
MOVE BDHOST TO "Caption" OF LBL-ORDENADOR.
IF BDFOTOUSR NOT = SPACES THEN
MOVE BDFOTOUSR TO NOM-FOTO
MOVE DATOS-IMAGEN TO "ImageName" OF IMAGEN
END-IF.
IF BDTIPOUSR > SPACES THEN
MOVE "TUSU" TO BDTIPO
MOVE BDTIPOUSR TO BDVALOR
EXEC SQL
SELECT tipotbl, valortbl, descritbl FROM tablas
WHERE tipotbl = :BDTIPO AND valortbl = :BDVALOR INTO :BDTIPO, :BDVALOR, :BDDESCR
END-EXEC
MOVE BDVALOR TO WK-VALOR
MOVE BDDESCR TO WK-DESCR
MOVE WK-COMBO TO "Text" OF CBO-TIPO
END-IF.
IF REG-CAMBIO THEN
MOVE POW-FALSE TO "Enabled" OF PIC-LOGIN
MOVE POW-FALSE TO "Enabled" OF CBO-TIPO
INVOKE PIC-NOMBRE "SetFocus"
ELSE
INVOKE PIC-LOGIN "SetFocus"
END-IF.
Saludos
Nitzer
8 de febrero de 2019, 12:08
Perdonad que discrepe, pero no cambio el ADO por nada del mundo :)
Ha sido mi salvación para adaptarme a nuevos paradigmas. El único problema que no he sido capaz de solucionar es cuando se pierde la conexión a la base de datos (se haya caido el servicio) que no pasa jamás, pero alguna vez en la empresa se hace por motivos ... (que no vienen a cuento) y entonces saltan 10.000 errores :))) , pero es la única pega y si todo va como debe de ir, jamás falla.
Ventajas, bajo mi punto de vista:
- No hay que definir nada en la working especificamente.
- Permite conectarse con ConnectionString, por lo que puedo cambiar de base de datos sin tocar código.
- da igual la complejidad de la select, con un string la construyes sin limitaciones.
- trabajar con el recordset generado es muy fácil y extraer la información igualmente.
- Un problema, NO PUEDEN VENIR CAMPOS NULL si los vas a almacenar en un numérico, se soluciona con un CASE (sqlserver) en la propia select.
Todo lo expuesto para utilizarlo con el control ADO que viene con el NetCobol.
Para algún caso específico también creo el objeto, por ejemplo INSERT MASIVOS o ejecución de algún procedimiento almacenado o función.
Como consejo final, la decisión que tomé de utilizar bbdd y solo dejar los indexados para ficheros temporales de trabajo, ha sido la mejor que he tomado en mucho tiempo.
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.