Creo q existe una manera mejor..

26/05/2006 - 20:01 por Karlos Traveceras | Informe spam
Mis estimados:

trabajo con tablas q tienen llave,
cuando quiero dar de alta un registro nuevo..

primero valido q no exista .. pero lo hago de una manera q creo q es un poco
inadecuada..

creo un ciclo for next y dentro del ciclo voy checando linea por linea de la
tabla.
si encuentra un campo igual manda un msg de error. de lo contrario continua
con la actualizacion de la tabla.

pero me imagino q existe una manera mejor y mas rapida de saber dentro de
una tabla si existe un registro sin hacer un barrido de la tabla completa.

si alguien me pude dar pistas se los agradeceria mucho..

Saludos..

Karlos Traveceras

Preguntas similare

Leer las respuestas

#6 Eduardo A. Morcillo [MS MVP VB]
27/05/2006 - 05:50 | Informe spam
Usa WHERE en el SELECT:

SELECT * FROM TABLA WHERE CampoId = ValorIdABuscar

Como en realidad tampoco necesitas los campos puedes hacer:

SELECT COUNT(*) FROM Tabla WHERE CampoId = ValorIdABuscar

Si lo ejecutas con ExecuteScalar obtendras 0 si el registro no existe o 1 si
el registro existe.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C
http://spaces.msn.com/members/emorcillo/
Respuesta Responder a este mensaje
#7 Eduardo Alvarado Meza
27/05/2006 - 10:42 | Informe spam
Eduardo, lo del Select Count ó *, estaria bien, pero tendria la dificultad
de estar creando por formulario de registro un select especifico para
validar si ya existe un registro con esas llaves.

Talvez pordria suguerirsele que meta su adapter.update dentro de un try,
logicamente el motor de bd no lo va a dejar y le lanzara una sqlexception,
algo asi:

Try
Adapter.Update(.)
catch ex As system.data.Sqlclient.SqlException
if ex.number = 2627 Then
'Si el numero del error es coincidente al relacionado con lo que
queremos validar (llaves no 'repetidas), comunicarle al usuario que el
id ya existe, que lo cambie o sugerirle
'automaticamete uno.
end If
End try

De esta forma el codigo seria igual para todos, y si tiene algo de herencia
en sus forms le puede ayudar.

Habria algun problema con esta logica, o perdida de eficiencia/eficacia con
respecto a las otras?

Gracias
Respuesta Responder a este mensaje
#8 David Sans
28/05/2006 - 11:17 | Informe spam
Hola

Es mejor la opción de Eduardo.
Creo que lanzar "exceptions" no es una buena práctica. Además relentiza el sistema.
Para no tener que duplicar tanto las consulta a la base de datos es mejor programar con una capa de acceso a datos.
En ella, tener funciones para lo que sea.
Por ejemplo una funcion que devuelva true/false si existe el codigo de un cliente.

Public Shared Function ExisteCliente(ByVal id As Integer) As bolean
' montar la sentencia que comentava Eduardo o llamar a un proceso almacenado
' ..
if resultadoconsulta = 1 then
return True
else
return false
end if
end function


Y luego en cualquier formulario solo tienes que hacer:

if ExisteCliente(12) then
MessageBox.Show("Si que existe el cliente 12")
else
MessageBox.Show("NO EXISTE el cliente 12")
end if


Un saludo y que te sirva de ayuda.
David Sans


"Eduardo Alvarado Meza" <ealvarado_15@(eliminarestetexto)hotmail.com> escribió en el mensaje
news:%
Eduardo, lo del Select Count ó *, estaria bien, pero tendria la dificultad de estar creando por formulario de registro un select
especifico para validar si ya existe un registro con esas llaves.

Talvez pordria suguerirsele que meta su adapter.update dentro de un try, logicamente el motor de bd no lo va a dejar y le lanzara
una sqlexception, algo asi:

Try
Adapter.Update(.)
catch ex As system.data.Sqlclient.SqlException
if ex.number = 2627 Then
'Si el numero del error es coincidente al relacionado con lo que queremos validar (llaves no 'repetidas), comunicarle al
usuario que el id ya existe, que lo cambie o sugerirle
'automaticamete uno.
end If
End try

De esta forma el codigo seria igual para todos, y si tiene algo de herencia en sus forms le puede ayudar.

Habria algun problema con esta logica, o perdida de eficiencia/eficacia con respecto a las otras?

Gracias

Respuesta Responder a este mensaje
#9 Lord Voldemort
29/05/2006 - 15:54 | Informe spam
mira man.. miralo asi.. se supone que quieres agregar nombres a una tabla..
pues agrega un indice al campo nombre, que sea unico y listo..
cuando mandes a grabar. pues si graba le dices al usuario que se grabo..
caso contrario pues muestras el error..
y no tienes que estar validando nada ni recorriendo nada...



"Karlos Traveceras" wrote in
message news:
Mis estimados:

trabajo con tablas q tienen llave,
cuando quiero dar de alta un registro nuevo..

primero valido q no exista .. pero lo hago de una manera q creo q es un
poco
inadecuada..

creo un ciclo for next y dentro del ciclo voy checando linea por linea de
la
tabla.
si encuentra un campo igual manda un msg de error. de lo contrario
continua
con la actualizacion de la tabla.

pero me imagino q existe una manera mejor y mas rapida de saber dentro de
una tabla si existe un registro sin hacer un barrido de la tabla completa.

si alguien me pude dar pistas se los agradeceria mucho..

Saludos..

Karlos Traveceras
Respuesta Responder a este mensaje
#10 Karlos Traveceras
29/05/2006 - 16:42 | Informe spam
Muchas gracias a todos.

tomare el consejo de Eduardo..
Saludos.



"Lord Voldemort" wrote:

mira man.. miralo asi.. se supone que quieres agregar nombres a una tabla..
pues agrega un indice al campo nombre, que sea unico y listo..
cuando mandes a grabar. pues si graba le dices al usuario que se grabo..
caso contrario pues muestras el error..
y no tienes que estar validando nada ni recorriendo nada...



"Karlos Traveceras" wrote in
message news:
> Mis estimados:
>
> trabajo con tablas q tienen llave,
> cuando quiero dar de alta un registro nuevo..
>
> primero valido q no exista .. pero lo hago de una manera q creo q es un
> poco
> inadecuada..
>
> creo un ciclo for next y dentro del ciclo voy checando linea por linea de
> la
> tabla.
> si encuentra un campo igual manda un msg de error. de lo contrario
> continua
> con la actualizacion de la tabla.
>
> pero me imagino q existe una manera mejor y mas rapida de saber dentro de
> una tabla si existe un registro sin hacer un barrido de la tabla completa.
>
> si alguien me pude dar pistas se los agradeceria mucho..
>
> Saludos..
>
> Karlos Traveceras



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida