Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Bardick en 14 Mayo 2010, 02:08 am



Título: Como actualizar filas que contienen la misma id?
Publicado por: Bardick en 14 Mayo 2010, 02:08 am
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:

Código:
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


Título: Re: Como actualizar filas que contienen la misma id?
Publicado por: Shell Root en 14 Mayo 2010, 02:47 am
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.


Título: Re: Como actualizar filas que contienen la misma id?
Publicado por: MCKSys Argentina en 14 Mayo 2010, 05:05 am
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!


Título: Re: Como actualizar filas que contienen la misma id?
Publicado por: ^Tifa^ en 14 Mayo 2010, 05:32 am
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
  1.  
  2. SQL = "Update tabla1 set codigo=1 where campo = 200"
  3.  

Si son varios campos:

Código
  1.  
  2. SQL = "Update tabla1 set codigo=1 where campo IN(200, 300, 400)"
  3.  

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

Código
  1.  
  2. SQL = "Update tabla1 set codigo=1 where campo IN(200, 300, 400) using(id)"
  3.  

Sino funciona, pues:

Código
  1.  
  2. SQL = "Update tabla1 set codigo=1 where campo IN(200, 300, 400) and id = 1"
  3.  

Agur... ;)


Título: Re: Como actualizar filas que contienen la misma id?
Publicado por: Bardick en 15 Mayo 2010, 03:16 am
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:

Código:
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...


Título: Re: Como actualizar filas que contienen la misma id?
Publicado por: Shell Root en 15 Mayo 2010, 06:21 am
xD, lo del TOP es en el SQL Server xD
:http://technet.microsoft.com/es-es/library/ms189463.aspx