Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 18 Dic, 2009 11:02 pm Asunto: Firebird y sus Funciones UDF |
|
|
Buscando un poco por la red, y en espera de que estas funciones que vienen predefinidas en las DLL de Firebird, sean de utilidad dejo los enlaces para su visita.
Sitio Oficial de Firebird: -> http://www.firebirdsql.org/?op=doc
Referencia de Funciones -> http://www.firebirdsql.org/pdfrefdocs/Firebird-2.0-LangRef-Update.pdf
Creación de Funciones de usuario: -> http://www.firebirdsql.org/index.php?op=useful&id=deatz_udf
Del segundo enlace (Referencia de Funciones), existe una funcion capaz de convertir un tipo de datos a otro, bastante interesante si se desa realizar lo siguiente.
Supongamos que necesitamos un campo calculado llamado Folio que esté compuesto por el valor de dos campos enteros y la palabra "Folio:".
Dentro de una base de datos, creamos una tabla con la siguiente estructura.
| Código: | create table FoliosCalculados
(
Id integer not NULL,
Numero_Salida INTEGER,
Numero_Entrada INTEGER,
CampoFolio Varchar(20),
Foreign Key (Id)
); |
Solucionones:
1.-Puede realizarse por medio de programacíón, dentro de nuestro código con algo como esto.
| Código: |
IBDataSetNumero_Salida->Value = 3;
IBDataSetNumero_Entrada->Value = 4;
IBDataSetCampoFolio->Value = "Folio:"+IBDataSetNumero_Salida->AsString+"-"+IBDataSetNumero_Entrada->AsString;
IBDataSet->Post();
IBDataSet->ApplyUpdates();
IBDataSet->Transaction->CommitRetaining();
// esto nos da como resultado que el campo folio lleva por valor "Folio: 3-4
// si los campos Numero_Salida = 3 y Numero_Entrdada = 4
|
2.- O bien podemos hacerlo desde nuestro servidor de base de datos usando las funciones CAST() y || para convertir y concatenar respectivamente de la siguiente manera.
| Código: | // borramos el campo
Alter Table FoliosCalculados drop CampoFolio;
// modificamos para que sea calculado
Alter Table FoliosCalculados Add CampoFolio
Computed by 'Folio: '|| cast(Numero_Salida as Varchar(5)) ||'-'||cast(Numero_Entrada as Varchar(5));
|
y en nuestro codigo algo como esto
| Código: |
IBDataSetNumero_Salida->Value = 3;
IBDataSetNumero_Entrada->Value = 4;
IBDataSet->Post();
IBDataSet->ApplyUpdates();
IBDataSet->Transaction->CommitRetaining();
|
Pues al terminar el proceso de grabar en la base de datos, el campo calculado ya contiene el valor que nosotros deseamos que en este ejemplo es: "Folio: 3-4"
El uso de este ejemplo es para mostrar la utilidad de las funciones y la forma correcta de usar un Servidor de datos.
Algunas de las reglas de programación de base de datos que en su mayoria no son aplicadas por desarrolladores indican el uso de programa en el Servidor, algunas de las reglas dicen asi.
1.- Todo campo calculado, no debe ponerse como campo de una tabla
2.- Los campos calculados que ameriten grabar su contenido, deben hacerse desde el servidor y no como operaciones del software.
Ejemplo de la Regla uno.
Si se genera una tabla para calcular el promedio de un Alumno, el campo "promedio" no deberia establecerse, ya que es un campo calculado por la suma de otras campos y su valor no es necesario almacenarse, ya que puede calcularse cuantas veces sea necesario, ahorrando con ello espacio en la base de datos.
Ejemplo de la Regla Dos.
El campo "Precio_De_Venta" es un campo compuesto por el precio de compra de un articulo + El impuesto de utilidad de la empresa + Algún otro impuesto, este tipo de cambio es especial, pues al cambiar los impuestos el campo debe tener la capacidad de "auto-regenerarse" para darnos un valor correcto y no "perder" tiempo en realizar las operaciones desde nuestro propio software, cuando el servidor de base de datos puede darnos esta fácilidad.
Saludos y Felices Fiestas Decembrinas 2009 _________________
 |
|