Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Sintaxis] Sql Embebido (https://www.cobolforo.es/showthread.php?t=332)

Hrmcobol 18 de febrero de 2016 23:05

Sql Embebido
 
Hola camaradas, nunca use esta modalidad de acceso, use siempre DbAccessControl, de Power, necesitaría un código como ejemplo de como hacer para leer un tabla de una base, vía una ODBC. Estoy leyendo el manual pero no doy pie con bola.
En algún momento alguien subió algo al respecto, pero no logro encontrarlo.
Lo que quiero hacer en concreto es agregar campos a tablas ya existentes, tambien crear tablas nuevas en una base. Se que las instrucciones son CreateTable y AlterTable.
Todo desde un programa cobol.
Saludos y Gracias !!

Josber 19 de febrero de 2016 08:16

A ver Hrm, primero tienes que empezar definiendo la estructura de la tabla en la WORKING, (y todas las variables que vayas a usar en SQL), por ejemplo

Código COBOL:
  1.             EXEC SQL
  2.                  BEGIN DECLARE SECTION
  3.             END-EXEC.
  4. *       FICHERO de GASTOS
  5.  01  REG-GAS    IS GLOBAL.
  6.      03  ID_GAS         PIC S9(11).
  7.      03  GASLIB         PIC X(4).       *> LIBRO DE REGISTRO AL QUE PERTENECE EL APUNTE
  8.      03  GASFEC         PIC X(8).       *> FECHA DEL APUNTE
  9.      03  GASDES         PIC X(60).      *> DESCRIPCIÓN DEL APUNTE
  10.      03  GASIMP         PIC S9(9)V999.      *> IMPORTE DEL APUNTE
  11.      03  GASTIP         PIC X.          *> TIPO DE APUNTE (Ingreso o Gasto)
  12.      03  GASOBS         PIC X(100).     *> OBSERVACIONES
  13.      03  GASUSU         PIC X(10).      *> USUARIO ALTA DEL APUNTE
  14.      03  GASUSU_FEC     PIC X(8).       *> FECHA EN LA QUE SE REALIZA EL APUNTE
  15.      03  GASHO.
  16.          05  GASHOR     PIC S9(6).      *> HORA EN LA QUE SE REALIZA EL APUNTE
  17.      03  GASUSU_MOD     PIC X(10).      *> USUARIO ULTIMA MODIFICACIÓN
  18.      03  GASFEC_MOD     PIC X(8).       *> FECHA ULTIMA MODIFICACIÓN
  19.      03  GASHO_MOD.
  20.          05  GASHOR_MOD     PIC S9(6).      *> HORA ULTIMA MODIFICACIÓN
  21.      03  GASELI         PIC X.          *> ¿APUNTE ELIMINADO?
  22. *
  23.  01  WGASLIB            PIC X(4)    IS GLOBAL.
  24.  01  WID_GAS            PIC S9(11)  IS GLOBAL.
  25.  01  ID_GAS1            PIC S9(11)  IS GLOBAL.
  26. *
  27.  01  SQLSTATE           PIC XXXXX   IS GLOBAL.
  28.  01  SQLCODE            PIC S9(9) COMP-5   GLOBAL.
  29.  01  SQLMSG         PIC X(600)     GLOBAL.
  30.  01  CONTASQL           PIC S9(9)   IS GLOBAL.  *> CONTADOR
  31.  01  WS-SQL         PIC X(250)      IS GLOBAL.
  32.             EXEC SQL
  33.                  END DECLARE SECTION
  34.             END-EXEC.

Ten en cuenta que TODAS las variables numéricas, en la WORKING tienen que llevar signo SÍ o SÍ.

- PARA LEER EL NÚMERO DE REGISTROS:

Código COBOL:
  1.      EXEC SQL
  2.           SELECT COUNT(GASLIB)
  3.                  FROM GASTOS
  4.                       WHERE GASLIB = :WGASLIB AND GASELI <> "S"
  5.                  INTO :CONTASQL
  6.      END-EXEC.

en CONTASQL se almacenaría el total de registros

- PARA LEER UN REGISTRO ESPECÍFICO

Código COBOL:
  1.      MOVE "Text" OF CAMPO10 TO WID_GAS.
  2.      
  3.      EXEC SQL
  4.           SELECT ID_GAS,
  5.                  GASFEC,
  6.                  GASDES,
  7.                  GASIMP,
  8.                  GASTIP,
  9.                  GASOBS,
  10.                  GASELI
  11.                  FROM GASTOS WHERE ID_GAS = :WID_GAS LIMIT 1
  12.                  INTO :ID_GAS,
  13.                       :GASFEC,
  14.                       :GASDES,
  15.                       :GASIMP,
  16.                       :GASTIP,
  17.                       :GASOBS,
  18.                       :GASELI
  19.      END-EXEC.
  20.      
  21.      IF SQLSTATE NOT = "00000" OR GASELI = "S"
  22.         ADD POW-DMICONERROR POW-DMOK GIVING ESTILO
  23.         INVOKE POW-SELF "DisplayMessage"
  24.                USING "*ERROR: El registro no existe ..."
  25.                      WS-ATENCION
  26.                      ESTILO
  27.         END-INVOKE
  28.         INVOKE CAMPO10 "SetFocus"
  29.         EXIT PROGRAM
  30.      END-IF.

- PARA LEER UN RANGO ESPECÍFICO DE REGISTROS

Código COBOL:
  1.      
  2.      EXEC SQL
  3.           DECLARE cursor1 CURSOR FOR
  4.                   SELECT ID_GAS,
  5.                          GASFEC,
  6.                          GASDES,
  7.                          GASIMP,
  8.                          GASTIP,
  9.                          GASOBS,
  10.                          GASELI
  11.                   FROM GASTOS WHERE GASLIB = :WGASLIB AND GASELI <> "S"
  12.                          ORDER BY ID_GAS ASC;
  13.      END-EXEC.
  14.      
  15.      EXEC SQL
  16.           OPEN cursor1
  17.      END-EXEC.
  18.      
  19.      PERFORM CARGAR THRU FIN-CARGAR UNTIL SQLSTATE = "02000".
  20.      
  21.      EXEC SQL
  22.           CLOSE cursor1
  23.      END-EXEC.
  24.      
  25.      EXEC SQL
  26.           COMMIT
  27.      END-EXEC.
  28.      .
  29.      .
  30.      .    
  31. *
  32.  CARGAR.
  33.      EXEC SQL
  34.           FETCH cursor1
  35.                 INTO :ID_GAS,
  36.                      :GASFEC,
  37.                      :GASDES,
  38.                      :GASIMP,
  39.                      :GASTIP,
  40.                      :GASOBS,
  41.                      :GASELI
  42.      END-EXEC.
  43.      
  44.      IF SQLSTATE = "02000"
  45.         GO FIN-CARGAR
  46.      END-IF.
  47.          
  48.      INVOKE VIEW2 "Add" USING 1 1 RETURNING WK-IDX
  49.      IF WK-IDX > 0 THEN
  50.         MOVE "ListItems"(WK-IDX) OF VIEW2 TO POW-PCMLIST
  51.      END-IF.
  52.      
  53.      MOVE GASFEC TO FECHA.
  54.      MOVE CORR FECHA TO FECHA1.
  55.      .
  56.      .
  57.      .
  58.      
  59.  FIN-CARGAR.
  60.      EXIT.

- PARA INSERTAR UN NUEVO REGISTRO

Código COBOL:
  1.         EXEC SQL
  2.              INSERT INTO GASTOS
  3.                     VALUES (
  4.                             NULL,
  5.                            :GASLIB,
  6.                            :GASFEC,
  7.                            :GASDES,
  8.                            :GASIMP,
  9.                            :GASTIP,
  10.                            :GASOBS,
  11.                            :GASUSU,
  12.                            :GASUSU_FEC,
  13.                            :GASHOR,
  14.                            :GASUSU_MOD,
  15.                            :GASFEC_MOD,
  16.                            :GASHOR_MOD,
  17.                            :GASELI     )
  18.         END-EXEC

El primer campo es NULL, porque el campo ID_GAS, que es la clave principal, es un campo AUTO_INCREMENT.

- PARA MODIFICAR UN REGISTRO EXISTENTE:

Código COBOL:
  1.      EXEC SQL
  2.           UPDATE GASTOS
  3.                  SET GASLIB =   :GASLIB,
  4.                      GASFEC =   :GASFEC,
  5.                      GASDES =   :GASDES,
  6.                      GASIMP =   :GASIMP,
  7.                      GASTIP =   :GASTIP,
  8.                      GASOBS =   :GASOBS,
  9.                      GASUSU_MOD = :GASUSU_MOD,
  10.                      GASFEC_MOD = :GASFEC_MOD,
  11.                      GASHOR_MOD = :GASHOR_MOD,
  12.                      GASELI =   :GASELI
  13.                   WHERE ID_GAS = :ID_GAS
  14.      END-EXEC.

Aquí no puedes poner el primer campo, porque la llave principal, no se puede volver a grabar, si lo pusieras daría el error S200 en SQLSTATE.

despues de cada vez que INSERTES/MODIFIQUES un registro, has de poner

Código COBOL:
  1. EXEC SQL
  2.         COMMIT
  3. END-EXEC.

o de lo contrario, no te modificará la tabla, en caso que que quiereas desacer los cambios, cambias el COMMIT por ROLLBACK, pero una vez que haya hecho el COMMIT, los cambios no se pueden deshacer.

Creo que está todo, si tienes dudas o problemas, dinoslo.

Un saludo.-

Josber 19 de febrero de 2016 11:46

Se me ha pasado el ponerte como se crea la tabla

Código COBOL:
  1. EXEC SQL
  2. CREATE TABLE IF NOT EXIST 'gastos' (
  3.  'ID_GAS' int(11) unsigned NOT NULL AUTO_INCREMENT,
  4.  'GASLIB' varchar(4) DEFAULT NULL COMMENT 'LIBRO DE GASTOS',
  5.  'GASFEC' varchar(8) DEFAULT NULL COMMENT 'FECHA APUNTE',
  6.  'GASDES' varchar(60) DEFAULT NULL COMMENT 'DESCRIPCIÓN APUNTE',
  7.  'GASIMP' decimal(12,3) NOT NULL DEFAULT '0.000' COMMENT 'IMPORTE APUNTE',
  8.  'GASTIP' varchar(1) DEFAULT NULL COMMENT 'TIPO DE APUNTE(GASTO o INGRESO)',
  9.  'GASOBS' varchar(100) DEFAULT NULL COMMENT 'OBSERVACIONES APUNTE',
  10.  'GASUSU' varchar(10) DEFAULT NULL COMMENT 'USUARIO QUE HIZO EL APUNTE',
  11.  'GASUSU_FEC' varchar(8) DEFAULT NULL COMMENT 'FECHA QUE SE HIZO EL APUNTE',
  12.  'GASHOR' decimal(6,0) DEFAULT '0' COMMENT 'HORA EN LA QUE SE HIZO EL APUNTE',
  13.  'GASUSU_MOD' varchar(10) DEFAULT NULL COMMENT 'USUARIO ÚLTIMA MODIFICACIÓN',
  14.  'GASFEC_MOD' varchar(8) DEFAULT NULL COMMENT 'FECHA ÚLTIMA MODIFICACIÓN',
  15.  'GASHOR_MOD' decimal(6,0) DEFAULT NULL COMMENT 'HORA ÚLTIMA MODIFICACIÓN',
  16.  'GASELI' varchar(1) DEFAULT NULL COMMENT '¿APUNTE ELIMINADO?',
  17.  UNIQUE KEY ('ID_GAS')
  18. ) ENGINE=InnoDB DEFAULT CHARSET=latin1
  19. END-EXEC

Si no pones la instrucción IF NOT EXIST, te dará error si la tabla ya existe

- Si deseas eliminar elementos de la tabla:

Código COBOL:
  1. EXEC SQL
  2.         DELETE FROM GASTOS
  3.                    WHERE ID_GAS = :WID_GAS
  4. END-EXEC.

- Si quieres vaciar por completo una tabla, además de poner el contador AUTO_INCREMENT a 0, (si lo tiene la tabla, que no es obligatorio)

Código COBOL:
  1. EXEC SQL
  2.         TRUNCATE TABLE GASTOS
  3. END-EXEC.

- Si quieres eliminar por completo la tabla, (datos y estructura)

Código COBOL:
  1. EXEC SQL
  2.         DROP TABLE GASTOS
  3. END-EXEC.

¡Cuidado! que TRUNCATE y DROP, no tienen vuelta atrás

Si quieres ver cómo esta creada una tabla, desde el administrador de BD, no desde tu programa COBOL

Código SQL:
  1. SHOW CREATE TABLE Nombre_de_la_tabla

Esto te daría un fichero de texto plano muy similar al que utilizas para crear la tabla.

Un saludo y suerte.-

---------- Post añadido : 11:46 ---------- Post anterior : 11:30 ----------

Otra cosa a tener en cuenta, es cuando creas un número en SQL y has de ponerle un tamaño con decimales, esto se define entre paréntesis, el primer número indica el tamaño total, (incluidos los decimales) y el segundo los decimales, por ejemplo, un campo en COBOL del tipo

Código COBOL:
  1. 01  WNUM        PIC S9(7).
  2. 01  WDEC        PIC S9(7)V999.

en SQL, sería

Código SQL:
  1. 'WNUM' decimal(7,0),
  2. 'WDEC' decimal(10,3)

Si te fijas WDECIMAL en SQL, tiene un tamaño de 10, de los que 3 son decimales.
Los campos en SQL, se separan utilizando el símbolo de la , (coma), y las instrucciones se separan utilizando el símbolo ; (punto y coma), por ejemplo:

Código COBOL:
  1.      
  2.      EXEC SQL
  3.  
  4.           DECLARE cursor1 CURSOR FOR
  5.                   SELECT ID_GAS,
  6.                          GASFEC,
  7.                          GASDES,
  8.                          GASIMP,
  9.                          GASTIP,
  10.                          GASOBS,
  11.                          GASELI
  12.                   FROM GASTOS WHERE GASLIB = :WGASLIB AND GASELI <> "S"
  13.                          ORDER BY ID_GAS ASC;
  14.  
  15.           OPEN cursor1
  16.  
  17.      END-EXEC.

Cuidado con las comas y los punto y comas, que son obligatorios y es muy estricto en ésto.



Un saludo

Hrmcobol 24 de febrero de 2016 16:14

Estimados, sigo colgado con este tema.
La pregunta es:
Como relaciono la ODBC con el PwCobol sin usar DbAccessControl
Saludos

Kuk 24 de febrero de 2016 21:45

Hrmcobol, si no me equivoco, tienes que crear un fichero *.inf con la configuración de la conexión e indicarlo en COBOL85.CBR con la variable @ODBC_Inf.
Ejemplo:
Código:

@ODBC_Inf=PRUEBA.inf

Hrmcobol 25 de febrero de 2016 21:38

Asi Es Kuk, la conexión se hace r intermedio del @ODBC_Inf=PRUEBA.inf y el cobol85.cbr, logre abrir la base y leer registros de la tabla.
Gracias.

Juanghi 26 de febrero de 2016 04:44

muy bueno el aporte de jorber
 
5 Archivos Adjunto(s)
Como primer paso en tu proyecto deberias direccionar donde estara tu archivo de coneccion via odbc (ojo .. por fuera podes cambiar esa direccion tambien)

Luego ejecutar el SQLODBCS a los efectos de crear la sesion con el archivo de coneccion

seleccionas una seccon en este caso la llame SV4 asociada a una base "cursos", con su usuario y clave (root y su clave)

luego en la procedure estableces la coneccion y trabajas con todas aquellas
posiblidades que te brindo josber con comandos sql

al finalizar el programas te desconectas

Hrmcobol 26 de febrero de 2016 14:56

Estimados, ante todo gracias por vuestra colaboración.
Ya he logrado leer y agregar registros a la tabla.
Aprendí la conexión Odbc/Cobol85/Sql.Inf
Ahora lo que quiero hacer es crear una tabla nueva con la instrucción CREATE TABLE, como se imaginaran copie el código del post que puso Josber, cuando compilo me da el siguiente error:
ART00101 CbLeer1-Click(20) : JMN2633I-S The SQL statement is invalid. ODBC-7600E NOT EXECUTABLE SQL STATEMENT..
Aparentemente el error es que " Create Table" no esta soportado.
Alguna idea?
Saludos

Les adjunto el código que escribí

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  
  5.      EXEC SQL BEGIN DECLARE SECTION END-EXEC.
  6.  
  7.  01 SQLSTATE        PIC  X(005).
  8.  
  9.      EXEC SQL END DECLARE SECTION END-EXEC.
  10.  
  11.  PROCEDURE DIVISION.
  12.  
  13.      EXEC SQL CONNECT TO 'maestro' END-EXEC.  *> Maestro es el nombre de la ODBC
  14.  
  15.         EXEC SQL
  16.         CREATE TABLE IF NOT EXIST 'gastos' (
  17.                 'ID_GAS'    int   (011) unsigned          NOT NULL AUTO_INCREMENT,
  18.                 'GASLIB'    varchar (004)               DEFAULT NULL,
  19.                 'GASFEC'    varchar (008)               DEFAULT NULL,
  20.                 'GASDES'    varchar (060)               DEFAULT NULL,
  21.                 'GASELI'    varchar (001)               DEFAULT NULL,
  22.             UNIQUE KEY ('ID_GAS')) ENGINE=InnoDB DEFAULT CHARSET=latin1
  23.         END-EXEC      
  24.  
  25.      IF  sqlstate not = "00000" INVOKE POW-SELF "DisplayMessage" USING sqlstate "Error".
  26.  
  27.      EXEC SQL DISCONNECT 'maestro'  END-EXEC.

Xavier 26 de febrero de 2016 18:41

Hola Hrm
Creo haber leído en algún sitio, ahora no recuerdo donde, que desde el SQL embebido solo puedes hacer uso del lenguaje DML (Data Manipulation Laguaje) que es que estáis comentando aquí, pero no puedes hacer uso del DDL (Data Definition Laguaje) que es el que sirve para definir objetos en la base de datos (Tablas, Vistas, etc.)

Hrmcobol 27 de febrero de 2016 19:06

Gracias Xavier. Estoy leyendo el manual un poco mas detenidamente y aparentemente es así como tu dices.

Entonces la pregunta es: No se pueden usar "Alter" y "Create" en PWC ?

Saludos

Josber 29 de febrero de 2016 11:04

A ver yo la creación y modificación de tablas la hago a través del gestor de MySql, nunca lo he probado a través de PWC, pero por lo que he estado leyendo en otros sitios, no se puede, según parece, la única manera de hacerlo, sería atraves de los controles ADO, pero no lo he hecho nunca y no tengo ni idea de como funcionan. El resto de instrucciones que he puesto, si están probadas por mi y funcionan perfectamente.

Un saludo.-

Rapinto 1 de marzo de 2016 00:59

Hrmcobol,

Fiz há algum tempo atras um software para transferir ficheiros de PowerCobol para uma base de dados de um site na Internet.
Está tudo feito em PowerCobol V9.0, cria as tabelas no SQL do site, apaga as tabelas também, e escreve e le dados, tudo através duma ligação á Internet.
Não utiliza ODBC, faz a ligação direta á base de dados.
A única diferença é que utilizei tudo, através de comandos COM/OLE2 e o ADO.

Código COBOL:
  1. INVOKE COM "CREATE-OBJECT" USING ADO-CONNECTION-TYPE RETURNING OBJ-CONNECTION.
  2. INVOKE COM "CREATE-OBJECT" USING ADO-COMMAND-TYPE RETURNING OBJ-COMMAND.
  3. INVOKE COM "CREATE-OBJECT" USING ADO-RECORDSET-TYPE  RETURNING OBJ-RECORDSET(1).
  4. **
  5. ***  DEFINE AND OPEN CONNECTION
  6. **
  7. INITIALIZE ADO-CONNECT-STRING.
  8. STRING  
  9.              "Driver="   ADO-DRIVER   DELIMITED BY ";"  "; " DELIMITED BY SIZE
  10.              "Server="   ADO-SERVER   DELIMITED BY ";"  "; " DELIMITED BY SIZE
  11.              "Port="     ADO-PORT     DELIMITED BY ";"  "; " DELIMITED BY SIZE
  12.              "UID="      ADO-UID      DELIMITED BY ";"  "; " DELIMITED BY SIZE
  13.              "PWD="      ADO-PWD      DELIMITED BY ";"  "; " DELIMITED BY SIZE
  14.              "CHARSET="  ADO-CHARSET  DELIMITED BY ";"  "; " DELIMITED BY SIZE
  15.              "DATABASE=" ADO-DATABASE DELIMITED BY ";"  
  16.              "; "                     DELIMITED BY SIZE
  17.                       INTO ADO-CONNECT-STRING.
  18. *
  19.  MAIN-05.
  20. *   MOVE "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\RPS13_SRC\RPSFtsEIbd\Database5.accdb;Jet OLEDB:Database;" TO ADO-CONNECT-STRING.
  21. *
  22.     MOVE "SETCONNECTIONSTRING "  TO INSTRUCAO.
  23. *
  24. INVOKE OBJ-CONNECTION "SET-CONNECTIONSTRING" USING ADO-CONNECT-STRING RETURNING RETURN-ERROR.
  25. IF RETURN-ERROR NOT = 0  DISPLAY "ERRO: CONNECTION STRING" STOP " " GO TO MAIN-99-EXIT.
  26. *
  27. MOVE "OPEN CONNECTION" TO INSTRUCAO.
  28. INVOKE OBJ-CONNECTION "OPEN"     RETURNING RETURN-ERROR.
  29. IF RETURN-ERROR NOT = 0  DISPLAY "ERRO:OPEN CONNECTION"  STOP " "   GO TO MAIN-99-EXIT.
  30. *


Já subi, algum tempo atrás, para o foro um exemplo de como ligar por esse processo e ler dados da base de dados. --> Base de Dados DBF por OLE2
Se estiveres interessado na utilização de COM/OLE2, poderei dar-te uma ajuda, com um pequeno exemplo.

Un saludo,
Rui Pinto

Hrmcobol 2 de marzo de 2016 13:42

Gracias Rapinto. Como Siempre Usted Con La Respuesta. Esto es demasiado para mi, nunca trabaje ni vi nada con ADO. El tema de crear y modificar tablas era solo una sutileza que quería hacer.
Lo dejare para mas adelante.
Saludos !!

Kuk 14 de junio de 2017 09:28

Josber, y otros amigos del foro. ¿Utilizáis un precompilador particular de la BBDD o el que viene con NetCOBOL? Y también, ¿cómo incluís la SQLCA, con COPY o con EXEC SQL INCLUDE?

Josber 14 de junio de 2017 20:58

Cita:

Citación del post de Kuk (Mensaje 3156)
Josber, y otros amigos del foro. ¿Utilizáis un precompilador particular de la BBDD o el que viene con NetCOBOL? Y también, ¿cómo incluís la SQLCA, con COPY o con EXEC SQL INCLUDE?


Yo utilizo el que viene con Netcobol incluido, en cuanto a lo otro, no caigo ahora en qué es

Un saludo.-c

Kuk 14 de junio de 2017 21:53

Josber, lo otro es una tontería, debe ser EXEC SQL INCLUDE, se me ha ido la fresa a la hora de preguntarlo ;)

dmosca 22 de junio de 2017 17:54

sql embebido
 
Buen dia

sigo sin poder conectar Powercobol con Mysql

por favor si tienen unos minutos para explicar el contenido de COBOL85.cbr y BD.inf

Josber 22 de junio de 2017 20:58

dmosca, a ver lo principal es que, no sé si será tu caso, pero si tienes los ejecutables en un directorio distinto a los fuentes, no te funcionará, para que funcione, tienes que cambiarlo en el proyecto.

En el fichero COBOL85.CBR, has de poner una línea más o menos así, (puedes hacerlo con el Notepad, que funciona igual):

@ODBC_Inf=C:\Tiras y Cordones\bd.inf

El fichero .inf, en mi caso BD.inf, has de crearlo con la utilidad SQLODBCS, para ello, antes tienes que haber creado el conector ODBC, desde el panel de control de windows. Una vez creado el ODBC, es tan sencillo como abrir la utilidad que te he dicho, darle al botón de buscar en la primera pantalla, (Browse), selccionas la carpeta donde quieres guardar el archivo .inf, en esa carpeta pones el nombre que quieres darle al archivo y te preguntará si quieres crear uno nuevo, le dices que sí y entras en la pantalla de configuración.

- En Server Name, pones el nombre que quieras, pero ten en cuenta que, el nombre que pongas ahí, va a ser el que uses en tu programa POWER COBOL, por ejemplo para abrir la BD. (EXEC SQL CONNECT TO nombre END EXEC.)
- Marca la opción Machine Data Source
- En Data Source Name, abres el desplegable, y te aparecerá la conexión ODBC que tengas hecha, la seleccionas.
- En User ID, pones el nombre del usuario autorizado para acceder a la BD, si no tienes ninguno, será root
- En Password, pones la contraseña de ese usuario.
- En Comment, no hace falta que pongas nada si no quieres
- En Access Mode, marcas la opción de Read/Write
- En COMMIT MODE, depende de como lo tengas definidio en MySQL, si es AUTO o NO

El resto de opciones, no me ha hecho falta nunca modificarlas, le das a aceptar y listo, te crea el archivo .inf y a funcionar.

Si tienes mas problemas, no dudes en consultar.

Un saludo.-

dmosca 23 de junio de 2017 03:11

ok
 
Josber

pude consultar la base, muchas gracias

Joseg 23 de junio de 2017 10:21

Numa instalação em rede (local network), existe alguma forma de automatizar a criação do DNS?
O objetivo era não ter que ir a cada maquina para criar manualmente a ligação de ODBC.

Gracias
Jose

Josber 23 de junio de 2017 13:35

Cita:

Citación del post de Joseg (Mensaje 3193)
Numa instalação em rede (local network), existe alguma forma de automatizar a criação do DNS?
O objetivo era não ter que ir a cada maquina para criar manualmente a ligação de ODBC.

Gracias
Jose

Yo no le he probado, siempre he creado los ODBC a mano, pero algo así debería funcionar:

- Creas un archivo con extensión .reg, por ejemplo conexión.reg, con los siguientes valores:

Código:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI\BD]
"Driver"="MariaDB ODBC 3.0 Driver"
"DESCRIPTION"="Tiras y Cordones"
"OPTIONS"="4194304"
"TCPIP"="1"
"SERVER"="127.0.0.1"
"UID"=nombre_de_usuario
"PWD"=contraseña_de_usuario
"DATABASE"=nombre_base_de_datos
"PORT"="3306"
"CONN_TIMEOUT"="0"
"CHARSET"="utf8"
"SSLVERIFY"="0"

Una vez grabado, con la siguiente instrucción desde la linea de comandos, debería de crearlo:

REG IMPORT [unidad/ruta]nombre_archivo.reg

Si en vez de querer crear el DSN por usuario, quieres crearlo por máquina, tienes que cambiar en el archivo .reg

HKEY_CURRENT_USER por HKEY_LOCAL_MACHINE

Si lo pruebas, comenta el resultado

Un saludo.-

dmosca 24 de junio de 2017 02:41

Rapinto, buenas tardes.

tienes el ejemplo de como acceder bdl con ADO?

pude conectar y leer una base .mdb, pero necesito conectar a MySql.

si puedes compartir el ejemplo para ver como conectar POWERCOBOL V9 a Mysql con COM/OLE2

muchas gracias

Joseg 26 de junio de 2017 11:32

Cita:

Citación del post de Josber (Mensaje 3194)
Yo no le he probado, siempre he creado los ODBC a mano, pero algo así debería funcionar:

- Creas un archivo con extensión .reg, por ejemplo conexión.reg, con los siguientes valores:

Código:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI\BD]
"Driver"="MariaDB ODBC 3.0 Driver"
"DESCRIPTION"="Tiras y Cordones"
"OPTIONS"="4194304"
"TCPIP"="1"
"SERVER"="127.0.0.1"
"UID"=nombre_de_usuario
"PWD"=contraseña_de_usuario
"DATABASE"=nombre_base_de_datos
"PORT"="3306"
"CONN_TIMEOUT"="0"
"CHARSET"="utf8"
"SSLVERIFY"="0"

Una vez grabado, con la siguiente instrucción desde la linea de comandos, debería de crearlo:

REG IMPORT [unidad/ruta]nombre_archivo.reg

Si en vez de querer crear el DSN por usuario, quieres crearlo por máquina, tienes que cambiar en el archivo .reg

HKEY_CURRENT_USER por HKEY_LOCAL_MACHINE

Si lo pruebas, comenta el resultado

Un saludo.-


Não consigo adicionar o registo :( mas deve ser algo parecido.

Gracias

---------- Post añadido : 10:32 ---------- Post anterior : 10:19 ----------

Cita:

Citación del post de Joseg (Mensaje 3209)
Não consigo adicionar o registo :( mas deve ser algo parecido.

Gracias


Encontrei esta forma e funciona bem (command-line):

Add-OdbcDsn
ou
ODBCCONF.EXE (vai ser descontinuado pela Microsoft)

Mysql tem esta opção: myodbc-installer.exe (MariaDB não encontrei esta possibilidade)

Desta forma é possivel automatizar todo um setup

Rapinto 28 de junio de 2017 01:09

DMOSCA,

Não sei se é isto que pretendes:

Código:

DRIVER={MySQL ODBC 5.3 ANSI Driver}
SERVER=db4free.net
PORT=03306
UID=rpsuser
PWD=teste1234
CHARSET=utf8
DATABASE=dbrps

Tens que alterar o SERVER para o nome correto.
Tens que alterar a PORT para o numero de porta certo
Tens que alterar o UID para o nome do usuário
Altera a PWD para a password correta.
Altera DATABASE para o nome correto da base de dados.

Na Working-Storage

Código COBOL:
  1.  01  BDVARIABLES GLOBAL.
  2.     05  ADO-CONNECTION-TYPE         PIC X(8192) VALUE "ADODB.Connection".  
  3.     05  ADO-RECORDSET-TYPE          PIC X(8192) VALUE "ADODB.Recordset".  
  4.     05  ADO-COMMAND-TYPE            PIC X(8192) VALUE "ADODB.Command".  
  5.     05  OBJ-CONNECTION           OBJECT REFERENCE COM .
  6.     05  OBJ-RECORDSET            OBJECT REFERENCE COM  OCCURS 10.
  7.     05  OBJ-RECORDSETSCHEMA      OBJECT REFERENCE COM.
  8.     05  OBJ-COMMAND              OBJECT REFERENCE COM.
  9. *
  10.     05  OBJ-FIELD                OBJECT REFERENCE COM OCCURS 50.
  11.     05  OBJ-FIELDS               OBJECT REFERENCE COM.
  12. *
  13.     05  OBJ-FIELDS-COUNT            PIC S9(9) COMP-5 VALUE 0.
  14.     05  RECORDCOUNT                 PIC S9(9) COMP-5 VALUE 0.
  15.     05  NUMBER-FIELD                PIC S9(9)V9(9)  VALUE 0.
  16.     05  NUMBER-FIELD-EDT            PIC -(10).9(9).
  17.     05  ALPHA-FIELD                 PIC X(200).
  18.     05  RETURN-ERROR                PIC 9(9) COMP-5.
  19. *
  20.     05  ADO-SQL-CMDTEXT   PIC 9(9) COMP-5 VALUE 1.
  21.     05  WLOCK                       PIC S9(9) COMP-5 VALUE 1.
  22.     05  WCURSOR                     PIC S9(9) COMP-5 VALUE 1.
  23.     05  WOPTION                     PIC S9(9) COMP-5 VALUE -1.
  24.     05  W-INDEX                     PIC 99.
  25.     05  W-INDEX-1                   PIC 99.
  26.     05  EOF                         PIC S9(9) COMP-5.
  27.     05  BOF                         PIC S9(9) COMP-5.

e para abrir:

Código COBOL:
  1. **
  2. ***   CREATE OBJECTS NEEDED
  3. **
  4.     INVOKE COM "CREATE-OBJECT" USING ADO-CONNECTION-TYPE
  5.                                      RETURNING OBJ-CONNECTION.
  6.     INVOKE COM "CREATE-OBJECT" USING ADO-COMMAND-TYPE
  7.                                      RETURNING OBJ-COMMAND.
  8.     INVOKE COM "CREATE-OBJECT" USING ADO-RECORDSET-TYPE
  9.             RETURNING OBJ-RECORDSET(1).
  10. **
  11. ***  DEFINE AND OPEN CONNECTION
  12. **
  13.     INITIALIZE ADO-CONNECT-STRING.
  14.     STRING  
  15.              "Driver="   ADO-DRIVER   DELIMITED BY ";"  "; " DELIMITED BY SIZE
  16.              "Server="   ADO-SERVER   DELIMITED BY ";"  "; " DELIMITED BY SIZE
  17.              "Port="     ADO-PORT     DELIMITED BY ";"  "; " DELIMITED BY SIZE
  18.              "UID="      ADO-UID      DELIMITED BY ";"  "; " DELIMITED BY SIZE
  19.              "PWD="      ADO-PWD      DELIMITED BY ";"  "; " DELIMITED BY SIZE
  20.              "CHARSET="  ADO-CHARSET  DELIMITED BY ";"  "; " DELIMITED BY SIZE
  21.              "DATABASE=" ADO-DATABASE DELIMITED BY ";"  
  22.              "; "                     DELIMITED BY SIZE
  23.                       INTO ADO-CONNECT-STRING.
  24. *
  25.  MAIN-05.
  26.  
  27.     INVOKE OBJ-CONNECTION "SET-CONNECTIONSTRING" USING ADO-CONNECT-STRING RETURNING RETURN-ERROR.
  28.     IF RETURN-ERROR NOT = 0  DISPLAY "ERRO: CONNECTION STRING" STOP " " GO TO MAIN-99-EXIT.
  29. *
  30.     INVOKE OBJ-CONNECTION "OPEN"     RETURNING RETURN-ERROR.
  31.     IF RETURN-ERROR NOT = 0  DISPLAY "ERRO:OPEN CONNECTION"  STOP " "   GO TO MAIN-99-EXIT.

Não sei se isto ajuda alguma coisa.

Saludos,
Rui Pinto


La franja horaria es GMT +2. Ahora son las 15:21.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.