Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-10-2005
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 21
luisgutierrezb Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 03-10-2005
tramjauer tramjauer is offline
Miembro
 
Registrado: ene 2005
Posts: 42
Poder: 0
tramjauer Va por buen camino
Unhappy

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.
Responder Con Cita
  #3  
Antiguo 04-10-2005
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 23
Delfino Va por buen camino
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..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #4  
Antiguo 04-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
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:
Código Delphi [-]
procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
  E: Exception);
begin
     if E is DatabaseError then
       ShowMessage('mi mensaje' + E.Message+'   '+EDatabaseError(E).ClassName);
end;
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)

Código Delphi [-]
procedure TForm1.Table1BultosSetText(Sender: TField; const Text: String);
begin
TRY
     StrToFloat(Text)
except
    ShowMessage('mi mensaje de fallo' );
end;
end;

Puedes construir una rutina genérica y asignarla a todos los campos de tipo Float que tengas.

Un saludo
Responder Con Cita
  #5  
Antiguo 04-10-2005
tramjauer tramjauer is offline
Miembro
 
Registrado: ene 2005
Posts: 42
Poder: 0
tramjauer Va por buen camino
Question

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.
Responder Con Cita
  #6  
Antiguo 05-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Lamento ese inconveniente, obvié algunas pruebas:
Código Delphi [-]
  try
    StrToFloat(Text);  //probamos a convertir
    Sender.AsString := Text; // si no hay fallos al convertir, 
                                      // asignamos el nuevo valor
  except
    ShowMessage('mi fallo');
    sysutils.Abort; // excepción silenciosa.
  end;

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
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:03:33.


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
Copyright 1996-2007 Club Delphi