Un placer! Perdona la tardanza pero estuve muy ocupado en el trabajo! :(
Un stored procedure es.. a como se indica... un proceso que se registra en la base de datos y se almacena ahí... y que contiene lo necesario para realizar transacciones (de muchos tipos... ) múltiples... pero nos enfocaremos en los más básico... realizar INSERTS Y UPDATES.
Algunas características básicas son: los SP reciben parámetros de entrada y pueden llegar a regresar parámetros de salida. Desde la aplicación.. se envían los parámetros y se ejecuta el procedimiento. Son muy estables y robustos y garantizan un mejor manejo de los datos.. dado que la transacción se registra directamente por el gestor de base de datos y no por la aplicación.
Crea... como ejemplo: una tabla llamada CLIENTES con los campos código (char10), nombre (char 30) en firebird.
EN el panel derecho del firebird... donde esta el árbol de elementos... están las tables, PROCEDURES... etc. Da click derecho sobre PROCEDURES y da click en NEW PROCEDURE. Y se abrirá una venta que te dirá algo así:
CREATE PROCEDURE NEW_PROCEDURE
AS
Begin
/* Procedure body */
SUSPEND;
END;
Vamos por partes:
CREATE PROCEDURE indica crear un procedimiento que se llamara a como definas seguidamente... podría ser relacionado a la tabla para identificar mejor:
CREATE PROCEDURE NUEVOCLIENTE(
Seguidamente abrís un paréntesis. El procedimiento se llama NUEVOCLIENTE y es para insertar un cliente en la tabla. Abrí el paréntesis para establecer los parámetros de entrada.. es decir... lo que se envía desde la aplicación al SP y que sera guardado en la BD.
Luego definí los parámetros de entrada... respetando los tipos de campo... nombralos igual que los campos para que sea más legible... así:
CREATE PROCEDURE NUEVOCLIENTE(
CODIGO CHAR(10),
NOMBRE CHAR(30))
Si ves.. definís el tipo de dato que se espera. Puede ser CHAR, NUMERIC(10, 0), DATE, INTEGER, SMALLINT... ETC.
Luego viene esto:
AS
BEGIN
/* Procedure body */
SUSPEND;
Borra estas 2 lineas /* Procedure body */
SUSPEND;
y luego ahi escribimos el cuerpo de la sentencia... asi:
CREATE PROCEDURE NUEVOCLIENTE(
CODIGO CHAR(10),
NOMBRE CHAR(30))
INSERT INTO CLIENTES(CODIGO, NOMBRE) VALUES(:CODIGO, :NOMBRE) ;
Si te fijas... en values... anteponemos un : a cada parámetro que se recibe como dato para la inserción. Al cerrar paréntesis... coloca un punto y coma ;
Y debe quedar asi:
CREATE PROCEDURE NUEVOCLIENTE(
CODIGO CHAR(10),
NOMBRE CHAR(30))
INSERT INTO CLIENTES(CODIGO, NOMBRE) VALUES(:CODIGO, :NOMBRE) ;
END;
Y listo. Ahora da click en compilate o busca el icono o figura que es como un rayo amarillo... y dale click para guardar.
En la aplicación:
Anda al form y crea 2 texts. En cada uno meterás código y nombre respectivamente. Recordá la extensión de los campos (10 y 30) y los tipos de datos.
Crea un botón y coloca este código:
LOCAL lcCod, lcNom
**--
lcCod = ALLTRIM(THISFORM.Text1.Value)
lcNom = ALLTRIM(THISFORM.Text2.Value)
**--Los tipos de datos deben ser caracter.
**--Llamamos al procedure NUEVOCLIENTE asi:
SQLEXEC(PHandle_Ident, "EXECUTE PROCEDURE NUEVOCLIENTE(?lnCod, ?lcNom)")
SQLCOMMIT(PHandle_Ident)
**--//
MESSAGEBOX("Registro guardado")
Y listo. Ahora ejecuta y debe guardar el registro. Proba hasta aquí... y el resultado hacérmelo saber para continuar al siguiente paso. Esto es lo más básico... hay otras cosas que luego consideraremos... tales como los generadores de secuencia.. primary keys etc... pero es lo más básico. Luego veremos el UPDATE. Proba!