Power Builder - Mensaje si ya esta en la tabla

 
Vista:
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Mensaje si ya esta en la tabla

Publicado por mariela D (231 intervenciones) el 23/10/2013 04:13:16
Hola a todos, tengo un inconveniente en un ejercicio que no tengo idea como hacerlo.

Lo que pasa es que nos han dejado como tarea realizar lo siguiente:

De una tabla llamada trabajadores, en donde se han guardado unos 100 trabajadores por lo menos, y sus campos son (DNI, Apellidos y nombres, cargo, fecha_ingreso, Documentos_presen, Observac), he creado un datawindow en donde se nos pide que cuando yo ingrese un nuevo trabajador y digite su DNI (campo numerico) el campo DNI del datawindow, al pasar al siguiente campo, si es que esta repetido automaticamente me emita un mensaje que diga ESTE DNI YA EXISTE y lo borre para que no pueda agregarlo.

Necesito que me ayuden con esto, estare infinitamente agradecida.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Mensaje si ya esta en la tabla

Publicado por Asdlkj (4 intervenciones) el 23/10/2013 08:50:28
Este código se establece dentro del Datawindow

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Evento: itemchanged
Choose case dwo.name
   case "DNI"
      Post event itemfocuschanged(row, dwo)
end choose
 
Evento: itemfocuschanged
choose case dwo.name
   case "DNI"
      string ls_existe=""
      Select "1" into :ls_existe from trabajadores (nolock) where dni = :data;
      if ls_existe="1" then
         messagebox("Sistema", "El DNI ingresado ya Existe",exclamation!)
         this.setitem(row,"DNI","")
         this.setcolumn("DNI")
         return
      end if
end choose
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Mensaje si ya esta en la tabla

Publicado por mariela D (231 intervenciones) el 23/10/2013 21:36:03
Hola Asdlkj, recien llego de la Uni y vi tu respuesta, la estoy probando y te comento que me arroja un error en el evento :
Evento: itemfocuschanged

Undefined variable :data

en todo caso hay que declrarla? y de que tipo,

mas abajo medice otro error

database C0038: SQLSTATE=S0002[Sybase] [OBDC Driver] [Adaptive Server Anywhere]Procedure 'trabajadores' nod found

Gracias amigo por tu apoyo
espero tu respuesta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mensaje si ya esta en la tabla

Publicado por JeinnerH (15 intervenciones) el 23/10/2013 22:16:39
Te equivocaste de Evento... fíjate bien en la respuesta que te dieron.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mensaje si ya esta en la tabla

Publicado por Asdlkj (4 intervenciones) el 23/10/2013 23:07:00
Perdoname fue error mío, moria de sueño cuando respondí
contexto: la variable "data" almacena el valor del campo u columna en la que te encuentres ubicada y esa variable se encuentra dentro de los parametros del evento "itemchanged" y no "itemfocuschanged"
Aqui te dejo la corrección
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Evento: itemfocuschanged
choose case dwo.name
   case "DNI"
      string ls_existe=""
      string ls_dni=""
      ls_dni = this.Getitemstring(row, "DNI")
      Select "1" into :ls_existe from trabajadores where dni = :ls_dni;
      if ls_existe="1" then
         messagebox("Sistema", "El DNI ingresado ya Existe",exclamation!)
         this.setitem(row,"DNI","")
         this.setcolumn("DNI")
         return
      end if
end choose

Pdta:
la tabla "trabajadores" a la que hago referencia es la tabla que se encuentra en tu BD no se si esa sea la tabla que utilizas si no es solo modifica el nombre.
no eh probado el código, pero esta es la sintaxis correcta si tienes problemas lo posteas.
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Mensaje si ya esta en la tabla

Publicado por mariela D (231 intervenciones) el 23/10/2013 23:59:24
Ok amigo, ya no me emite el error, pero no muestra el mensaje si es que es un DNI repetido

messagebox("Sistema", "El DNI ingresado ya Existe",exclamation!)

estoy digitando un DNI que ya existe en la tabla y cuando le doy tab para pasar al otro campo no me dice nada me deja seguir escribiendo, que podriaser.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Mensaje si ya esta en la tabla

Publicado por mariela D (231 intervenciones) el 24/10/2013 04:13:39
No te olvides que el campo DNI es numerico, debe ser por eso?

otra cosa es que ya lo pegue este codigo debajo del primero en el evento itemchanged y nada igual no emite el mensaje

si invierto los codigos, la maquina se cuelga como si estuviera abriendo algo y no carga, tengo que eliminar la tarea para reactivar el equipo.

gracias por tu apoyo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Mensaje si ya esta en la tabla

Publicado por Mariela D (231 intervenciones) el 26/10/2013 01:06:16
Hola Asdlkj:
Gracias de todas formas, ya encontré el problema.
Lo que ocurría era por que era campo numérico, por eso no obedecía, ya corregí el código y es de esta forma como debe de quedar:

INTEGER li_return = 0
INTEGER li_numero
CHOOSE CASE LOWER(dwo.name)
CASE 'dni'
li_numero = INTEGER(data)
IF (li_numero > 1 ) THEN
li_return = 1
Messagebox("Mensaje Importante", "El DNI del trabajador ingresado ya esta registrado, por favor verifique nuevamente este DNI",exclamation!)
END IF
END CHOOSE
RETURN(li_return)

Atte.

Mariela D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar