Ver Mensaje Individual
  #1  
Antiguo 25-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Reputación: 20
oscarac Va por buen camino
Mejor manera de validar un EDIT

buenas madrugadas

tengo un problema... no se si a alguien mas le sucede, pero a mi me esta rompiendo la cabeza....

como dice el titulo tengo algunos edits los cuales deben ser validados, entonces yo cree una rutina en la cual se validan los campos..

esta validacion se efectua de 2 formas

la primera de ellas me busca en la tabla por ejemplo Articulo, el codigo ingresado en el edit... si existe entonces el edit toma el valor de una variable publica la cual contiene el campo buscado

mas o menos asi
Código Delphi [-]
 
 if not VerificarArticulo (_Articulo) then
    begin
y VerificaArticulo es mas o menos asi
Código Delphi [-]
 
 
Function VerificarArticulo(_CodigoArt :String) :Boolean;
Var SqlStr : String;
begin
  if _CodigoArt <> '' then
    Begin
      dmComedor.qryBuscarArticulo.SQL.Clear;
      SqlStr := 'Select * From tblArticulo Where KOD = ' + QuotedStr(_CodigoArt) + ' Order By KOD';
      dmComedor.qryBuscarArticulo.SQL.Add(SqlStr);
      dmComedor.qryBuscarArticulo.Open;
      result := dmComedor.qryBuscarArticulo.RecordCount = 1;
      dmComedor.qryBuscarArticulo.First;  // por si las moscas
      dmComedor.vResultArticulo := dmComedor.qryBuscarArticuloKOD.AsString; // variables publicas
      dmComedor.vResultArticuloDescripcion := Trim (dmComedor.qryBuscarArticuloDESCL.AsString);
      dmComedor.qryBuscarArticulo.Close;
    End
  else
    Result := False;
end;

cuando hago esto funciona de las mil maravillas...

pero que pasa si el codigo ingresado no existe... entonces muestro una grilla con la informacion buscada

algo mas o menos asi

Código Delphi [-]
 
 if not VerificarArticulo (_Articulo) then // Si el codigo no esta o esta mal ingresado
    begin
      frmCatalogoArticulo := TfrmCatalogoArticulo.Create(Self);
      frmCatalogoArticulo.FormStyle := fsNormal;
      frmCatalogoArticulo.Position := poMainFormCenter;
      frmCatalogoArticulo.Visible := False;
      frmCatalogoArticulo.t_para := True;
      frmCatalogoArticulo.ShowModal;
    end;
  edtArticulo.Text := dmComedor.vResultArticulo;
  lblArticulo.Caption := Trim(dmComedor.vResultArticuloDescripcion);
  if edtArticulo.Text = '' then
    edtArticulo.SetFocus;

en el frmcatalogoArticulo tengo algo como esto
Código Delphi [-]
 
 
procedure TfrmCatalogoArticulo.FormKeyPress(Sender: TObject;
  var Key: Char);
begin
  if Key = #27 then
  begin
    key := #0;
    close;
  end;
  if key = #13 then
  begin
    if ActiveControl = dbgArticulo then
      begin
        if t_para then
          Begin
            dmComedor.vResultArticulo := qryArticuloKOD.AsString;
            dmComedor.vResultArticuloDescripcion := qryArticuloDESCL.AsString;
            qryArticulo.Close;
            Close;
          End
        Else
            btnModifica.Click;
      end
    Else
      Begin
        Perform(WM_NEXTDLGCTL,0,0);
        key := #0;
      end;
  end;
end;

pero resulta que cuando el foco sale del campo validado y "deberia" entrar al siguiente campo (En esta segunda forma de validar), pues el cursor desaparece, tampoco le hace caso al autoselect del siguiente campo yel siguiente campo (que tambien deberia ser validado) ni caso, no pasa por el evento onexit (del siguiente campo al primero validado)

me vuelve loco....
alguien sabe si estoy haciendo algo mal?, no es la forma correcta de validar?... como comentario adicional, menciono que esa formulario con la grilla que muestro en el segundo caso.. me sirve tambien como un "catalogo" o un "mantenimiento" de articulos donde puedo dar altas, modificar y hasta eliminar articulos


espero me haya echo comprender.....

esperando su pronta ayuda.....
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita