![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#4
|
||||
|
||||
|
Para la clave primaria usaría un autoincremental.
Para el código que sea correlativo, usaría otro campo distinto con un índice. Hay muchas formas de hacerlo, una de ellas: - En el OnNewRecord, buscas el hueco del correlativo y lo asignas al campo. - En el BeforePost y asegurándote que la tabla está en estado dsInsert (se está insertando pero todavía no se ha guardado). Buscas de nuevo el correlativo por si alguien ha grabado mientras este usuario estaba pensando en las musarañas .Esto tiene fallos de todas formas, porque imagina que se da un registro de alta, se guarda, otro usuario hace lo mismo y despues el primer usuario borra su registro. Obviamente queda un hueco (que se puede aprovechar la próxima vez que se inserte un registro). La rutina para volverse loco es esta: Código:
procedure TDTM.BuscaHuecoCliente(const idActual: Integer);
var
nextIdx, hueco: Longint;
qryHuecos: Tquery;
salir: Boolean;
begin
if not (dtm.TblClientes.state in [dsInsert]) then
begin
frmmdi.Notifica(mAviso,
'Solo se puede buscar huecos al dar de alta un nuevo Cliente', NIL);
exit
end;
hueco := 0;
salir := false;
qryHuecos := Tquery.Create(nil);
try
qryHuecos.DatabaseName := gl.DB.Alias; // alias del bde
qryHuecos.SQL.Text := 'select idCliente from Clientes order by idCliente';
qryHuecos.SessionName := dtm.DtbPPal.SessionName; //session del TDatabase
qryHuecos.Prepare;
qryHuecos.Open;
if not qryHuecos.IsEmpty then
begin
qryHuecos.First;
while not ((qryHuecos.Eof) or salir) do
begin
inc(hueco);
nextIdx := qryHuecos.Fields[0].AsInteger;
if nextIdx - hueco <> 0 then
salir := (hueco <> idactual)
else
qryHuecos.Next;
end; //while
end; // qry vacia
qryHuecos.Close;
finally
FreeAndNil(qryHuecos);
end; // finally
if salir then
dtm.TblClientesIdCliente.AsInteger := hueco
else
dtm.TblClientesIdCliente.AsInteger := nextId +1;
end;
OFFtopic: ¿Quién será el que se ha cargado las etiquetas delphi ![]() Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Incrementar las llaves primarias con zeos | uper | MySQL | 1 | 16-07-2005 20:23:00 |
| Problema de llaves primarias y foráneas!! | romansiux | Varios | 2 | 10-04-2005 16:20:57 |
| Key Violation en tabla sin claves primarias | mak8888 | Tablas planas | 6 | 27-02-2005 11:48:12 |
| Problemas con claves primarias y campos obligatorios | Bitbanner | Conexión con bases de datos | 1 | 09-02-2005 11:20:31 |
| como crear exception para validar duplicación de llaves en tabla | viajero2015 | Conexión con bases de datos | 6 | 21-10-2003 09:54:09 |
|