PDA

Ver la Versión Completa : Ingresar solo Dos decimales en DBGrid


georgejg
19-05-2008, 17:06:11
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:


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.


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
Hola georgejg, para capturar el mensaje de error, puedes hacer lo siguiente en el evento OnSetText de tu campo.


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