PDA

Ver la Versión Completa : Insertar registro entre 2 existentes


Rox77
22-07-2003, 11:33:47
Hola a todos-> necesito ideas

Se puede insertar un registro en la posicion de la tabla que me de la gana???? comooo???
Me explico tengo dos tablas por ejemplo DOC y LINEAS_DOC unidas en maestro detalle. Imaginemos que tengo 4 lineas introducidas y quiero añadir una mas pero la quiero "insertar" entre la 2 y la 3 de las que ya existen porque necesito que aparezcan en cierto orden y se me ha colado una (por ejemplo) esto como se puede hacer??? Necesitaria crear algun campo NUM_LINEA para organizarlo por este o algo asi ?

Gracias de antemano.

__cadetill
22-07-2003, 15:14:48
Lo ideal es que tengas un indice por el campo en que los quieras ordenar, pero si no lo tienes, el Insert te añade un registro en la posicion donde se encuentra el cursor en eso momento

Aunque, si puedes, te repito que pongas un indice por el/los campos que quieras ordenar

Rox77
22-07-2003, 17:32:34
Gracias por contestar Cadetill pero la idea no es como creo que piensas....la idea es poder mover las lineas a mi antojo...me explico.

Son 2 tablas DOCUMENTOS , la cual tiene datos generales y LINEAS_DEL_DOCUMENTO la cual solo tiene campos de texto y numericos. Un ejemplo:

Nuevo documento -> nº 3 Nombre: Listado de productos Fecha 1/1/2003 etc......

LINEAS
por ejemplo CANTIDAD CONCEPTO PRECIO IMPORTE
Lineas-> Añadimos una linea : 4 Puertas de madera 100 400
Otro linea: 3 Ladrillos rojos 5 15
Otra linea: 4 Puertas nogal 200 800
Otra linea: 5 Ladrillos 1/2 pie 10 50

Etc....y ahora quisiera "insertar" una entre las puertas de madera y los ladrillos rojos """"ó"""" añadir una y MOVERLA entre las puertas de madera y los ladrillos rojos. O quiero agrupar por un lado las puertas dejar una linea en blanco y luego los ladrillos. Y alguien dirá: "este tipo es tonto, escribelo en el orden que quieres y ya está" pero la respuesta es: "esq puede ser que se añadan lineas hoy o mañana o dentro de unos dias ;) jeje .

Se podria hacer mediante Drag&Drog sería ideal y si se puede con grupos de lineas sería la leche..jeje.

Bueno creo q ahora se entiende un poco mas mi idea. El uso de indices no me sirve porq no quiero organizar por ningún campo sino por un concepto de agrupación personal. Unas veces será así otras será por precio otras porque le da la gana al usuario que las puertas vayan antes q los ladrillos etc... ¿OK?

Pues espero respuestas. (Mientras seguiré probando cosas).

Salu2. Rox77.

delphi.com.ar
22-07-2003, 17:43:51
Primero tendrías que modificar los datos anteriores, aumentando en una posición el valor de línea, los registros anteriores y luego insertar el registro.


UPDATE LINEAS
SET LINEA = LINEA + 1
WHERE LINEA >= 4;

INSERT INTO LINEAS
(LINEA, DESCRIPCION)
VALUES
(4, 'Puertas de madera')

Saludos!

__cadetill
22-07-2003, 21:43:10
El caso que te pone delphi.com.ar, seria para añadir un registro. Si lo quieres controlar tambien para los registros ya insertados puedes poner dos botones (uno para Up y otro para Down) y hacer (solo pongo la idea, el codigo te lo deja para ti ya que no es muy complicado)

// Suponiendo que la 1era linea sea SIEMPRE 1

Boton UP

1.- Recuperar valor del campo LINEA del registro en el que estamos en una variable (ej. LineaAnt)
2.- El registro actual, editarlo y cambiar el valor del campo LINEA a 0
3.- Posicionarte en el registro de valor LineaAnt - 1
4.- Modificar el registro poniendo en el campo LINEA el valor de LineaAnt
5.- Posicionarte en el registro de LINEA = 0
6.- Modificar el registro poniendo al campo LINEA el valor LineaAnt - 1

(o bien hacerlo con sentencias SQL de UPDATE que quizas quedaria mejor ;))

Boton Down

->Practicamente lo mismo

Espero te sirva

Rox77
23-07-2003, 11:15:56
Tu idea me gusta mas Cadetill (los siento Delphi.com.ar pero el SQL para este tipo de cosas no me llama la atención...lo uso para consultas, listados actualizaciones de otro tipo como precios etc.)

Eso de los botoncitos lo he visto en alguna aplicación y me parece bien (el propio delphi lo usa en las ventanas para controlar el orden de tabulación) lo probaré aunque me gustaria implementar soporte drag&drop.

Y supongo que lo que hago para mover serviría para insertar: incremento el campo NLINEA a todas las lineas por debajo del lugar donde quiero insertar y le pongo ese numero de linea a la nueva.

Gracias por las ideas... probaré. :)