Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

 
 
Herramientas Buscar en Tema Desplegado
  #13  
Antiguo 19-10-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.676
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Si quieres números consecuentivos entonces descartamos un generador.
No mantengo contadores porque me parecen innecesarios y una fuente potencial de problemas.
Para esos casos yo compruebo el ultimo número dado de alta y le sumo uno.
Si alguien ha dado de alta ese número mientras tanto, pues vuelvo a pedir de nuevo el último y le sumo 1, y así varias veces.
Si transcurridos varios intentos están siempre ocupados los números que voy pidiendo es que algo anormal ha ocurrido y ya saco el mensaje de error.
He modificado un trozo de código, simplificándolo, a ver si no me he equivocado, pero al menos sirve para que se entienda lo que hago.

Uutiles.pas (datos de configuración del programa)
Código Delphi [-]
const
  _INTENTOS_GRABAR_ = 5;

Cualquier otra Unit.pas
-------------------------------------------------
Código Delphi [-]
procedure TForm1.btGrabarClick(Sender: TObject);
var  
  iIntentos : Integer;  
begin
  iIntentos := 0;
  //
  DS.DataSet.FieldByName('codigo').AsInteger := getNuevoCodigo( tabla, campo );  // esto sólo hace un select max(campo)+1 from tabla
  try
    DS.DataSet.Post;
  except
    try
      while iIntentos < _INTENTOS_GRABAR_ do
      begin
        try
          DS.DataSet.Post;
          Break;
        except
          DS.DataSet.FieldByName('codigo').AsInteger := getNuevoCodigo( tabla, campo );
        end;
        inc(iIntentos);
      end;
    except
      on E:exception do
        Error(-100, Format('(%s) Error: %s', [E.ClassName, E.Message]));
    end;
  end;
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 crear Primary Key Chogo Firebird e Interbase 18 07-07-2010 17:17:24
Primary Key - SQL Server Oxa78 MS SQL Server 3 09-01-2006 23:27:47
Error Violation Primary Key maui Conexión con bases de datos 16 11-05-2004 15:49:46
primary key AMO SQL 7 14-02-2004 20:50:05
Primary key interbase 6 rafadrover Conexión con bases de datos 2 07-08-2003 08:40:20


La franja horaria es GMT +2. Ahora son las 08:48:32.


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