Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ingresar solo Dos decimales en DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=56494)

georgejg 19-05-2008 17:06:11

Ingresar solo Dos decimales en DBGrid
 
hola a todos..

tengo la siguiente inquietud es posible controlar el ingreso de solo dos Decimales en un DBGrid???

o controlar q solo se ingrese un punto en el DBgrid:confused::confused:

les cuenta la historia..
primero realizo el ingreso de un nuevo registro usando los Edit con el siguiente codigo puedo controlar q al ingresar el punto solo permita ingresar dos decimales:

Código Delphi [-]
 
procedure TUnit_Main.Edit21KeyPress(Sender: TObject; var Key: Char);
Var i: Integer;
    pos: Cardinal;
begin
   i:=0;
//Permite que desepues de se digite el . solo se puedan ingresar 2 Registros Mas
  if ( StrScan('0123456789.'+chr(7)+chr(8), Key) = nil ) then  Key := #0;
 // cambia el punto decimal por coma
  if key = '.' then key := '.';
  //controlar entrada una sola coma
  for i := 1 to length(Edit1.Text) do
    if ( copy(Edit1.Text,i,1) = '.' ) and not ( StrScan('.', Key) = nil ) then  Key := #0;
 
 with Sender as TEdit do
  begin
   pos := System.Pos('.', Text);
   if not LongBool(Pos) then Dec(Pos);
   ReadOnly := not (Key in ['0'..'9', '.', #8]) or
               (Pos <> $FFFFFFFF) and (Key = '.') or
               ((Key <> #8) and (Pos < (SelStart - 1)));
  end;

funciona a la perfeccion..

entonces guardo lo registros y luego si quiero modificarlos utilizo un Dbgrid (conectado a un DataSource y este a un Query)
que me trae los datos.

el problema radica en q si yo al modificar el dato ingreso por ejemplo 23.22.33 el grid muestra "23.22.33" is not a valid floating point value for field "COLUMNA1"

no se si se puede ya sea capturar el error y mostrarlo de otra manera.

o validar el grid para que prohiba el ingreso de mas de un . (punto) en la celda.

:confused::confused::confused::(:(:confused::confused::confused:

Caro 19-05-2008 18:18:48

Hola georgejg, para capturar el mensaje de error, puedes hacer lo siguiente en el evento OnSetText de tu campo.

Código Delphi [-]
procedure TForm1.ADOQuery1campoSetText(Sender: TField;
  const Text: String);
begin
 try
  sender.AsFloat:= StrtoFloat(text);
 except
  raise EDatabaseError.Create('Formato incorrecto');
 end;
end;

Saluditos

georgejg 19-05-2008 19:51:14

Cita:

Empezado por Caro (Mensaje 287729)
Hola georgejg, para capturar el mensaje de error, puedes hacer lo siguiente en el evento OnSetText de tu campo.

Código Delphi [-]
procedure TForm1.ADOQuery1campoSetText(Sender: TField;
  const Text: String);
begin
 try
  sender.AsFloat:= StrtoFloat(text);
 except
  raise EDatabaseError.Create('Formato incorrecto');
 end;
end;

Saluditos

Excelente respuesta Caro funciona perfectamente..


Muchas gracias por contestar..

Saludos
:):):D:D


La franja horaria es GMT +2. Ahora son las 12:44:39.

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