jueves, 22 de junio de 2017

Locate: función para buscar en un TDataSet

Locate es una función pública de la clase TDataSet para encontrar un registro y posicionar sobre él el puntero, muy práctico para utilizar juntamente con un TDBGrid. Si se encuentra lo buscado retorna true y posiciona el puntero sobre el registro, caso contrario, retorna false y el puntero no se mueve.

Ejemplo:

DMInsu.ZQ.Locate ( 'insumo' , edBuscar.Text, [loCaseInsensitive, loPartialKey] );

Busca en el campo llamado insumo el texto ingresado en el TEdit buscar, ignorando mayúsculas y minúscalas y aceptando encontrar parcialmente, es decir, si el usuario ingresó "az" y existe un registro con el campo insumo con el valor "azúcar", devolverá true.
Para el caso de buscar número enteros, como por ejemplo un ID, funciona correctamente pero no se deben especificar las opciones de búsqueda.

DMInsu.ZQ.Locate ( 'id' , edBuscar.Text, []);

También se pueden realizar búsquedas complejas con varios campos y pasar un vector (array).

loCaseInsensitive y loPartialKey son las únicas opciones.

Más información:
http://wiki.freepascal.org/locate
http://lazarus-ccr.sourceforge.net/docs/fcl/db/tdataset.locate.html
http://lazarus-ccr.sourceforge.net/docs/fcl/db/tlocateoption.html

domingo, 11 de junio de 2017

Calcular diferencia entre fechas

La función DaysBetween retorna el número de días entre dos fechas.

function DaysBetween (const ANow, aThen: TDateTime):Integer;

El primer parámetro es la fecha que se restará de la fecha del segundo parámetro. La función devuelve un entero que es la diferencia en días entre aThen y aNow, es decir, aThen - aNow.

Ejemplo:


var
  fechaInicio, fechaFin : TDate;
  intDias : Integer;
begin
  fechaInicio := StrToDate ('11/06/2017');
  fechaFin := StrToDate ('12/06/2017');
  intDias := DaysBetween (fechaInicio, fechaFin);
  ShowMessage (IntToStr (intDias)); // devuelve 1
end;