Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   Cocina PowerCOBOL (https://www.cobolforo.es/forumdisplay.php?f=24)
-   -   [PowerCOBOL] Ejemplo PWC y SQL Embebido (https://www.cobolforo.es/showthread.php?t=263)

Josber 9 de noviembre de 2015 10:50

Ejemplo PWC y SQL Embebido
 
2 Archivos Adjunto(s)
Aquí tenéis un pequeño ejemplo de como utilizar PWC y MySQL

Entorno: PWC9,(aunque lo más seguro es que en PWC7 funcione)
Tipo: Ejecutable
Contenido: Ejecutable, Proyecto, Iconos y BMP
Otros: Se incluye archivo COBOL85.cbr y BD.inf

Consideraciones:
  • Antes de ejecutar, hay que modificar los archivos COBOL85.cbr y BD.inf, para que se ajuste a los parámetros de cada uno.
  • Si alguien tiene una manera mejor de hacerlo, que la diga, que estoy abierto a toda sugerencia.

No estoy muy ducho aún en SQL embebido, pero ... poco a poco :silba::silba:

Un saludo.-

Rapinto 12 de noviembre de 2015 23:42

Josber,
Tentei correr o teu programa de exemplo de SQL Embebido e dá erro.
Onde está indicada a ligação à BDados???
É por ODBC??

Queria experimentar com SQL Server.

Un Saludo,
Rui

Josber 13 de noviembre de 2015 07:52

Cita:

Citación del post de Rapinto (Mensaje 1226)
É por ODBC??

Si Rui, através de ODBC de SQL

Un saludo.-

Dasije 13 de noviembre de 2015 11:04

Utilizar el control ADO, funciona como SQL integrado, y puedes mover valores como otro control de powercobol, y además puedes utilizar OLE-DB sin OBDC por medio mediante string de conexión.

Josber 13 de noviembre de 2015 12:39

Cita:

Citación del post de Dasije (Mensaje 1229)
Utilizar el control ADO, funciona como SQL integrado, y puedes mover valores como otro control de powercobol, y además puedes utilizar OLE-DB sin OBDC por medio mediante string de conexión.

No lo he usado nunca, ¿podrías poner un ejemplo?

Un saludo.-

Dasije 14 de noviembre de 2015 13:15

Working:

Código COBOL:
  1. 01 CONTROL-ADO-3A OBJECT REFERENCE POW-COBJECT.

Procedure:

Código COBOL:
  1. MOVE SPACES TO CONEXION-ADO
  2. STRING "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
  3.            WST-ARCHIVO-MBD(1:WST-TAMANO-VARIABLE)
  4.            ";Mode=ReadWrite;Persist Security Info=False"
  5.            DELIMITED BY SIZE INTO CONEXION-ADO
  6. MOVE CONEXION-ADO TO "ConnectionString" OF ADO-HYDRA-CABECERA
  7. MOVE SPACES TO SQL-CONDICION
  8. STRING "SELECT * FROM cabecera"
  9.            " WHERE d_fecha BETWEEN FORMAT('" WST-FECAX-INICIO "', 'yyyy/mm/dd')"
  10.            " AND FORMAT('" WST-FECAX-FINAL "', 'yyyy/mm/dd')"
  11.            " ORDER BY d_fecha ASC"
  12.            DELIMITED BY SIZE INTO SQL-CONDICION
  13. MOVE SQL-CONDICION TO "CommandText" OF ADO-HYDRA-CABECERA
  14. INVOKE ADO-HYDRA-CABECERA "SETREF-Recordset" USING CONTROL-ADO-3A
  15. IF "RecordCount" OF "Recordset" OF ADO-HYDRA-CABECERA NOT = ZEROS
  16.     MOVE "RecordCount" OF "Recordset" OF ADO-HYDRA-CABECERA TO WST-REGISTROS
  17.     INVOKE "Recordset" OF ADO-HYDRA-CABECERA "MoveFirst"
  18.     PERFORM WITH NO LIMIT
  19.                  IF "EOF" OF "Recordset" OF ADO-HYDRA-CABECERA NOT = POW-FALSE
  20.                      EXIT PERFORM
  21.                  END-IF
  22.                  MOVE "Value" OF "Item"(6) OF "Fields" OF "Recordset" OF ADO-HYDRA-CABECERA TO WST-CAMPO-IMPORTES
  23.  
  24.                  ...........
  25.  
  26.                  MOVE WST-PRECIO-F TO "Value" OF "Item"(34) OF "Fields" OF "Recordset" OF ADO-HYDRA-CABECERA
  27.                  INVOKE "Recordset" OF ADO-HYDRA-CABECERA "Update"
  28.                  INVOKE "Recordset" OF ADO-HYDRA-CABECERA "MoveNext"
  29.     END-PERFORM.

El número de item partenece al número de columna que corresponde en el orden de la consulta empezando desde el 0 que sería la primera.

En SQL Server, se puede poner el nombre del campo entre comillas, así dejas de usar el número de item.

http://www.connectionstrings.com

Aquí puedes mirar los strings de conexión disponibles de todos los motores de base de datos.

Saludos.

Joseg 4 de mayo de 2016 10:52

Cita:

Citación del post de Dasije (Mensaje 1237)
Working:

Código COBOL:
  1. 01 CONTROL-ADO-3A OBJECT REFERENCE POW-COBJECT.

Procedure:

Código COBOL:
  1. MOVE SPACES TO CONEXION-ADO
  2. STRING "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
  3.            WST-ARCHIVO-MBD(1:WST-TAMANO-VARIABLE)
  4.            ";Mode=ReadWrite;Persist Security Info=False"
  5.            DELIMITED BY SIZE INTO CONEXION-ADO
  6. MOVE CONEXION-ADO TO "ConnectionString" OF ADO-HYDRA-CABECERA
  7. MOVE SPACES TO SQL-CONDICION
  8. STRING "SELECT * FROM cabecera"
  9.            " WHERE d_fecha BETWEEN FORMAT('" WST-FECAX-INICIO "', 'yyyy/mm/dd')"
  10.            " AND FORMAT('" WST-FECAX-FINAL "', 'yyyy/mm/dd')"
  11.            " ORDER BY d_fecha ASC"
  12.            DELIMITED BY SIZE INTO SQL-CONDICION
  13. MOVE SQL-CONDICION TO "CommandText" OF ADO-HYDRA-CABECERA
  14. INVOKE ADO-HYDRA-CABECERA "SETREF-Recordset" USING CONTROL-ADO-3A
  15. IF "RecordCount" OF "Recordset" OF ADO-HYDRA-CABECERA NOT = ZEROS
  16.     MOVE "RecordCount" OF "Recordset" OF ADO-HYDRA-CABECERA TO WST-REGISTROS
  17.     INVOKE "Recordset" OF ADO-HYDRA-CABECERA "MoveFirst"
  18.     PERFORM WITH NO LIMIT
  19.                  IF "EOF" OF "Recordset" OF ADO-HYDRA-CABECERA NOT = POW-FALSE
  20.                      EXIT PERFORM
  21.                  END-IF
  22.                  MOVE "Value" OF "Item"(6) OF "Fields" OF "Recordset" OF ADO-HYDRA-CABECERA TO WST-CAMPO-IMPORTES
  23.  
  24.                  ...........
  25.  
  26.                  MOVE WST-PRECIO-F TO "Value" OF "Item"(34) OF "Fields" OF "Recordset" OF ADO-HYDRA-CABECERA
  27.                  INVOKE "Recordset" OF ADO-HYDRA-CABECERA "Update"
  28.                  INVOKE "Recordset" OF ADO-HYDRA-CABECERA "MoveNext"
  29.     END-PERFORM.

El número de item partenece al número de columna que corresponde en el orden de la consulta empezando desde el 0 que sería la primera.

En SQL Server, se puede poner el nombre del campo entre comillas, así dejas de usar el número de item.

http://www.connectionstrings.com

Aquí puedes mirar los strings de conexión disponibles de todos los motores de base de datos.

Saludos.


Quando tento fazer MOVE XXXX TO "Value" OF "Item"(x) OF "Fields" OF "Recordset" OF ADO-HYDRA-CABECERA (claro, com dados meus)

Da erro :(

Pode, por favor, disponibilizar um exemplo com update e insert numa BD usando ADO?
Estou a necessitar muito usar esta forma de actualizar (query) uma BD.

Consigo Ler, mas estou com dificuldade em atualizar ou criar novos registos.

Gracias,
Jose

Dasije 6 de mayo de 2016 02:45

Hola buenas.

En ADO, solo puedes hacer consultas, y después leer, añadir nuevo registro, actualizar y eliminar.

Si has conseguido leer, no debe ser un problema grabar, asegúrate de no tener en propiedades de modos de acceso en la opción que no te permita grabar.

Solo debes comprobar, leer el registro, mover valores, y actualizar:

Añadir un nuevo registro:

Código COBOL:
  1. INVOKE "Recordset" OF ADO-HYDRA-CABECERA "AddNew"

Nota: Debes hacerlo antes de mover los valores

Actualizar datos:

Código COBOL:
  1. INVOKE "Recordset" OF ADO-HYDRA-CABECERA "Update"

Nota: Sí es un nuevo registro, debes ejecutar antes de mover valores el método Addnew.

Saludos.

Joseg 6 de mayo de 2016 13:53

Gracias :)
Tenha nas propriedades do objecto para leitura/escrita.

Ja esta funcionando, dá erro apenas quando tento alterar um registo com "key with duplicates" ...ainda não sei qual o motivo.


Eu uso: move MyQuery to "Filter" OF "Recordset" of CmADODataSource1 .
para filtrar um registo, mas a Microsoft recomenda que se use o comando "Find" que é mais rápido (tabelas grandes), mas não estou conseguindo.

Como fazia query dos registos ? Usando "Select..." ou métodos do object CmADODataSource1 ?

Muitas gracias



Cita:

Citación del post de Dasije (Mensaje 1913)
Hola buenas.

En ADO, solo puedes hacer consultas, y después leer, añadir nuevo registro, actualizar y eliminar.

Si has conseguido leer, no debe ser un problema grabar, asegúrate de no tener en propiedades de modos de acceso en la opción que no te permita grabar.

Solo debes comprobar, leer el registro, mover valores, y actualizar:

Añadir un nuevo registro:

Código COBOL:
  1. INVOKE "Recordset" OF ADO-HYDRA-CABECERA "AddNew"

Nota: Debes hacerlo antes de mover los valores

Actualizar datos:

Código COBOL:
  1. INVOKE "Recordset" OF ADO-HYDRA-CABECERA "Update"

Nota: Sí es un nuevo registro, debes ejecutar antes de mover valores el método Addnew.

Saludos.


Dasije 19 de mayo de 2016 02:29

La clasula SELECT se puede utilizar la instrucción completa como su motor de base de datos indique utilizar, no es estándar, se puede filtrar de muchas maneras, por ejemplo, añadiendo clasula NOT IN ('valor'), NOT LIKE '%pepe', etc ... incluso hacer uniones entre dos o más tablas y seleccionar valores en una de ellas, hay muchos ejemplos.

Saludos.


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

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