Clave candidata repetida

19/09/2007 - 23:20 por Jose Luis | Informe spam
Hola tengo una clave con una clave primaria y otra clave alternativa
(candidata). Esta ultima es digitada por el usuario. Como es normal no
debe repetirse por tanto le puse un Constraint UNIQUE en la base de datos.
Cuando el usuario trata de introducir una clave repetida en la candidata me
da el mensaje pero el usuario me dice que no ve en cual registro (PK) es que
esta repetida.

Como puedo mostrarle al usuario la clave primaria correspondiente donde ya
existe la clave candidata que se esta digitando?

SS2000

Jose Luis

Preguntas similare

Leer las respuestas

#6 Gustavo Larriera \(MVP\)
20/09/2007 - 16:37 | Informe spam
Lo que debería hacer la aplicación es atrapar en una excepción el error que
reciba del servidor de base de datos, formatear el error a lo que se desee y
luego mostrárselo al usuario.

En un buen diseño, la capa de presentación es la responsable de transformar
y mostrar los errores al usuario final. No es tarea a realizar por la capa
de acceso a datos.


Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.

"Jose Luis" <x> wrote in message
news:uaZiH8w%
Es un sistema en C# pero eso creo que no tiene importancia ya que ese tipo
de validaciones debe devolvermelas el servidor de datos.

Lo que me interesa es que la aplicacion me reciba el mensaje desde el
servidor de datos.

Jose Luis


"Gustavo Larriera (MVP)" wrote in message
news:eFoPr3w%
Qué programa está usando el usuario para introducir la clave?

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.

"Jose Luis" <x> wrote in message
news:%236sXxLw%
Hola tengo una clave con una clave primaria y otra clave alternativa
(candidata). Esta ultima es digitada por el usuario. Como es normal no
debe repetirse por tanto le puse un Constraint UNIQUE en la base de
datos. Cuando el usuario trata de introducir una clave repetida en la
candidata me da el mensaje pero el usuario me dice que no ve en cual
registro (PK) es que esta repetida.

Como puedo mostrarle al usuario la clave primaria correspondiente donde
ya existe la clave candidata que se esta digitando?

SS2000

Jose Luis









Respuesta Responder a este mensaje
#7 Jose Luis
20/09/2007 - 18:52 | Informe spam
No.. Yo me referia a eliminar el Constraint primero y luego armar el
trigger.


"Alejandro Mesa" wrote in message
news:
Hola Jose Luis,

No puedes usar un trigger para eso. Las restricciones tienen prioridad
ante
los triggers, por lo que si ocurre un error porque se esta violando la
restriccion, entonces el trigger no se dispara.

Ejemplo:

use tempdb
go

create table dbo.t1 (
c1 int not null unique
)
go

create trigger tr_t1_ins on dbo.t1
for insert
as
raiserror('pasé por aqui %s', 10, 1) with nowait
go

insert into dbo.t1 values(1)
go

insert into dbo.t1 values(1)
go

drop table dbo.t1
go


Una forma recomendable es hacer el insert y/o update mediante un
procedimiento almacenado y anter de hacer el insert o update, chequear la
existencia.

use tempdb
go

create table dbo.t1 (
c1 int not null unique
)
go

exec sp_addmessage 50001, 16, N'Error insertando en tabla dbo.t1, valor de
[c1] ya existente.'
go

create procedure dbo.usp_ins_t1
@c1 int
as
set nocount on

if exists (select * from dbo.t1 where c1 = @c1)
begin
raiserror (50001, 16, 1)
return -1
end
else
insert into dbo.t1(c1) values(@c1)

return 0
go

exec dbo.usp_ins_t1 1
go

exec dbo.usp_ins_t1 1
go

select * from dbo.t1
go

exec sp_dropmessage 50001
go

drop procedure dbo.usp_ins_t1
go

drop table dbo.t1
go


AMB


"Jose Luis" wrote:

Puede ser ambas cosas. Lo que busco es un mensaje de error mas legible
para
el usuario, ya he estado viendo que mejor lo pongo en un trigger para
insert
y update, pensaba que se podia alterar el mensaje de error que me da al
violarse el Unique Constraint pero parece que no se puede segun he estado
escudriñando en la ayuda.

Gracias de todos modos.

Jose Luis


"Alejandro Mesa" wrote in
message
news:
> Jose Luis,
>
> Estas tratando de insertar una nueva fila o estas actualizando la
> candidata
> en una fila existente?
>
>
> AMB
>
> "Jose Luis" wrote:
>
>> Es un sistema en C# pero eso creo que no tiene importancia ya que ese
>> tipo
>> de validaciones debe devolvermelas el servidor de datos.
>>
>> Lo que me interesa es que la aplicacion me reciba el mensaje desde el
>> servidor de datos.
>>
>> Jose Luis
>>
>>
>> "Gustavo Larriera (MVP)" wrote in message
>> news:eFoPr3w%
>> > Qué programa está usando el usuario para introducir la clave?
>> >
>> > Gustavo Larriera, Microsoft MVP
>> > https://mvp.support.microsoft.com/p...o.Larriera
>> > Este mensaje se proporciona tal como es, sin garantías de ninguna
>> > clase.
>> >
>> > "Jose Luis" <x> wrote in message
>> > news:%236sXxLw%
>> >> Hola tengo una clave con una clave primaria y otra clave
>> >> alternativa
>> >> (candidata). Esta ultima es digitada por el usuario. Como es
>> >> normal
>> >> no
>> >> debe repetirse por tanto le puse un Constraint UNIQUE en la base de
>> >> datos. Cuando el usuario trata de introducir una clave repetida en
>> >> la
>> >> candidata me da el mensaje pero el usuario me dice que no ve en
>> >> cual
>> >> registro (PK) es que esta repetida.
>> >>
>> >> Como puedo mostrarle al usuario la clave primaria correspondiente
>> >> donde
>> >> ya existe la clave candidata que se esta digitando?
>> >>
>> >> SS2000
>> >>
>> >> Jose Luis
>> >>
>> >
>> >
>>
>>
>>



Respuesta Responder a este mensaje
#8 Jose Luis
20/09/2007 - 18:55 | Informe spam
No me entendió bien.

Gracias de todos modos

Jose Luis

"Gustavo Larriera (MVP)" wrote in message
news:%23enr3O5%
Lo que debería hacer la aplicación es atrapar en una excepción el error
que reciba del servidor de base de datos, formatear el error a lo que se
desee y luego mostrárselo al usuario.

En un buen diseño, la capa de presentación es la responsable de
transformar y mostrar los errores al usuario final. No es tarea a realizar
por la capa de acceso a datos.


Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.

"Jose Luis" <x> wrote in message
news:uaZiH8w%
Es un sistema en C# pero eso creo que no tiene importancia ya que ese
tipo de validaciones debe devolvermelas el servidor de datos.

Lo que me interesa es que la aplicacion me reciba el mensaje desde el
servidor de datos.

Jose Luis


"Gustavo Larriera (MVP)" wrote in message
news:eFoPr3w%
Qué programa está usando el usuario para introducir la clave?

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.

"Jose Luis" <x> wrote in message
news:%236sXxLw%
Hola tengo una clave con una clave primaria y otra clave alternativa
(candidata). Esta ultima es digitada por el usuario. Como es normal
no debe repetirse por tanto le puse un Constraint UNIQUE en la base de
datos. Cuando el usuario trata de introducir una clave repetida en la
candidata me da el mensaje pero el usuario me dice que no ve en cual
registro (PK) es que esta repetida.

Como puedo mostrarle al usuario la clave primaria correspondiente donde
ya existe la clave candidata que se esta digitando?

SS2000

Jose Luis













Respuesta Responder a este mensaje
#9 Jose Luis
20/09/2007 - 19:05 | Informe spam
Me gusta mas la idea del trigger (luego de eliminar el constraint) porque
asi si se introducen datos desde diferentes sistemas tengo el control mas
centralizado ya que por un SP es mas dificil lograr que siempre me vayan a
introducir datos a traves del SP disenado para eso..

Gracias por la ayuda, Alejandro.

Jose Luis.

"Alejandro Mesa" wrote in message
news:
Hola Jose Luis,

No puedes usar un trigger para eso. Las restricciones tienen prioridad
ante
los triggers, por lo que si ocurre un error porque se esta violando la
restriccion, entonces el trigger no se dispara.

Ejemplo:

use tempdb
go

create table dbo.t1 (
c1 int not null unique
)
go

create trigger tr_t1_ins on dbo.t1
for insert
as
raiserror('pasé por aqui %s', 10, 1) with nowait
go

insert into dbo.t1 values(1)
go

insert into dbo.t1 values(1)
go

drop table dbo.t1
go


Una forma recomendable es hacer el insert y/o update mediante un
procedimiento almacenado y anter de hacer el insert o update, chequear la
existencia.

use tempdb
go

create table dbo.t1 (
c1 int not null unique
)
go

exec sp_addmessage 50001, 16, N'Error insertando en tabla dbo.t1, valor de
[c1] ya existente.'
go

create procedure dbo.usp_ins_t1
@c1 int
as
set nocount on

if exists (select * from dbo.t1 where c1 = @c1)
begin
raiserror (50001, 16, 1)
return -1
end
else
insert into dbo.t1(c1) values(@c1)

return 0
go

exec dbo.usp_ins_t1 1
go

exec dbo.usp_ins_t1 1
go

select * from dbo.t1
go

exec sp_dropmessage 50001
go

drop procedure dbo.usp_ins_t1
go

drop table dbo.t1
go


AMB


"Jose Luis" wrote:

Puede ser ambas cosas. Lo que busco es un mensaje de error mas legible
para
el usuario, ya he estado viendo que mejor lo pongo en un trigger para
insert
y update, pensaba que se podia alterar el mensaje de error que me da al
violarse el Unique Constraint pero parece que no se puede segun he estado
escudriñando en la ayuda.

Gracias de todos modos.

Jose Luis


"Alejandro Mesa" wrote in
message
news:
> Jose Luis,
>
> Estas tratando de insertar una nueva fila o estas actualizando la
> candidata
> en una fila existente?
>
>
> AMB
>
> "Jose Luis" wrote:
>
>> Es un sistema en C# pero eso creo que no tiene importancia ya que ese
>> tipo
>> de validaciones debe devolvermelas el servidor de datos.
>>
>> Lo que me interesa es que la aplicacion me reciba el mensaje desde el
>> servidor de datos.
>>
>> Jose Luis
>>
>>
>> "Gustavo Larriera (MVP)" wrote in message
>> news:eFoPr3w%
>> > Qué programa está usando el usuario para introducir la clave?
>> >
>> > Gustavo Larriera, Microsoft MVP
>> > https://mvp.support.microsoft.com/p...o.Larriera
>> > Este mensaje se proporciona tal como es, sin garantías de ninguna
>> > clase.
>> >
>> > "Jose Luis" <x> wrote in message
>> > news:%236sXxLw%
>> >> Hola tengo una clave con una clave primaria y otra clave
>> >> alternativa
>> >> (candidata). Esta ultima es digitada por el usuario. Como es
>> >> normal
>> >> no
>> >> debe repetirse por tanto le puse un Constraint UNIQUE en la base de
>> >> datos. Cuando el usuario trata de introducir una clave repetida en
>> >> la
>> >> candidata me da el mensaje pero el usuario me dice que no ve en
>> >> cual
>> >> registro (PK) es que esta repetida.
>> >>
>> >> Como puedo mostrarle al usuario la clave primaria correspondiente
>> >> donde
>> >> ya existe la clave candidata que se esta digitando?
>> >>
>> >> SS2000
>> >>
>> >> Jose Luis
>> >>
>> >
>> >
>>
>>
>>



Respuesta Responder a este mensaje
#10 jcac
20/09/2007 - 19:50 | Informe spam
Hola Jose Luis,

Lo que puedes hacer es cuando haya terminado de indicar la clave candidata
tu aplicación busque en la BD si esta ya existe y se la muestre, por ejemplo
yo lo hago cuando pierdo el foco de un control, alli verifico si existe y le
indico que ya existe y si desea verla pues se la muestras. Esto sucede antes
de que vaya a grabar el usuario esto sucede cuando lo esta ingresando.
Espero te de una idea

Saludos

"Jose Luis" <x> escribió en el mensaje
news:%236sXxLw%
Hola tengo una clave con una clave primaria y otra clave alternativa
(candidata). Esta ultima es digitada por el usuario. Como es normal no
debe repetirse por tanto le puse un Constraint UNIQUE en la base de datos.
Cuando el usuario trata de introducir una clave repetida en la candidata
me da el mensaje pero el usuario me dice que no ve en cual registro (PK)
es que esta repetida.

Como puedo mostrarle al usuario la clave primaria correspondiente donde ya
existe la clave candidata que se esta digitando?

SS2000

Jose Luis

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