![]() |
Controlar edición de DBEdit
Hola a todos, estoy creando una app con C++ Builder y tengo un formulario que obtiene información de una BD de MySql mediante algunos DBEdit, muestra un campo de tipo flotante con 2 decimales, mi duda es........cómo controlo de manera manual que el usuario ingrese un flotante válido en ese DBEdit? Me explico, ya restringí mediante evento OnKeyPress, que el usuario sólo ingrese números y el punto decimal, pero al ingresa por ejemplo: 4.50.2 es el sistema que me arroja el mensaje de error (en inglés), lo que quiero es manejar de manera manual ese mensaje de error para mostrar un texto que yo desee, si no me equivoco, el término correcto sería "validar" manualmente ese dato editado. Gracias
|
Yo creo que lo más sencillo es que no intentes controlar los errores en la entrada del usurio, sino que esperes a que la Base de Datos te devuelva el error, lo captures y lo muestres.
|
1 Archivos Adjunto(s)
Cita:
Adjunto una captura, al momento de editar el Precio de compra y querer pasar al sgte, me salta ese error, q claro, es lo correcto, pero un usuario q no sepa inglés no va a entender el mensaje de error. |
Al ser un DBEdit, estará asociado a un dataset y en este se puede realizar la validación que buscas en el evento OnValidate del campo "precioc_prod".
Si no tienes persistentes los campos en el dataset, sería agregarlos en tiempo de diseño. Y esto te daría la opción de establecer el código de ese evento. |
Hola.
Una opción es interceptar el evento OnSetText del campo asociado que se dispara cada vez que se recibe un nuevo valor pero antes de ser asignado. Por ejemplo, si el campo asociado al DBEdit se llamase "Numero":
Saludos :) |
Traté con tu código, en lo que equivaldría a c++ builder, pero me arroja error en la línea donde creas la excepción, que creo q eso es lo que necesito, de casualidad no sabes el código para el C builder? O qué es lo que estaría haciendo mal yo?
Código:
void __fastcall Tdmquerys::qdetdetallespreciov_prodSetText(TField *Sender, const UnicodeString Text)Gracias por responder |
Cita:
A qué te refieres con campos "persistentes"? Investigando me topé con ese término, pero no encontré info.....entendible jeje |
Hola.
Cita:
Código PHP:
|
Hola de nuevo.
Y en tu código podes usar el parámetro Text directamente: Código PHP:
|
Cita:
Genio!!!! Si, me ha resultado, eso era lo que estaba necesitando, muchas gracias void __fastcall Tdmquerys::qdetdetallesprecioc_prodSetText(TField *Sender, const UnicodeString Text) Código:
{Gracias y saludos :D |
Cita:
|
Hola.
Si TryStrToFloat devuelve verdadero ( el numero es correcto ) continúa con el flujo del programa, en caso contrario lanza la excepción. Saludos :) |
Eso creí, pero, mi pregunta iba porque lanza la excepción correctamente, pero ahora, al colocar un valor correcto, el DBEdit vuelve al valor que tenía de inicio, es como si se refrescara y no queda el valor q edité (ReadOnly está en False, por si acaso :D)
|
Hola.
Ahora te entiendo, no tengo como probarlo pero creo que sería: Código PHP:
|
Cita:
Exacto! Eso era lo q faltaba, ahora si funciona todo correctamente, mil gracias! |
| La franja horaria es GMT +2. Ahora son las 14:58:12. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi