Foros del Web » Programación para mayores de 30 ;) » .NET »

Evitar duplicado pero con execpciones

Estas en el tema de Evitar duplicado pero con execpciones en el foro de .NET en Foros del Web. Me he percatado de un problema que acabo de tener, yo tengo establecido todas mis validaciones, pero en el caso de evitar un registro duplicado, ...
  #1 (permalink)  
Antiguo 20/12/2011, 21:11
Avatar de edbc92  
Fecha de Ingreso: octubre-2010
Ubicación: Lima - Los Olivos
Mensajes: 93
Antigüedad: 13 años, 5 meses
Puntos: 5
Exclamación Evitar duplicado pero con execpciones

Me he percatado de un problema que acabo de tener, yo tengo establecido todas mis validaciones, pero en el caso de evitar un registro duplicado, comparo los nombre de registros (Ejem: de un componente). Ahora, cuando le doy clic al boton editar y luego grabo, si es que la descripcion del componente(txtcompo.text) ya existe en la bd, obviamente me deberia de lanzar mensaje de error diciendo que ese registro con ese nombre ya existe...

Ahora, yo quiero editar el registro, pero solo editar el combobox que tiene de datos los estados del componente(nuevo,usado,etc) y grabarlo con el mismo nombre, y ahi es donde me sale el error. Porque estoy editando y grabando el registro con el mismo nombre de descripcion, pero yo solo quise editar el combo y seguir con el mismo nombre de descripcion del componente...

Espero que me puedan dar una mano...Gracias...
__________________
"Por medio de la perseverancia el caracol llegó al arca."
CHARLES SPURGEON
  #2 (permalink)  
Antiguo 21/12/2011, 06:00
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Evitar duplicado pero con execpciones

Si la comprobación la realizas en la lógica de negocio (o sea en el programa), deberías delegar esa tarea a la base de datos.

Si no quieres dos registros con el mismo nombre tienes que hacer que sea clave primaria o hacerlo clave única para que no pueda repetirse.

De esta manera cuando editases un registro y estuviese repetido, la base de datos te avisaría con un error que capturarías en el programa, mientras que si editas el propio registro no te daría error.

Saludos.
  #3 (permalink)  
Antiguo 22/12/2011, 10:10
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: Evitar duplicado pero con execpciones

Hola que tal, pues yo te recomendaria que la revision o validacion la hicieras en el fuente.

Primero revisas si existe el registro, si no existe lo insertas si ya existe lo actualizas.

IF NOT EXISTE( SELEC * FROM Tabla_X WHERE Nombre = 'X' )
BEGIN
INSERT INTO ....
END
ELSE
BEGIN
UPDATE.....
END

Se me hace que es mejor que se lo dejes a la BD por que por codigo, es un poco mas complicado a menos que lo manejes todo en variables globales y tengas que validar si cambio el valor de cada campo, pero si son varios campos es algo enfadoso.
  #4 (permalink)  
Antiguo 22/12/2011, 13:44
Avatar de edbc92  
Fecha de Ingreso: octubre-2010
Ubicación: Lima - Los Olivos
Mensajes: 93
Antigüedad: 13 años, 5 meses
Puntos: 5
Respuesta: Evitar duplicado pero con execpciones

Claro si lo he hecho con consultas a la bd...En fin gracias a ambos por su ayuda...De todas maneras encontré la solución...Inicialmente este era mi código que me valida si existe alguno en la bd a la hora de insertar un nuevo registro:


Código vb:
Ver original
  1. sql = "select desc_ciclo from ciclos where desc_ciclo=@desc"
  2.                     cmd = New SqlCommand(sql, cn)
  3.                     cmd.Parameters.AddWithValue("@desc", txt_desc.Text)
  4.                     If cmd.ExecuteScalar <> "" Then
  5.                               MsgBox("duplicado", MsgBoxStyle.Exclamation, "Error")
  6.                         Exit Sub
  7.                     End If


Y este código es el que yo quería usar para editar algun registro pero que me permita editarlo siendo el mismo registro y solo cambiar algunas cosas del registro:

Código vb:
Ver original
  1. sql = "select count(*) from ciclos where desc_ciclo=@desc and cod_ciclo<>@cod"
  2.                     cmd = New SqlCommand(sql, cn)
  3.                     cmd.Parameters.AddWithValue("@desc", txt_desc.Text)
  4.                     cmd.Parameters.AddWithValue("@cod", lblcod.Text)
  5.                     If cmd.ExecuteScalar > 0 Then
  6.                                MsgBox("duplicado", MsgBoxStyle.Exclamation, "Error")
  7.                         Exit Sub
  8.                     End If

Quizás esto ayude a alguien que tenga un problema parecido...Hablamos
__________________
"Por medio de la perseverancia el caracol llegó al arca."
CHARLES SPURGEON

Etiquetas: duplicado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:02.