Power Builder - Consulta.

   
Vista:

Consulta.

Publicado por Jesus Faustor (8 intervenciones) el 20/10/2009 18:59:04
Hola soy practicante, recien empiezo en lo que es programacion powerbuilder, estoy haciendo parcticas en una aplicacion powerbuilder 8, tengo una consulta que hacerles, espero puedan ayudarme. tengo una caja de texto cuyo tipo de dato es varchar, lo que quisiera es que esa caja de texto solo me admita hasta cierta cantidad de caracteres, por decir que solo acepte 100 caracteres, y si el ususario pasa eso 100 que no le permita avanzar y le muestre un mensaje. la otra consulta es sobre el mismo caso, este campo es en la abse de datos varchar(1000) pero en el datawindows figura como varchar(250) hay alguna manera de aumentar esa longitud? muchas gracias por su ayuda. saludos.
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

RE:Consulta.

Publicado por miguell (153 intervenciones) el 20/10/2009 22:11:07
hola:

si eres principiante te recomiendo
http://powerbuilder.hyderabad-colleges.com/
El curso online de powerbuilder 7 te dará algo de luz sobre powerbuilder.
si quieres más material: te lo puedo mandar por correo.

Cito primero lo que quieres hacer:
"tengo una caja de texto cuyo tipo de dato es varchar, lo que quisiera es que esa caja de texto solo me admita hasta cierta cantidad de caracteres, por decir que solo acepte 100 caracteres, y si el ususario pasa eso 100 que no le permita avanzar y le muestre un mensaje"

solución A:
una caja de texto / single-lineEdit tiene una propiedad que se llama Limit. cuando está a 0 no se aplicará ninguna, si la pones a 100, el usuario no podrá teclear más de 100 carácteres. La desventaja para ti es que no tendrías oportunidad de dar un mensaje cuando pase del límite ya que ese caso no daría poniendo el limite a 100.

solución B:
dejar el limit del singlelineedit a 0 y ...
los single-line-edits tienen un evento "modified" que se dispara cuando el cursor sale de la caja y haya habido un cambio en el contenido.
en el modified codificas lo siguiente:

if len ( this.text ) > 100 then
Messagebox('Información', 'No puede introducir más de 100 carácteres en .... ', information!, ok!)
this.text = mid( this.text, 1, 100) // quitar los carácteres que se pasan de longitud máx. de 100
this.post setfocus( ) // para reposicionar el foco en este control cuando haya error
end if

cito de nuevo:
"la otra consulta es sobre el mismo caso, este campo es en la abse de datos varchar(1000) pero en el datawindows figura como varchar(250) hay alguna manera de aumentar esa longitud? "

solución:
para empezar si el limite / longitud interna de una columna de tu datawindow no coincide con su definición en la base de datos, eso me da por pensar que alguién ha cambiado la longitud del campo en la base de datos, después de haber sido construido el datawindow. Lo puedes corregir fácilmente provocando un pequeño cambio en el select de la que tira el datawindow. Si está en modo gráfico, conviertelo a modo texto (menú "Design", "Convert to syntax") y mete algún intro o espacio en blanco en algún lado donde no haga daño (antes de la palabra select por ejemplo). (cuando vuelves al 'frontEnd' del datawindow donde se ven las columnas, se volverán a leer las definiciones de las columnas de la base de datos) o exportando e importando (depués de modificar la longitud).
Una columna en un datawindow tamibién tiene una propiedad Limit. lo mismo: a 0 no limita y a 1000 limitaría a 1000.

A)
poner en el atributo Edit, Limit de la columna el 'limit' a 1000 pero tendrás el mismo problema que antes. no te da la oportunidad de dar un mensaje de validación. Puedes codificar la propiedad 'validation' pero no lo aconsejo dado que si haces esto mucho el código se vuelve dificil de mantener por otros.

B)
definir una variable de instancia:
boolean ib_error_itemchanged = false

codificar los eventos itemchanged y el itemerror del control del datawindow (donde lo tengas pegado como control en por ejemplo la ventana):
entonces hay que dejar el limite en 0 otra vez.

evento itemchanged:
---------------------------
string ls_message

choose case dwo.name
case 'a'
if len( DATA ) > 1000 then
ls_message = 'La longitud de la columna ' + dwo.name + ' no puede pasar de 1000.'
ib_error_itemchanged = true // usado luego en itemerror event
messagebox('Información', ls_message )
return 1 // return 1 provocará el itemerror después
end if
case else
// otra cosa
end choose

evento itemerror:
-----------------------
// para evitar que salga el error por defecto en ingés de sistema, cuando ya la hemos
// dado un mensaje de error en el evento itemchanged
if ib_error_itemchanged then
ib_error_itemchanged = false
return 1 // evita el mensaje en inglés
end if

bueno, pues ya tienes material, intenta buscar algo de información sobre el itemchanged ya que si entiendes bien como y cuando se dispara este evento, te ahorrarás mucho dolor de cabeza.

saludos,
Miguel L.
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

RE:Consulta.

Publicado por jesus faustor g (8 intervenciones) el 25/10/2009 00:04:20
GRACIAS AMIGO, MUCHAS GRACIAS.
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

RE:Consulta.

Publicado por miguell (153 intervenciones) el 25/10/2009 00:34:27
de nada,

en tu última pregunta te describo cómo lograrlo con el evento
editChanged en vez de ItemChanged que parece que sea más lo que quieres hacer, aunque bueno, no me gusta tanto la codificación de ese evento (según lo que hagas pero he visto barbaridades), dado que se ejecuta para cada letra tecleado.

Miguel
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