Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #8  
Antiguo 25-04-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 23
AzidRain Va camino a la fama
Te pongo un ejemplo de como lograr lo que necesitas.

Requisitos Previos:

La tabla donde vas a llevar el control de folios debe ser InnoDB ya que vamos a utilizar transacciones, aqui tienes un script para crearla:

Código SQL [-]
CREATE TABLE `folios_facturas` (
  `sucursal` varchar(3) NOT NULL DEFAULT '',
  `ultimo_folio_talon` int(11) DEFAULT NULL,
  `ultimo_folio_cfd` int(11) DEFAULT NULL,
  `serie_fiscal` varchar(5) DEFAULT NULL,
  PRIMARY KEY (`sucursal`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

En este ejemplo tenemos 4 campos, puedes usar los que necesites segun los folios que quieras controlar, bastaria con tener solo uno que contenga el ultimo folio de factura utilizado. Vamos a dejar sin uso el campo sucursal y serie fiscal. Asi que inicializamos la tabla creando un registro que contenga los folios con que iniciamos

Código SQL [-]
  INSERT FOLIOS_FACTURAS SET ULTIMO_FOLIO_talon=1, SUCURSAL="X";

Ahora si ya podemos empezar a actualizar la tabla segun los folios que vayamos ocupando, yo lo hago mediante la siguiente función que me da el folio que voy a utilizar.

Código Delphi [-]

function GetFolios(var aFolioCFD,aFolioTalon:Integer;var aSerieFiscal: string; aSucursal:string):Boolean;
begin
  Result := FALSE;
  capadatos.StartTrans;   // Iniciamos la transacción
  with Capadatos.QueryCreate('UPDATE FOLIOS_FACTURAS SET ULTIMO_FOLIO_TALON=ULTIMO_FOLIO_TALON+1, ULTIMO_FOLIO_CFD=ULTIMO_FOLIO_CFD+1 WHERE SUCURSAL=:SUCURSAL') do
  Try
   Try
    ParamByName('SUCURSAL').AsString := aSucursal;
    ExecSQL;                // Se ejecuta el query para aumentar el folio
    SQL.Clear;
    SQL.Add('SELECT * FROM FOLIOS_FACTURAS WHERE SUCURSAL=:SUCURSAL');
    ParamByName('SUCURSAL').AsString := aSucursal;
    Open;
    aFolioTalon  := FieldByName('ULTIMO_FOLIO_TALON').AsInteger;  //Leemos los folios ya actualizados
    aFolioCFD    := FieldByName('ULTIMO_FOLIO_CFD').AsInteger;
    aSerieFiscal := FieldByName('SERIE_FISCAL').AsString;
    Close;
    Capadatos.Commit;  //Cerramos la transacción
    Result := True;

  Except
     capadatos.RollBack; // Si algo falla, abortamos la transacción y el folio permanece sin cambios
  end;
  Finally
    Free;
  End;
end;

Yo utilizo Zeos para hacer el acceso a datos, pero lo puedes modificar sin problema para usar cualquier componente.

Ahora bien, para usar la función hacemos:

1.- Editamos los datos de la factura, documento o lo que sea (excepto el folio, ese lo dejamos al final)
2.- Llamamos a la funcion que nos dará el folio
3.- Guardamos la factura con el folio que obtuvimos.

También puedes abrir la transacción antes de llamar a la funcion y cerrarla justo despues de guardar la factura.

Efecto:

Mientras esta abierta la transacción, cualquier otro usuario no podrá obtener un numero de folio hasta que se cierre o aborte la transacción. De esta forma nunca habrá la posibilidad de que 2 usuarios obtengan el mismo folio.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Obtener el ultimo registro toni.vi SQL 2 09-12-2009 13:02:58
dbnavigator en ultimo registro eduardo360 Conexión con bases de datos 6 19-02-2008 16:27:31
No guarda el ultimo registro Tecnic2 Conexión con bases de datos 3 01-09-2004 19:31:23
Ultimo registro ander Firebird e Interbase 3 18-03-2004 14:52:02
Obtener el último registro juanchi Conexión con bases de datos 2 06-02-2004 01:52:21


La franja horaria es GMT +2. Ahora son las 11:26:36.


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