Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-07-2008
ebeltete ebeltete is offline
Miembro
 
Registrado: may 2003
Posts: 236
Poder: 22
ebeltete Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 21-07-2008
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 19
celades1 Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 21-07-2008
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Red face 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.

Código SQL [-]
Nueva_ID = select max(id) + 1 from tabla

Luego, con eso ya podemos hacer el insert sin problemas:
Código Delphi [-]
with query do
begin
  close;
  sql.clear;
  sql.add('Insert into tabla values (:ID, :campo2, ...)');

  parambyname('ID').asInteger:=Nueva_ID
  try
    execSQL;
  except
    raise;
  end;
end;

...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.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.

Última edición por santiago14 fecha: 21-07-2008 a las 19:03:13. Razón: Me faltó el "+ 1" en el Select
Responder Con Cita
Respuesta



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
Orden en una hoja vivamotos Servers 0 10-04-2008 09:18:53
Orden de los Campos en una Tabla sinalocarlos MS SQL Server 3 21-11-2006 20:34:28
Ordenar (ch ll ) tabla dbase por orden alfabetico latino universal javi90 Conexión con bases de datos 0 16-02-2005 18:34:39
Consulta SQL para cambiar el orden natural de los campos de una tabla txemag Firebird e Interbase 4 23-07-2004 19:15:08
Urgente. insercion en tabla de SQL sin orden asendente? danytorres SQL 5 19-12-2003 23:08:18


La franja horaria es GMT +2. Ahora son las 09:38:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi