Como actualizar filas que contienen la misma id?

Iniciado por Bardick, 14 Mayo 2010, 02:08 AM

0 Miembros y 2 Visitantes están viendo este tema.

Bardick

Hola,tengo una tabla de la base de datos acces como el siguiente esquema:

id   codigo
---- -------
1    100
1    200

Se podria actualizar una fila en concreto sin que afecte a las demas?

Este es el codigo que utilizo:

sql = "Update tabla1 set codigo=1 where id=1"
cn.Execute (sql)


El problema es que me actualiza todas las filas que contienen la id=1 con el mismo valor.

Las id's no las puedo cambiar porque estan relacionadas a otra tabla.

PD: Espero haberme explicado bien   :xD

Shell Root

De poderse realizar, supongo que si, pero porque tienes el mismo ID dentro de la misma tabla, leete sobre normalización de base de datos, tienes un grave error.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

MCKSys Argentina

Coincido con Alex@ShellRoot.

Ahora, quizás podrías agregar algún otro campo al SQL para diferenciar uno del otro.

(Aunque si lo piensas bien, si la suma de esos 2 campos te permite hacer una clave única, convendría definir la misma como clave primaria :) )

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


^Tifa^

#3
No he visto la estructura del esquema pero, segun lo que el menciona aca no tiene pinta de datos redundantes sino relacionales entre distintas tablas mediante el campo ID  :rolleyes:  lo cual no se sale de la normalizacion.

Te recomiendo que leas sobre TOP en SQL Server... si fuese MySQL usase la clausula LIMIT 3,4 donde el 3 indicaria el indice de la fila por donde empezar a leer el arreglo y 4 pues la siguiente data o el siguiente indice... los registros en los campos son arreglos se acceden a ellos mediante un indice. Yo no se lamentablemente como funciona la clausula TOP en SQL Server pero, mira ver si puedes hacer lo msimo con esta como hacen con LIMIT de MySQL especificarle desde que indice hasta que indice leer (actualizar) en este caso.

BTW....

Otra forma, si quieres actualizar todos los campos codigo que sean igual a 200 (por ejemplo) en vez de filtrar por ID filtrate por campo asi:

Código (sql) [Seleccionar]


sql = "Update tabla1 set codigo=1 where campo = 200"


Si son varios campos:

Código (sql) [Seleccionar]


sql = "Update tabla1 set codigo=1 where campo IN(200, 300, 400)"


Y si quieres optimizar la consulta (No se si funciona en SQL Server ) pero:

Código (sql) [Seleccionar]


sql = "Update tabla1 set codigo=1 where campo IN(200, 300, 400) using(id)"


Sino funciona, pues:

Código (sql) [Seleccionar]


sql = "Update tabla1 set codigo=1 where campo IN(200, 300, 400) and id = 1"


Agur... ;)

Bardick

Bueno,al fin pude conseguirlo :),pude solucionarlo creando una columna autonumerica para que cada fila fuera distinta.

Pongo el codigo final de como me a quedado por si alguno le puede servir:

rs.open "Select id,id_2 From tabla1 where id='1' 'Seleccionamos todos los registros que contengan id=1
While Not rs.EOF
sql = "Update tabla1 set codigo=('" & codigo(cont).Text & "') where id=1 AND id_2=('" & rs.Fields(1) & "')" 'Actualizamos el campo codigo con lo que contiene el textbox siendo la variable cont el indice.
cn.Execute (sql)
cont=cont+1 'Incrementamos para grabe otro textbox (matriz)
rs.MoveNext 'Movemos al siguiente registro
Wend


Gracias por responder, igualmente mirare eso del TOP que dices ^Tifa^ pero desconozco si se puede utilizar con visual basic...

Shell Root

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.