Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #20  
Antiguo 04-01-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Creo que nos estamos desviando mucho del tema, quizás lo que expongo ahora es demasiado para el tema que nos ocupa.

La filosofía:
- Primero comprobamos que el generador está creado en la BBDD, de lo contrario, lo creamos (habría que inicializarlo a un valor... pero no lo incluyo en el código).
- Ya que existe, y tiene un valor, lo incrementamos y recogemos su número.

Código Delphi [-]
const ExisteGen = 'SELECT RDB$GENERATOR_NAME FROM RDB$GENERATORS WHERE  RDB$GENERATOR_NAME = %s and RDB$SYSTEM_FLAG IS NULL' ;

const CreaGen = ' CREATE GENERATOR %s';

const IncrementaGen = 'SELECT GEN_ID(%s , 1) FROM RDB$GENERATORS WHERE  RDB$GENERATOR_NAME = %s AND  and RDB$SYSTEM_FLAG IS NULL';

begin
NombreGen:= 'Facturas_'+ inttostr(2007); // Nombre del Generador incluyendo el año

qry.sql.text := format( existeGen, [QuotedStr(NombreGen)]);
qry.Open;
if qry.IsEmpty then
begin  
// vaya por dios, el generador no existe en la BBDD,
// si intentamos consultar su valor nos daría una bonita excepción
   qry.Close;
   qry.sql.text := Format(CreaGen, [NombreGen]); // pos creamos el generador
   qry.ExecSql;
   // aquí podríamos establecer su valor a cero, (sería lo lógico)
end;

qry.sql.text := Format(IncrementaGen, [NombreGen, QuotedStr(NombreGen)]);
qry.Open;
Result := qry.Fields[0].AsInteger; // el valor del generador, incrementado en 1

He tenido un problemilla con Firebird 1.5, y es que en un Store Procedure no se puede hacer algo asï:
Código SQL [-]
create generator :NameGen
Donde NameGen es el parámetro de tipo string que se pasa al Store Procedure. Pues bueno, salvamos el escollo desde delphi que no tiene restricciones.

PD: El código está escrito de memoria, aunque los sqls han sido probado desde el SQL Editor de IB Expert Personal.

Consecuencias de usar este método:
- El número de factura solo se pediría al guardar definitivamente la factura.
- Estando en red, podría dar fallos al crear los generadores, igual se podrían crear 50 generadores desde el principio, y así obviamos el tener que comprobar que existen y que tienen asignados un valor.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Sugerencias sobre bases de datos taita Conexión con bases de datos 19 17-11-2005 16:55:38
Sugerencias sobre la eleccion de bbdd taita Conexión con bases de datos 2 01-02-2005 13:24:42
Dudas y sugerencias sobre la web del ClubDelphi Magician^ Varios 13 05-04-2004 19:22:55
Campos calculados, facturas y detalles de facturas. Letty Conexión con bases de datos 7 07-11-2003 11:19:44
Control de numeracion de versiones erickperez6 Varios 2 14-05-2003 17:10:28


La franja horaria es GMT +2. Ahora son las 19:14:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi