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
productscon 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
