Ver Mensaje Individual
  #2  
Antiguo 04-08-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Reputación: 22
andres1569 Va por buen camino
Hola:

Esa comprobación la puedes hacer a nivel del Dataset, en el evento BeforePost, de esta manera retrasas la comprobación al momento en que el usuario decide grabar el registro. Esto es cuestión de gustos, de gustos del usuario , puesto que quizás esté metiendo datos en tentativa y le moleste que no le deje pasar de un campo determinado. El hacerlo desde el Grid implica interceptar el evento OnColExit (cuando se sale de la columna) y ahí hacer las comprobaciones. De todas formas, ten en cuenta que esta restricción afectará al Grid siempre, aunque el usuario esté solamente navegando por él, pudiendo resultar a veces molesto.

Código:
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
  with DBGrid1 do
  if (SelectedField <> nil) AND (SelectedField.FieldName='Cantidad') AND
     (SelectedField.IsNull) AND (SelectedField.DataSet.State = dsInsert) then 
    Abort;
end;
Comprobamos que el campo sea el que buscamos (FieldName) y que no sea null, y que realmente estamos insertando un nuevo registro (dsInsert). Había pensado en comprobar también que el DataSet estuviera en modo Edición (AND (SelectedField.DataSet.State in [dsInsert, dsEdit])), pero no se obtiene el efecto deseado puesto que cuando el usuario navega por el DBGrid, éste no se pone en Edición salvo que escribamos algo, pero si pasamos de largo sin teclear ni se entera.

De todas formas, ten en cuenta que la comporbación de que el campo no sea null deberá ir igualmente a nivel de tabla, puedes poner Required al campo en cuestión, para que en ningún caso se quede a null. Si lo haces así, el código anterior podría quedar así:

Código:
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
  with DBGrid1 do
  if (SelectedField <> nil) AND (SelectedField.Required) AND
     (SelectedField.IsNull) AND (SelectedField.DataSet.State = dsInsert) then 
    Abort;
end;
__________________
Guía de Estilo
Responder Con Cita