Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Duda] Diferencia resultados consulta en MariaDB y PWC9 (https://www.cobolforo.es/showthread.php?t=1773)

Josber 17 de junio de 2024 20:32

Bueno pues, desisto de seguir, como tampoco tengo más ideas del resto de foreros, no voy a perder más tiempo, una desilusión, porque esperaba algo más de otros foreros, (los que me habéis aportado alguna idea o sugerencia, mil gracias, como siempre), continuo con SQLEmbebido y ya veremos por dónde sale la cosa.

Gracias por vuestro tiempo

Kuk 17 de junio de 2024 21:24

@Josber, has probado el OCX de @Nitzer? A ver se asoma y nos da unos ejemplos para el cursor y estas cosas....

Josber 18 de junio de 2024 09:35

@Kuk, sí, sí que lo he probado y para ese OCX es para el que pedía ayuda sobre todo pero, no he tenido suerte, si miras las últimas entradas de éste tema, verás cuáles son los principales problemas que he tenido con ese OCX.

Un salu2.-

fastpho 28 de septiembre de 2024 19:33

mysql mariadb EXTMYSQL ocx
 
Hola @Josber

Me ha surgido la necesidad ahora de tener que conectarme a un servidor apache , con la version Mysql MariaDB
estuve probando Ado de Micro (via odbc) , probe con la EXTMYSQL (directo usando como conector libmysql.dll) que paso @Joseg, con resultados positivos en ambos casos.

Y tambien probe con la ocx que compartio @Nitzer , con buenos resultados tambien te pongo dos ejemplos todo via odbc
Version PowerCobol 5.0

*> Lectura de Cantidad de Registros en la tabla


Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01 RETORNO        PIC S9(9) COMP-5.
  3.  01 sql-comando    pic x(8192).
  4.  01 BD-EMPRESA.
  5.     02 BDIDUSR    PIC 9(09).
  6.     02 BDNOMBRE   PIC X(55).
  7.     02 BDCLAVE    PIC X(255).
  8.  01 Cantidad-Registros PIC S9(9) COMP-5.
  9.  PROCEDURE       DIVISION.
  10.  
  11.      move spaces to sql-comando.
  12.      STRING 'DRIVER={MariaDB ODBC 3.2 Driver};'
  13.             'SERVER=xxxx.com.ar;'
  14.             'Port=3306;'
  15.             'DATABASE=xxxxxxxxxxxxxxx;'
  16.             'UID=xxxxx;'
  17.             'PWD=xxxxxxxxxx;'
  18.              DELIMITED BY SIZE INTO sql-comando
  19.      END-STRING.
  20.     *> conecta
  21.      MOVE sql-comando TO "ConnectionString" OF SqlServer1.    
  22.      invoke SqlServer1 "Connect" returning RETORNO.
  23.      display "    RETORNO db:" , RETORNO.
  24.  
  25.      *> select
  26.      move spaces to sql-comando.
  27.      move "select count(id_empresa) from empresas" to sql-comando.
  28.      INVOKE SqlServer1 "OpenQuery" USING sql-comando RETURNING RETORNO
  29.      display "    RETORNO Execute:" , RETORNO.
  30.    
  31.      
  32.      *> record
  33.      INVOKE SqlServer1 "GETVALUE" USING 1 RETURNING Cantidad-Registros
  34.      DISPLAY "CANTIDAD DE REGISTROS:" , Cantidad-Registros
  35.     *> desconecto
  36.      INVOKE SqlServer1 "Disconnect" RETURNING RETORNO.

*> Select simple

Código COBOL:
  1. WORKING-STORAGE SECTION.
  2.  01 RETORNO        PIC S9(9) COMP-5.
  3.  01 sql-comando    pic x(8192).
  4.  01 BD-EMPRESA.
  5.     02 BDIDUSR    PIC 9(09).
  6.     02 BDNOMBRE   PIC X(55).
  7.     02 BDCLAVE    PIC X(255).
  8.  01 Cantidad-Registros PIC S9(9) COMP-5.
  9.  PROCEDURE       DIVISION.
  10.  
  11.      move spaces to sql-comando.
  12.      STRING 'DRIVER={MariaDB ODBC 3.2 Driver};'
  13.             'SERVER=xxxx.com.ar;'
  14.             'Port=3306;'
  15.             'DATABASE=xxxxxxxxxxxxxxx;'
  16.             'UID=xxxxx;'
  17.             'PWD=xxxxxxxxxx;'
  18.              DELIMITED BY SIZE INTO sql-comando
  19.      END-STRING.
  20.     *> conecta
  21.      MOVE sql-comando TO "ConnectionString" OF SqlServer1.    
  22.      invoke SqlServer1 "Connect" returning RETORNO.
  23.      display "    RETORNO db:" , RETORNO.
  24.  
  25.      *> select
  26.      move spaces to sql-comando.
  27.      move "select Id_empresa , Nombre_empresa , Password_empresa  from empresas" to sql-comando.
  28.      INVOKE SqlServer1 "OpenQuery" USING sql-comando RETURNING RETORNO
  29.      display "    RETORNO Execute:" , RETORNO. *> si es distinto de zeros o -1 error en la select
  30.     *> loop record    
  31.      PERFORM WITH NO LIMIT
  32.  
  33.                  INVOKE SqlServer1 "NEXT" RETURNING RETORNO
  34.                  IF ISEOF OF SqlServer1 = 1 EXIT PERFORM END-IF
  35.      INVOKE SqlServer1 "GETVALUE" USING 1 RETURNING BDIDUSR
  36.      DISPLAY "EMPRESA ID:" , BDIDUSR
  37.      INVOKE SqlServer1 "GETVALUE" USING 2 RETURNING BDNOMBRE
  38.      DISPLAY "NOMBRE:" , BDNOMBRE
  39.      INVOKE SqlServer1 "GETVALUE" USING 3 RETURNING BDCLAVE
  40.      DISPLAY "CLAVE:" , BDCLAVE
  41.      
  42.      END-PERFORM.
  43.    
  44.      
  45.      *> desconecto
  46.      INVOKE SqlServer1 "Disconnect" RETURNING RETORNO.





Saludos ..
Voy a seguir investigando y probando las tres opciones.

fastpho 30 de septiembre de 2024 16:36

Ocx para SQL nativo
 
Probando con el ocx de nitzer , agrego como hacer un Insert y Update

*Update*

Código COBOL:
  1. *> Update
  2.      move spaces to sql-comando.
  3.      MOVE "empresa de prueba nro 23" TO Q-Nombre.
  4.      MOVE "dirección con ñÑ y acentos"       TO Q-Dire.
  5.  
  6.  
  7.  
  8.           STRING
  9.             "UPDATE  empresas SET "  
  10.  
  11.             "Nombre_empresa = "      
  12.             "'"  
  13.             Q-Nombre          
  14.             "'"            
  15.             ","                      
  16.             "Direccion_empresa = "      
  17.             "'"
  18.             Q-Dire
  19.             "'"
  20.             " WHERE id_empresa = 23;"    
  21.             delimited by size
  22.             INTO  sql-comando
  23.          END-STRING.    
  24.      DISPLAY "sql-comando : " , sql-comando(1:400).    
  25.      INVOKE SqlServer1 "Execute" USING sql-comando RETURNING RETORNO.
  26.      display "    RETORNO Execute UPDATE:" , RETORNO. *> si es 0 ERROR , SI ES CORRECTO 1
  27.     *> si hay error en sql-comando dispara el evento con POW-RETCODE = -1 , en POW-RECORD = mensaje de error
  28.     *>
  29.      
  30.      if RETORNO = 1 THEN
  31.         display "UPDATE correcto !!"
  32.      else
  33.         display "UPDATE error !!"
  34.      end-if.    

*Insert*

Código COBOL:
  1. *------------        
  2. *> Insert
  3.  
  4.          MOVE SPACES TO sql-comando.
  5.          MOVE "EMPRESADA MODELO OCX SQL 2232"   TO Q-Nombre.
  6.          MOVE "San Martin 4242"                 TO Q-Dire.
  7.  
  8.           STRING
  9.             "INSERT INTO empresas "  
  10.             "("                      
  11.             "Nombre_empresa"        
  12.             ","                      
  13.             "Direccion_empresa"      
  14.  
  15.             ")"                      
  16.             " VALUES "
  17.            
  18.             "("
  19.            
  20.             QueryEmpresa
  21.  
  22.              ")"
  23.              ';' delimited by size                          
  24.                  INTO sql-comando
  25.          END-STRING.
  26.      DISPLAY "sql-comando : " , sql-comando(1:400).
  27.     *> execute insert
  28.      INVOKE SqlServer1 "Execute" USING sql-comando RETURNING RETORNO.
  29.      display "    RETORNO Execute INSERT:" , RETORNO. *> si es 0 ERROR , SI ES 1 CORRECTO
  30.     *> si hay error en sql-comando dispara el evento con POW-RETCODE = -1 , en POW-RECORD = mensaje de error
  31.     *>
  32.  
  33.      if RETORNO = 1 THEN
  34.         display "insert correcto !!"
  35.      else
  36.         display "insert error !!"
  37.      end-if.
  38.      
  39.  
Saludos...

Josber 1 de octubre de 2024 10:30

Gracias @fastpho pero, entre otras cosas, me sigue faltando, por ejemplo, el saber porqué ha dado fallo, (si es porque hay un fallo en la construcción de la sentencia, si es porque no hay más registros, etc.), es el valor que se devuelve automáticamente en la variable SQLSTATE cuando es SQL Embebido

Un salu2.-

fastpho 1 de octubre de 2024 13:09

Ocx para SQL nativo
 
@Josber lo que podido comprobar como dice en el manual , es que en el Evento “DiagnoticRecord” se dispara si hay algún error en las sentencias
Por Ejemplo deliberadamente puse una dato mal en la propiedad “ConnectionString” me trajo:

Código COBOL:
  1. POW-RETCODE = - 1 Error POW-RETCODE = 0 Ok
  2. POW-RECORD = No se encuentra el  nombre origen de los datos ….. (muestra exactamente cual fue el error detalladamente)
  3. RETORNO = ZEROS
  4.  si está mal armada muestra un “string” con los errores y -1

Con respecto al RETORNO solamente para los métodos ,por las pruebas que hice , tiene 3 valores 0 , -1 , 1
Código COBOL:
  1. RETORNO = 0  no hizo ningún cambio para “UPDATE” por ejemplo
  2. RETORNO = 1 realizo el cambio
  3. RETORNO = -1 Error
Por ahi @Fito , pudo avanzar en algo y nos da alguna otra apreciación
Voy a seguir probando

Saludos...

Fito 2 de octubre de 2024 03:33

Hola Gente:

Yo estoy usando el ocx de Andrés para hacer insert en unas tablas Sql Server. Anda a la perfección.

En el evento "DiagnosticRecord" grabo un log con los errores.

El Returning del invoke donde llamamos a los métodos del objeto, tengo entendido que revuelve error si el método no se puede realizar. En cambio en el "DiagnosticRecord" devuelve el error de la instruccion que enviamos.

Por ejemplo su realizamos un "Execute" con un Insert adentro. El Returning devuelve el error del método Execute y el evento DiagnosticRecord el error del Insert.

Saludos...

Fito...


La franja horaria es GMT +2. Ahora son las 17:05.

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