Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Fujitsu COBOL PowerCOBOL (ActiveX, v4 - v11)
PowerCOBOL (ActiveX, v4 - v11) Versiones del IDE basadas en ActiveX
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Compilador] Aplicacion CURD conectar servidor de MariaDB nbiker GnuCOBOL (OpenCOBOL) 8 30 de diciembre de 2024 15:48
[Compilador] Acesso direto Fujitsu Cobol / MariaDB/ MySql Joseg PowerCOBOL (ActiveX, v4 - v11) 2 1 de octubre de 2024 15:35
[Sintaxis] Consulta sobre Function Key drvedia1981 PowerCOBOL (ActiveX, v4 - v11) 5 11 de mayo de 2022 19:53
[Componente] Aplicación en PWC9 lenta en Windows Server 2016 JuanJuan77 PowerCOBOL (ActiveX, v4 - v11) 3 8 de octubre de 2018 19:44
[Sintaxis] Error sintaxis ADODB Mariadb variables host dmosca PowerCOBOL (ActiveX, v4 - v11) 17 29 de julio de 2017 00:19

Respuesta
 
Herramientas

  #11
Antiguo 11 de junio de 2024, 22:13
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Josber, es raro que te funcione con UTF8.... Por cierto cómo accedes a la base, vía SQL embebido o el AdoDB?

Estoy mirando unos pequeños ejemplos de hace años cuando el asunto no fue más allá de unos tests (yo siempre he usado ficheros indexados) y me está petando por todas partes


Acabo de hacer la prueba y a mi con el Power 10.1, el RCS=ASCII y la DB en latin1_general_ci me funciona todo.... Algo debe estar mal con tu BBDD



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #12
Antiguo 12 de junio de 2024, 11:20
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

Uso SQL Embebido, quería haber usado ADO pero, no he encontrado ningún ejemplo claro de cómo hacer las cosas, lo poquito que hay por el foro, no me ha aclarado nada y los ejemplos de PWC, aún menos

Aprovecho por si alguien tiene la "bondad", sólo necesito de ADO, un ejemplo claro, bien explicado y sencillo de:

Código:
 - Un OPEN
 - SELECT ...
 - SELECT con FETCH
 - INSERT INTO ...
 - UPDATE SET ...
y poquito más, no me importa en éstos momentos del proyecto, cambiar a ADO, y si no me da problemas, ya ni te cuento, así es que, si hay algún alma caritativa, que quiera perder un poquito de su tiempo, haciendo el ejemplo, se lo agradecería en el alma.

Un salu2.-
Josber is offline   Responder Con Cita
  #13
Antiguo 12 de junio de 2024, 12:57
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Josber, yo creo que la mejor opción sería pasar por el OCX que facilitó @Nitzer, que por lo visto es una maravilla: https://www.cobolforo.es/showthread....ara-SQL-nativo



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #14
Antiguo 12 de junio de 2024, 13:01
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

Anda, es verdad, no me acordaba, éste finde lo pruebo.

Gracias.-
Josber is offline   Responder Con Cita
  #15
Antiguo 12 de junio de 2024, 17:45
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 19.09.2026 13:19
Posts Posts: 458
Likes enviados Enviados: 267
Likes recibidos Recibidos: 243

Hola Amigos:

Yo tengo unos procesos que suben info desde mis archivos cobol a un SQL Server. Lo hacía con ADO y Power 8. Más o menos como un ejemplo que puse acá hace mucho. El tema con ADO es que hay que programar mucho, asimismo no he tenido problemas, solamente hice volcado de datos hacia la BBDD, usé DROP TABLE, CREATE TABLE e INSERT.

Por ahora solamente he necesitado hacer volcado de grandes cantidades de datos. Nada de un trabajo interactico con la BBDD como ABMs y Listados.

Ahora para un nuevo cliente que tenía que hacer la misma tarea, me puse a probar el ocx de Andres. Pero repito, solamente volcado de datos, así que usé solamente el comando EXECUTE pasando ahí el string con el comando. Y funciona de maravilla.

Ya con más tiempo voy a empezar a usarlo "profesionalmente", para decirlo de alguna manera.

Lo único que no maneja transacciones, que es algo que me interesaría mucho. Tendría que ver si con el comando EXECUTE se podría hacer. Pero es todo para investigar y probar.

Lo que sí que para poder hacer cosas con ese ocx lo veo realmente muy sencillo.

Saludos.

Fito...
Fito is offline   Responder Con Cita
  #16
Antiguo 12 de junio de 2024, 21:03
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

¿Alguien podría subir varios ejemplos?, porque lo estoy intentando usar, pero no consigo nada, no sé ni siquiera si se conecta bien a la BD, (es a través de ODBC),, ejemplos con conexión a la BD, contar registros, (que en mis pruebas, siempre me da 0), etc. las cosas normales que se hacen con una BD y también, muy importante, el tema de controlar los errores, lo que explica Andrés, (nuestro estimado @Nitzer), de la opción DIAGNOTICRECORD, que supongo que será parecido a SQLMSG, pero que no hay manera.

Me haría un gran favor, ahora que me he decidido a pasar del SQL EMBEBIDO ..

Muchas gracias
Josber is offline   Responder Con Cita
  #17
Antiguo 12 de junio de 2024, 21:35
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 19.09.2026 13:19
Posts Posts: 458
Likes enviados Enviados: 267
Likes recibidos Recibidos: 243

Hola:

Acá paso el código de lo que dije anteriormente. Necesito exportar a una BBDD los datos de artículos, en este caso. Para eso creo un archivo .CSV y con la instrucción BULK INSERT de Sql Server lo importo.

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  
  3.  input-output section.
  4.  file-control.
  5.      select optional archivo-csv assign to "C:\ARTI.CSV"
  6.         organization is line sequential.
  7.      
  8.  DATA            DIVISION.
  9.  file section.
  10.  fd  archivo-csv label records standard.
  11.  01  reg-csv     pic x(280).
  12.  
  13.  WORKING-STORAGE SECTION.
  14.  
  15.  01  registro.
  16.      02 csv-articulo     pic z(6).
  17.      02                  pic x value ";".
  18.      02 csv-denominacion pic x(100).
  19.      02                  pic x value ";".
  20.      02 csv-rubro        pic x(35).
  21.      02                  pic x value ";".
  22.      02 csv-cant-uni     pic zzzz9,999.
  23.      02                  pic x value ";".
  24.      02 csv-faccionado   pic xx.
  25.      02                  pic x value ";".
  26.      02 csv-kgfle        pic zzzz9,999.
  27.      02                  pic x value ";".
  28.      02 csv-porcaja      pic zzzz9,999.
  29.      02                  pic x value ";".
  30.      02 csv-porpallet    pic zzzz9,999.
  31.      02                  pic x value ";".
  32.      02 csv-desprom      pic zzzz9,999.
  33.      02                  pic x value ";".
  34.      02 csv-hasprom      pic zzzz9,999.
  35.      02                  pic x value ";".
  36.      02 csv-asociado     pic z(6).
  37.      02                  pic x value ";".
  38.      02 csv-suspendido   pic xx.
  39.      02                  pic x value ";".
  40.      02 csv-preciolibre  pic xx.
  41.      02                  pic x value ";".
  42.      02 csv-costo        pic z(9)9,99.
  43.      02                  pic x value ";".
  44.      02 csv-cosfec       pic x(10).
  45.      02                  pic x value ";".
  46.      02 csv-publico      pic z(9)9,99.
  47.      02                  pic x value ";".
  48.      02 csv-mayor        pic z(9)9,99.
  49.      02                  pic x value ";".
  50.      02 csv-iva          pic z9,99.
  51.      
  52.  01  wfraccionado        pic xx.
  53.  01  wprelibre           pic xx.
  54.  01  wsus                pic xx.
  55.  01  wcosto              pic 9(12)v99.
  56.  01  xfecha              pic 9999/99/99.
  57.  01  redefines xfecha.
  58.      02 wfecha           pic x(10).
  59.  01  wpublico            pic 9(12)v99.
  60.  01  wmayor              pic 9(12)v99.
  61.        
  62.  01 RETORNO      PIC S9(9) COMP-5.
  63.  01 COMANDO      PIC x(4096).
  64.  
  65.  PROCEDURE       DIVISION.
  66.  
  67.  #include "copys\declara-com.cpy".
  68.  
  69.  comienzo.
  70.     *> paso el string de conexión - tengo un origen de datos configurado por ODBC
  71.      move "DSN=POWERBI;UID=sa;PWD=**********"  to "ConnectionString" of BD.
  72.    
  73.      *> conecto a la BBDD
  74.      invoke BD "Connect" returning RETORNO.
  75.    
  76.      *> Elimino la BBDD
  77.      move spaces                   to comando.
  78.      move 'DROP TABLE IF EXISTS dbo."Articulos"'    to comando.
  79.      INVOKE BD "Execute" USING comando RETURNING RETORNO.
  80.  
  81.      *> Creo la BBDD
  82.      move spaces                   to comando.
  83.      string 'CREATE TABLE  dbo."Articulos"'         delimited by size
  84.             ' ( '                                   delimited by size
  85.             'articulo     integer, '                delimited by size
  86.             'denominacion character varying(100), ' delimited by size
  87.             'rubro        character varying(35), '  delimited by size
  88.             'cant_uni     numeric(8,3), '           delimited by size
  89.             'faccionado   character varying(2), '   delimited by size
  90.             'kgfle        numeric(8,3), '           delimited by size
  91.             'porcaja      numeric(8,3), '           delimited by size
  92.             'porpallet    numeric(8,3), '           delimited by size
  93.             'desprom      numeric(8,3), '           delimited by size
  94.             'hasprom      numeric(8,3), '           delimited by size
  95.             'asociado     integer, '                delimited by size
  96.             'suspendido   character varying(2), '   delimited by size
  97.             'preciolibre  character varying(2), '   delimited by size
  98.             'costo        numeric(12,2), '          delimited by size
  99.             'cosfec       date, '                   delimited by size
  100.             'publico      numeric(12,2), '          delimited by size
  101.             'mayor        numeric(12,2), '          delimited by size
  102.             'iva          numeric(5,2) '            delimited by size
  103.             ')'                                     delimited by size
  104.         into comando
  105.      end-string.
  106.      INVOKE BD "Execute" USING comando RETURNING RETORNO.
  107.  
  108.      open input arti nivel output archivo-csv.
  109.  
  110.      move spaces           to reg-csv.
  111.      string 'articulo;'                delimited by size
  112.             'denominacion;'            delimited by size
  113.             'rubro;'                   delimited by size
  114.             'cant_uni; '               delimited by size
  115.             'faccionado; '             delimited by size
  116.             'kgfle; '                  delimited by size
  117.             'porcaja; '                delimited by size
  118.             'porpallet; '              delimited by size
  119.             'desprom; '                delimited by size
  120.             'hasprom; '                delimited by size
  121.             'asociado; '               delimited by size
  122.             'suspendido; '             delimited by size
  123.             'preciolibre; '            delimited by size
  124.             'costo; '                  delimited by size
  125.             'cosfec'                   delimited by size
  126.             'publico'                  delimited by size
  127.             'mayor; '                  delimited by size
  128.             'iva'                      delimited by size
  129.         into reg-csv
  130.      end-string.
  131.      write reg-csv.
  132.      
  133.      initialize artcla.
  134.      start arti key is not < artcla invalid go sale.
  135.      
  136.  leo.
  137.      read arti next at end go sale.
  138.  
  139.      initialize nivcla.
  140.      move artniv1         to nivniv1.
  141.      read nivel invalid move spaces to nivdenom.
  142.      
  143.      if artfracc-s
  144.         move "SI"         to wfraccionado
  145.      else
  146.         move "NO"         to wfraccionado
  147.      end-if.
  148.  
  149.      if artsus-s
  150.         move "SI"         to wsus
  151.      else
  152.         move "NO"         to wsus
  153.      end-if.
  154.      if artpreciolibre-s
  155.         move "SI"         to wprelibre
  156.      else
  157.         move "NO"         to wprelibre
  158.      end-if.
  159.      move artcos          to wcosto.
  160.  
  161.      move artcos-fec      to fecha-amd.
  162.      perform amd-to-dma.
  163.      perform valida-fecha.
  164.      if error-fecha = 1 or artcos-fec = zeros
  165.         move 20000101       to fecha-amd
  166.      end-if  
  167.      move fecha-amd         to xfecha.
  168.      compute wpublico rounded = artpre1 * (1 + artiva-ins / 100).
  169.      compute wmayor   rounded = artpre2 * (1 + artiva-ins / 100).
  170.  
  171.      move articulo          to csv-articulo.
  172.      move artdenom          to csv-denominacion.
  173.      move nivdenom          to csv-rubro.
  174.      move artcant-uni       to csv-cant-uni.
  175.      move wfraccionado      to csv-faccionado.
  176.      move artkgfle          to csv-kgfle.
  177.      move artporcaja        to csv-porcaja.
  178.      move artporpallet      to csv-porpallet.
  179.      move artdesprom        to csv-desprom.
  180.      move zeros             to csv-hasprom.
  181.      move artasociado       to csv-asociado.
  182.      move wsus              to csv-suspendido.
  183.      move wprelibre         to csv-preciolibre.
  184.      move wcosto            to csv-costo.
  185.      move wfecha            to csv-cosfec.
  186.      move wpublico          to csv-publico.
  187.      move wmayor            to csv-mayor.
  188.      move artiva-ins        to csv-iva.
  189.      
  190.      inspect csv-denominacion replacing all ";" by " ".
  191.      inspect csv-rubro        replacing all ";" by " ".
  192.  
  193.      inspect registro         replacing all "," by ".".
  194.  
  195.      write reg-csv from registro.
  196.      
  197.      go leo.
  198.      
  199.  sale.
  200.      close arti nivel.
  201.  
  202.      move spaces            to comando.
  203.      
  204.      string "BULK INSERT dbo.Articulos "
  205.         'FROM "c:\ARTI.CSV" '
  206.         'WITH ( '
  207.         '  FIRSTROW = 2 '
  208.         ", FIELDTERMINATOR = ';' "
  209.         ", ROWTERMINATOR = '0x0a'); "
  210.         DELIMITED BY SIZE INTO comando
  211.      end-string.  
  212.      INVOKE BD "Execute" USING comando RETURNING RETORNO.
  213.      
  214.      INVOKE BD "Disconnect" RETURNING RETORNO.
  215.                
  216.      exit program.

Cuando avance más con esto, voy pasando. Pero el ejemplo que pone Andres en el pdf que pasó, está excelentemente explicado.

Saludos.

Fito...
Fito is offline   Responder Con Cita
  #18
Antiguo 13 de junio de 2024, 12:34
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

Gracias @Fito, no digo que lo que ha puesto @Nitzer no esté bien explicado, (creo que explica muy bien las cosas), lo que digo es que faltan "casos", como por ejemplo, poder leer los errores que da una BD y que devuelve en las variables SQLMSG y SQLSTATE, (por lo menos cuando es SQLEmbebido), y que, según comenta, se gestionan con DIAGNOTICRECORD, pero no dice cómo y es algo muy importante, sobre todo, cuando estás haciendo el programa, te da un error y no sabes exactamente que es, y quizás sea una simple coma olvidada en la instrucción SQL, un paréntesis, una variable mal escrita ..., algún ejemplo más de un COUNT, SELECT, etc, para poder comparar con los otros que tiene puesto, etc.

Un salu2.-
Josber is offline   Responder Con Cita
  #19
Antiguo 13 de junio de 2024, 13:54
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 19.09.2026 13:19
Posts Posts: 458
Likes enviados Enviados: 267
Likes recibidos Recibidos: 243

Holaaa.

Quedé muy impresionado con la instrucción BULK INSERT de SqlServer:

Código COBOL:
  1. Comienzo                   05 00 00 86  13/06/2024                                                                      
  2.  Baja Artículos            05 00 20 85  13/06/2024                                                                      
  3.  Baja CtaCtes              05 00 32 25  13/06/2024                                                                      
  4.  Baja Ventas               05 00 46 32  13/06/2024                                                                      
  5.  Baja Stock                05 02 22 19  13/06/2024        
  6.    Artículos               05 03 06 06  13/06/2024          2.380 registros                                                  
  7.    Clientes                05 03 06 51  13/06/2024         22.801 registros                                                          
  8.    Stock                   05 03 07 14  13/06/2024      2.159.529 registros                                                                
  9.    Ventas                  05 03 24 29  13/06/2024     28.504.015 registros                                                                
  10. Finaliza                   05 07 57 45  13/06/2024                                                                      

Este es el log que genero con el proceso. Fíejnse los tiempos, impresionante. Cuando lo hacía con INSERT uno por uno, tardaba varias horas cargar tantos registros. Tambien tengan en cuenta que dentro de ese tiempo está la generación del archivo CSV, no es sólo la importación.

Lo que si es que ese de Ventas que es más grande solamente me cargaba 3.159.999 registros, no sé si la limitación esa es los registros que puede manejar, o de acuerdo al tamaño del registro, la cantidad de caracteres. Es decir, si en registro fuera más largo, importaría menos lineas. Por eso los estoy subiendo cada tres millones de registros. Esa cantodad de ahi son 10 inserts.

Una maravilla...

Saludos

Fito...
Fito is offline   Responder Con Cita
  #20
Antiguo 13 de junio de 2024, 19:24
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

No sé si es que el OCX no funciona bien con MariaDB, o es que estoy haciéndolo mal, como prueba, estoy haciendo esto desde PWC (versión 9 sobre Win 10, para más info)

Código COBOL:
  1.      STRING 'DRIVER=MARIADB ODBC 3.0 Driver; '
  2.             'Server=localhost; '
  3.             'Port=3306; '
  4.             'Database=braulio; '
  5.             'Uid=*******; '
  6.             'Pwd=*******;' DELIMITED BY SIZE INTO WS_SQL
  7.      END-STRING.
  8.  
  9.      MOVE WS_SQL TO "ConnectionString" OF Bd.
  10.  
  11.      INVOKE Bd "Connect" RETURNING RETORNO.
  12.  
  13.      INITIALIZE WS_SQL.
  14.      MOVE "SELECT COUNT(CLICOD) FROM CLIENTES WHERE CLIELI <> 'S'" TO WS_SQL.
  15.      INVOKE Bd "OpenQuery" USING WS_SQL RETURNING RETORNO.

La conexión, supongo que la hace bien, puesto que si cambio algún parámetro para que sea incorrecta, me abre una ventana pidiendo datos de conexión, según @Nitzer (Andrés), la función OpenQuery, devuelve en RETORNO, el número de registros, sé que el número es 308, (es lo que me da, si hago la consulta directamente a la Bd), pero siempre me devuelve 0, si ésta instrucción no funciona, el resto de funciones, ya me da lo mismo, esta se usa mucho para saber si hay registros con ciertas condiciones.

¿Alguien ve si es que estoy haciendo algo mal?

Mil gracias
Josber is offline   Responder Con Cita
Respuesta



Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:35.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.