![]() |
Orden En Tabla
Hola amigos del foro, estoy migrando a Firebird 2.0, mi aplicacion que usa paradox, entre otras maneja 7 tablas sin indice primario, lo cual me permite mantener el orden segun donde se inserta el registro. Para hacerlo en Firebird con un indice primario, al hacer una consulta me devuelve los datos de la tabla ordenado segun el campo primario, como puedo hacer para ver la tabla como lo hacia en paradox.
Si el usuario inserta un registro en el renglon 21 de la tabla, quiero que al hacer la consulta, el renglon se vea en el mismo lugar. Gracias |
Hola
primero suponemos que tienes un campo ID primary key luego añadele un campo que sea el orden crea un indice unique key para que no repita valores y vaya rapido al ordenar. Al insertar comprueba donde estas insertando y si insertas en la posicion 50 antes deberas hacer update orden=orden+1 de todos los registros con orden>=50. si quieres al hacer delete del registro 50 puedes hacer update orden=orden-1 de todos los registros con orden>=50. Tambien si cambias de lugar el registro debes hacer los updates correspondientes. Todo esto lo puedes montar con codigo delpho o bien con los triggers de la BD before_insert,before_update,after_delete. Yo lo utilizo para ordenar las linias de un albaran tal como las meta el usuario entonces la tabla linias_albaran tiene el UK que es Cabecera_albaran_id+orden; con un Id como PK Otra solucion que yo utilize pero que no me gusta es que el campo orden sea double precision y asignarle siempres el valor medio entre su anterior y posterior registro. Espero haberte podido ayudar |
ID en firebird
Una manera sencilla sería poner un generador para el identificador.
Y en el trigger before insert llamarlo y obtener el id. Otra manera, creo yo mas razonable, es desde el código delphi hacer la cosa en dos pasos. Lo primero sería un select buscando el último nro de ID ingresado, a ver: ...iniciamos la transaccion y todo eso.
Luego, con eso ya podemos hacer el insert sin problemas:
...terminamos la transacción y listo. Por último, eso de no tener clave primaria en una tabla no es bueno, procura siempre tenerla. Espero te sirva. Esto no es lo mejor pero funciona bastante bien. |
| La franja horaria es GMT +2. Ahora son las 00:06:17. |
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