![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
tal vez te pueda servir el "Onvalidate" de los campos?
(boton derecho sobre el componente de la tabla o query, y luego click en fieldsEditor, le pones en agregar todos, los que no agregues no podras trabajar con ellos) y luego seleccionas el campo y en el object inspector en eventos seleccionas el OnValidate te genera algo asi como: procedure TForm1.Table1enteroValidate(Sender: TField); begin If Sender.NewValue < Sender.OldValue Then Raise ERangeError.CreateFmt( '%d debe ser mayor a %d',[Integer(Sender.NewValue), Integer(Sender.OldValue)]); end; si mal no recuerdo puedes generar un "sysutils.Abort" para que se cancele el posteo de la informacion |
|
#2
|
|||
|
|||
|
Lo siento pero con el onValidate tambien lo he probado y nada tambien salta ese error. No puede ser que nadie haya echo la validacion de algun precio que se introduzca o alguna cosa simiilar.
Tram. |
|
#3
|
|||
|
|||
|
Me parece q el error no lo tienes en Delphi sino en Access. Abre tu BD con Access y verifica este campo. O mejor deja de usar Acces y usa el Firebird Embedded por ejemplo..
|
|
#4
|
||||
|
||||
|
El problema es que se trata de un EDatabaseError, y es controlado por el propio DBedit. Los EdatabaseError no tienen codigo de error, por tanto, se hace más dificil capturarlo.
Como dije antes, con esto: Si se captura parcialmente el error. El problema en sí, es que un DBEdit hereda de TCustomMaskEdit que trabaja con texto, al intentar convertir el texto a float, es cuando lanza ese error: Constante de texto usada:SInvalidFloatValue (Unidad DBConst, linea 28) que se lanza desde: TFloatField.SetAsString (Unidad DB, linea 4905) La forma más facil de capturar el error es en evento OnSetText del propio campo de la base de datos. (Doble clic a tu tabla, clic al campo en cuestion, inspector de objetos--> eventos -->setText)
Puedes construir una rutina genérica y asignarla a todos los campos de tipo Float que tengas. Un saludo |
|
#5
|
|||
|
|||
|
Gracias por la respuesta lepe, he puesto el codigo que m'he has dixo en el evento settext del campo de la tabla, y gracias a esto si introduzco un precio equivocado (ej. 44,,7) me salta el error, hasta aqui perfecto, pero si modifico un precio y introduzco un valor correcto (ej. 44,7), se dispara el evento no muestra el error pero en el componente DBedit sigue habiendo el valor anterior, es decir es como si no hubiera introducido nada. Como puedo hacer para que el valor introducido se quede en el DBedit?, ya que si assigno el texto a la tabla haria un bucle infinito!
Tram. |
|
#6
|
||||
|
||||
|
Lamento ese inconveniente, obvié algunas pruebas:
El problema es que se producía una excepción al convertir el valor; la capturabamos mediante el except, pero no haciamos nada, por tanto el DBEdit no se "entera" de que ha habido un fallo e intenta validar el texto antiguo. Ahora nos aseguramos de que "se entere" mediante Sysutils.Abort, y además, si no ha habido fallo, asignamos nosotros el valor mediante Sender.AsString. Un saludo |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|