miércoles, 4 de julio de 2018

TDBLookupComboBox validar e impedir NULL.

Lo más simple es definir la propiedad Style en csDropDownList pero no siempre es lo que necesitamos. Por ejemplo cuando son muchos los registros que se cargan en el combo, le damos al usuario la posibilidad de que escriba las primeras letras y le traiga coincidencias, esto se logra estableciendo a True la propiedad AutoComplete. La contra es que el usuario puede abandonar el combo sin ninguna coincidencia, dejando el KeyValue (que es del tipo Variant) en Null. Esto a su vez lanzará un error si la validación la hacemos con números enteros, por ejemplo if combo.KeyValue<0 then...

Opción 1: no permitir que el usuario abandone el combo sin la correcta selección de un elemento.

Definir el evento OnExit.

procedure TFCProv.cmbLocalidadExit(Sender: TObject);
begin
  if cmbLocalidad.KeyValue=Null then
  begin
    ShowMessage('Seleccione una localidad.');
    cmbLocalidad.SetFocus;
  end;
end;


Opción 2: en algún caso en que se permite no seleccionar nada en el combo y debemos guardar 0 (cero) en la base de datos.


Por ejemplo, las actividades de 2 a 5 son opcionales y al crear el Form se les estable el valor de KeyValue en 0 para que no muestre nada. (La normalización y desnormalización de bases de datos está fuera del alcance de este ejemplo.).

if cmbActividad2.KeyValue=Null then
  DMProv.ZQProv.FieldByName('actividad2').AsInteger:=0
else
  DMProv.ZQProv.FieldByName('actividad2').AsInteger:=cmbActividad2.KeyValue;


Esta validación se hace al momento de guardar el registro y en todos los combos excepto el 1, si KeyValue es Null se guarda 0, caso contrario el valor de KeyValue.

No hay comentarios:

Publicar un comentario