En este módulo, aprenderemos cómo interactuar con bases de datos utilizando RPG. Este es un aspecto crucial para cualquier aplicación empresarial, ya que la mayoría de las aplicaciones necesitan almacenar y recuperar datos de una base de datos.
Objetivos del Módulo
- Comprender los conceptos básicos de las bases de datos.
- Aprender a conectarse a una base de datos desde un programa RPG.
- Realizar operaciones básicas de CRUD (Crear, Leer, Actualizar, Eliminar) en una base de datos.
- Manejar errores comunes y optimizar el acceso a la base de datos.
Conceptos Básicos de Bases de Datos
¿Qué es una Base de Datos?
Una base de datos es una colección organizada de datos que se pueden acceder, gestionar y actualizar fácilmente. Las bases de datos se utilizan para almacenar información de manera estructurada y permiten realizar operaciones de consulta y manipulación de datos.
Tipos de Bases de Datos
- Relacionales (RDBMS): Utilizan tablas para almacenar datos y se basan en el modelo relacional. Ejemplos: MySQL, PostgreSQL, SQL Server.
- NoSQL: Utilizan diferentes modelos de datos como documentos, grafos, etc. Ejemplos: MongoDB, Cassandra.
Conectarse a una Base de Datos desde RPG
Configuración del Entorno
Antes de comenzar a programar, asegúrate de tener acceso a una base de datos y las credenciales necesarias para conectarte a ella. También necesitarás un entorno de desarrollo configurado para RPG.
Ejemplo de Conexión a una Base de Datos
Dcl-S dbName Char(10) Inz('MYDB'); Dcl-S userName Char(10) Inz('myuser'); Dcl-S password Char(10) Inz('mypassword'); Dcl-S sqlState Char(5); Dcl-S sqlCode Int(10); Exec SQL CONNECT TO :dbName USER :userName USING :password; If SQLCODE <> 0; // Manejo de errores Dsply ('Error al conectar a la base de datos: ' + %Char(SQLCODE)); Return; EndIf; Dsply ('Conexión exitosa a la base de datos');
Explicación del Código
- Dcl-S: Declara variables.
- Exec SQL CONNECT: Comando SQL para conectarse a la base de datos.
- If SQLCODE <> 0: Verifica si hubo un error en la conexión.
- Dsply: Muestra un mensaje en la pantalla.
Operaciones CRUD
Crear (INSERT)
Dcl-S empId Int(10) Inz(1001); Dcl-S empName Char(50) Inz('John Doe'); Dcl-S empDept Char(10) Inz('HR'); Exec SQL INSERT INTO employees (id, name, department) VALUES (:empId, :empName, :empDept); If SQLCODE <> 0; Dsply ('Error al insertar datos: ' + %Char(SQLCODE)); Else; Dsply ('Datos insertados correctamente'); EndIf;
Leer (SELECT)
Dcl-S empId Int(10) Inz(1001); Dcl-S empName Char(50); Dcl-S empDept Char(10); Exec SQL SELECT name, department INTO :empName, :empDept FROM employees WHERE id = :empId; If SQLCODE <> 0; Dsply ('Error al leer datos: ' + %Char(SQLCODE)); Else; Dsply ('Nombre: ' + empName + ', Departamento: ' + empDept); EndIf;
Actualizar (UPDATE)
Dcl-S empId Int(10) Inz(1001); Dcl-S newDept Char(10) Inz('IT'); Exec SQL UPDATE employees SET department = :newDept WHERE id = :empId; If SQLCODE <> 0; Dsply ('Error al actualizar datos: ' + %Char(SQLCODE)); Else; Dsply ('Datos actualizados correctamente'); EndIf;
Eliminar (DELETE)
Dcl-S empId Int(10) Inz(1001); Exec SQL DELETE FROM employees WHERE id = :empId; If SQLCODE <> 0; Dsply ('Error al eliminar datos: ' + %Char(SQLCODE)); Else; Dsply ('Datos eliminados correctamente'); EndIf;
Manejo de Errores Comunes
Errores de Conexión
- SQLCODE -104: Error de sintaxis en la instrucción SQL.
- SQLCODE -204: Objeto no encontrado en la base de datos.
Errores de Operación
- SQLCODE -803: Violación de clave única.
- SQLCODE -530: Violación de restricción de clave foránea.
Consejos Adicionales
- Optimización: Utiliza índices en las tablas para mejorar el rendimiento de las consultas.
- Seguridad: Nunca almacenes contraseñas en texto plano y utiliza conexiones seguras.
Ejercicio Práctico
Ejercicio
- Conéctate a una base de datos.
- Crea una tabla llamada
products
con las columnasid
,name
, yprice
. - Inserta tres registros en la tabla
products
. - Realiza una consulta para obtener todos los productos cuyo precio sea mayor a 50.
- Actualiza el precio de un producto específico.
- Elimina un producto de la tabla.
Solución
// Conexión a la base de datos Exec SQL CONNECT TO :dbName USER :userName USING :password; // Crear tabla Exec SQL CREATE TABLE products ( id INT PRIMARY KEY, name CHAR(50), price DECIMAL(10, 2) ); // Insertar registros Exec SQL INSERT INTO products (id, name, price) VALUES (1, 'Product A', 30.00); Exec SQL INSERT INTO products (id, name, price) VALUES (2, 'Product B', 60.00); Exec SQL INSERT INTO products (id, name, price) VALUES (3, 'Product C', 90.00); // Consultar productos con precio mayor a 50 Exec SQL SELECT name, price INTO :prodName, :prodPrice FROM products WHERE price > 50; // Actualizar precio de un producto Exec SQL UPDATE products SET price = 70.00 WHERE id = 2; // Eliminar un producto Exec SQL DELETE FROM products WHERE id = 1;
Conclusión
En este módulo, hemos aprendido cómo conectarnos a una base de datos desde un programa RPG y realizar operaciones básicas de CRUD. También hemos visto cómo manejar errores comunes y optimizar el acceso a la base de datos. Estos conocimientos son fundamentales para desarrollar aplicaciones empresariales robustas y eficientes.
En el próximo módulo, exploraremos las estructuras de datos y cómo utilizarlas eficazmente en RPG.
Curso de Programación RPG
Módulo 1: Introducción a la Programación RPG
- ¿Qué es RPG?
- Configuración de tu Entorno de Desarrollo
- Sintaxis y Estructura Básica
- Programa Hola Mundo
Módulo 2: Conceptos Básicos
- Tipos de Datos y Variables
- Operadores y Expresiones
- Estructuras de Control
- Funciones y Procedimientos
Módulo 3: Trabajando con Datos
Módulo 4: Técnicas Avanzadas de Programación
Módulo 5: RPG IV y Más Allá
Módulo 6: Integrando RPG con Tecnologías Modernas
Módulo 7: Aplicaciones del Mundo Real
- Construyendo una Aplicación Simple
- Estudio de Caso: Sistema de Gestión de Inventarios
- Estudio de Caso: Sistema de Nómina
- Mejores Prácticas y Revisión de Código