FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Como trabajar las llaves primarias en red
Hola a todos:
Ante todo muchas gracias por la leer este hilo, tengo un problema al guardar registros en Paradox en varios terminales a la vez, el problema se cebtra en generar la clave primaria en los terminales. probe con un campo autoincremental pero cuando un registro se elimina se pierde ese numero, siendo escencial mantener y reutilizar estos numeros. Como veran no se puede poner en exclusivo la tabla por que se esta compartioendo con varios terminales. Cual seria una Solución viable.(uso paradox y delphi 6.0) Nuevamente Muchas Gracias. Javier Villa. |
#2
|
||||
|
||||
Si no necesitas que sean correlativos, es decir, que puedes aprovechar los que se borran, yo utilizaría un proceso paralelo que reutilice los números, ya sea en el momento de asignarlos o utilizando una tabla intermedia que guarde los libres.
En todo caso debes eliminar la característica de autoincremental de campo.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
|||
|
|||
De todas maneras se elimina el autoincremental
Lo que mas molesta es cuando varios usuarios quieren grabar al mismo tiempo en diferentes terminales, cual es el procedimiento a seguir en ese caso.
|
#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 21:23:00 |
Problema de llaves primarias y foráneas!! | romansiux | Varios | 2 | 10-04-2005 17:20:57 |
Key Violation en tabla sin claves primarias | mak8888 | Tablas planas | 6 | 27-02-2005 12:48:12 |
Problemas con claves primarias y campos obligatorios | Bitbanner | Conexión con bases de datos | 1 | 09-02-2005 12:20:31 |
como crear exception para validar duplicación de llaves en tabla | viajero2015 | Conexión con bases de datos | 6 | 21-10-2003 10:54:09 |
|