Ver la Versión Completa : [PowerCOBOL] Ejemplo PWC y SQL Embebido
Josber
9 de noviembre de 2015, 10:50
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
É 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
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:
01 CONTROL-ADO-3A OBJECT REFERENCE POW-COBJECT.
Procedure:
MOVE SPACES TO CONEXION-ADO
STRING "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
WST-ARCHIVO-MBD(1:WST-TAMANO-VARIABLE)
";Mode=ReadWrite;Persist Security Info=False"
DELIMITED BY SIZE INTO CONEXION-ADO
MOVE CONEXION-ADO TO "ConnectionString" OF ADO-HYDRA-CABECERA
MOVE SPACES TO SQL-CONDICION
STRING "SELECT * FROM cabecera"
" WHERE d_fecha BETWEEN FORMAT('" WST-FECAX-INICIO "', 'yyyy/mm/dd')"
" AND FORMAT('" WST-FECAX-FINAL "', 'yyyy/mm/dd')"
" ORDER BY d_fecha ASC"
DELIMITED BY SIZE INTO SQL-CONDICION
MOVE SQL-CONDICION TO "CommandText" OF ADO-HYDRA-CABECERA
INVOKE ADO-HYDRA-CABECERA "SETREF-Recordset" USING CONTROL-ADO-3A
IF "RecordCount" OF "Recordset" OF ADO-HYDRA-CABECERA NOT = ZEROS
MOVE "RecordCount" OF "Recordset" OF ADO-HYDRA-CABECERA TO WST-REGISTROS
INVOKE "Recordset" OF ADO-HYDRA-CABECERA "MoveFirst"
PERFORM WITH NO LIMIT
IF "EOF" OF "Recordset" OF ADO-HYDRA-CABECERA NOT = POW-FALSE
EXIT PERFORM
END-IF
MOVE "Value" OF "Item"(6) OF "Fields" OF "Recordset" OF ADO-HYDRA-CABECERA TO WST-CAMPO-IMPORTES
...........
MOVE WST-PRECIO-F TO "Value" OF "Item"(34) OF "Fields" OF "Recordset" OF ADO-HYDRA-CABECERA
INVOKE "Recordset" OF ADO-HYDRA-CABECERA "Update"
INVOKE "Recordset" OF ADO-HYDRA-CABECERA "MoveNext"
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
Working:
01 CONTROL-ADO-3A OBJECT REFERENCE POW-COBJECT.
Procedure:
MOVE SPACES TO CONEXION-ADO
STRING "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
WST-ARCHIVO-MBD(1:WST-TAMANO-VARIABLE)
";Mode=ReadWrite;Persist Security Info=False"
DELIMITED BY SIZE INTO CONEXION-ADO
MOVE CONEXION-ADO TO "ConnectionString" OF ADO-HYDRA-CABECERA
MOVE SPACES TO SQL-CONDICION
STRING "SELECT * FROM cabecera"
" WHERE d_fecha BETWEEN FORMAT('" WST-FECAX-INICIO "', 'yyyy/mm/dd')"
" AND FORMAT('" WST-FECAX-FINAL "', 'yyyy/mm/dd')"
" ORDER BY d_fecha ASC"
DELIMITED BY SIZE INTO SQL-CONDICION
MOVE SQL-CONDICION TO "CommandText" OF ADO-HYDRA-CABECERA
INVOKE ADO-HYDRA-CABECERA "SETREF-Recordset" USING CONTROL-ADO-3A
IF "RecordCount" OF "Recordset" OF ADO-HYDRA-CABECERA NOT = ZEROS
MOVE "RecordCount" OF "Recordset" OF ADO-HYDRA-CABECERA TO WST-REGISTROS
INVOKE "Recordset" OF ADO-HYDRA-CABECERA "MoveFirst"
PERFORM WITH NO LIMIT
IF "EOF" OF "Recordset" OF ADO-HYDRA-CABECERA NOT = POW-FALSE
EXIT PERFORM
END-IF
MOVE "Value" OF "Item"(6) OF "Fields" OF "Recordset" OF ADO-HYDRA-CABECERA TO WST-CAMPO-IMPORTES
...........
MOVE WST-PRECIO-F TO "Value" OF "Item"(34) OF "Fields" OF "Recordset" OF ADO-HYDRA-CABECERA
INVOKE "Recordset" OF ADO-HYDRA-CABECERA "Update"
INVOKE "Recordset" OF ADO-HYDRA-CABECERA "MoveNext"
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:
INVOKE "Recordset" OF ADO-HYDRA-CABECERA "AddNew"
Nota: Debes hacerlo antes de mover los valores
Actualizar datos:
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
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:
INVOKE "Recordset" OF ADO-HYDRA-CABECERA "AddNew"
Nota: Debes hacerlo antes de mover los valores
Actualizar datos:
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.
dmosca
15 de junio de 2017, 03:17
Hola todos
estoy trantando de entender ado con el ejemplo de powercobol v9
como registro datagrid1?
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.