Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Cómo incremento posiciones? (https://www.clubdelphi.com/foros/showthread.php?t=59501)

Almd 29-08-2008 07:42:49

Cómo incremento posiciones?
 
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
Código SQL [-]
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.

Código Delphi [-]
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, 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):
Cita:

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í:
Cita:

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 :)


La franja horaria es GMT +2. Ahora son las 13:55:10.

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