Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #7  
Antiguo 03-10-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Poder: 22
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Yo utilizo este tipo de función para devolver el numero que debería tener la factura.
Lo pongo en el BeforePost del DataSet.

Código Delphi [-]
procedure TDMFacturas.CabeceraBeforePost(DataSet: TDataSet);
begin
   if (DataSet.State = dsInsert) then
   begin
      CabeceraNUMERO.AsInteger := DameContador;
   end;
   (...)

Código Delphi [-]
function DameContador : integer;
var
   Q : TIBQuery ;
   T : TIBTransaction;
begin
   Q := TIBQuery.Create(nil);
   T := TIBTransaction.Create(nil);
   T.DefaultDataBase := BaseDeDatos;
   {Quizas haya que llenar mas propiedades de la Trasaccion}
   with Q do
   begin
      Close;
      DataBase := BaseDeDatos; {Base De Datos}
      Transaction := T;
      {Quizas haya que llenar mas propiedades del Query}
      if (not Transaction.InTransaction) then Transaction.StartTransaction;
      SQL.Text := 'select gen_id(''CODIGO_VENTA'',1) as contador from rdb$database';
      ExecQuery;
      Result := Fields[0].AsInteger;
      Transaction.Commit;
   end;
   Q.Free;
   T.Free;
end;

Se supone que antes de hacer el post (donde se graba el registro)
- abre una transacción,
- pide un numero del generador y lo mete en el ID del Dataset
- cierra la transacción que abrió.

La transacción es creada en el momento y no tiene nada que ver con la transacción que utilizas para el resto de la aplicación.

Obviamente deberías modificar los triggers de BeforeInsert
Código SQL [-]
create trigger venta_clave for venta active before insert position 0
as
begin
   if ((new.numero = 0) or (new.numero is null)) then
      new.numero = gen_id(codigo_venta,1);
  /* Trigger text */
end
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
Error al insertar un registro en Firebird mateamargo Conexión con bases de datos 4 12-06-2005 14:52:36
!! Desaparecen registros !! Sick boy Conexión con bases de datos 2 10-09-2004 16:31:38
Desaparecen los permisos TJose Linux 1 13-07-2004 17:47:58
Problemas al eliminar un registro en Firebird IcebergDelphi Firebird e Interbase 0 15-02-2004 20:55:34
Desaparecen los componentes ... ingel Varios 4 11-06-2003 01:39:03


La franja horaria es GMT +2. Ahora son las 01:23:38.


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