PDA

Ver la Versión Completa : Cómo incremento posiciones?


Almd
29-08-2008, 07:42:49
Hola.
Vereis, tengo la siguiente tabla:

POSICION || NOMBRE
0 || Y
0 || Z
1 || A
2 || B
3 || C

Mi duda es, que tipo de consulta puedo hacer para, una vez haya hecho un update de la posición 0 con nombre Y a la 2, por ejemplo, luego que la posición 2 y a la 3 le sume 1 para que quedar así:

POSICION || NOMBRE
0 || Z
1 || A
2 || Y
3 || B
4 || C

Supongo que tendré que jugar con Delphi, que es con lo que estoy trabajando. Salu2.

tcp_ip_es
29-08-2008, 08:05:34
Podría servirte asi.... pasándole el valor que le das a y por parámetro
update tabla1 set posicion=posicion+1 where posicion>=:y

ElDioni
29-08-2008, 08:10:44
Pues a salto de mata se me ocurre que si sabes el nombre que has modificado y el valor que se la ha dado podrías poner en un adoquery una vez modificado el registro.


adoquery1.sql.text:='UPDATE tabla SET posicion=posicion+1 WHERE posicion>=' + valor + ' AND nombre<>' + quotedstr(nombre);



Creo que con esto te podría funcionar

ElDioni
29-08-2008, 08:13:01
Te me has adelantado tcp_ip_es (http://www.clubdelphi.com/foros/member.php?u=1252), pero creo que tienes un error porque con tu solución también incrementaría la posición del nombre que se ha modificado al principio. Creo yo.
Saludos.

tcp_ip_es
29-08-2008, 08:15:29
es que yo pensaba incrementar primero y luego colocar ;)

ElDioni
29-08-2008, 08:19:36
Entonces no he dicho nada. Un saludo.

Almd
29-08-2008, 08:42:38
Solucionado.
Efectivamente primero se hace el Update de la posición 0 a la introducida, y después otro Update a la posición actual +1. En mi caso a quedado así (NOTA: ya que estoy con Delphi, pondré el código también, si sabeis un poco de Delphi lo entendereis):
UPDATE TABLA1 SET POSICION='+EditPosicion.Text+' WHERE NOMBRE='+sComa+Trim(EditNombre.Text)+sComa+';

(sComa es una variable String que equivale a ' [comilla simple])

El siguiente Update quedó así:

UPDATE TABLA1 SET POSICION='+IntToStr(iNumPos)+' WHERE NOMBRE='+sComa+Trim(vNOMBRE[iPos])+sComa;

(iNumPos es una variable de tipo int la cual guarda la posición y le suma 1 [iNumPos = EditPosicion.text => iNumPos = iNumPos +1;])
(vNOMBRE es un TStringsList que guarda los nombres).

Espero haberme explicado, y gracias chavales :)