Procedure CompletaDataField( Const pData : String ; pField : TFIELD ; const pErro : boolean = True );
var
DataStr : String;
Year, Month, Day : Word;
i, TotSepara : Integer;
begin
DataStr:= pData;
if DataStr = '' then
begin
pField.Value := NULL;
Exit;
end;
TotSepara := 0;
//Conta quantos numeros existem na Variaval DataStr( pData )
for i := 1 to Length(DataStr) do
begin
if not (DataStr in ['0'..'9']) then
begin
DataStr := FormatSettings.DateSeparator;
inc(TotSepara);
end;
end;
// Remove os Separadores de Data
while (DataStr <> '') and ( DataStr[Length(DataStr)] = FormatSettings.DateSeparator) do
begin
Delete(DataStr, Length(DataStr), 1);
Dec(TotSepara);
end;
// Pega o Ano mes e Dia
DecodeDate(Now, Year, Month, Day);
if TotSepara = 0 then
begin
case Length(DataStr) of
0 : DataStr := DateToStr(date);
1, 2 : DataStr := DataStr+FormatSettings.DateSeparator+IntToStr(Month);
4 : Insert(FormatSettings.DateSeparator, DataStr, 3);
6, 8 : begin
Insert(FormatSettings.DateSeparator, DataStr, 5);
Insert(FormatSettings.DateSeparator, DataStr, 3);
end;
end;
end;
try
pField.Value := StrToDate(DataStr);
except
if pErro = true then
pField.Value := Date
else
pField.Value := NULL;
end;
end;
//How to use
//Use this in OnSetText event the Field
procedure TFmBI0004.qry_vendedor_admissaoSetText(Sender: TField; const Text: string);
begin
inherited;
//The function complete the date
CompletaDataField(Text,Sender);
end;
var
DataStr : String;
Year, Month, Day : Word;
i, TotSepara : Integer;
begin
DataStr:= pData;
if DataStr = '' then
begin
pField.Value := NULL;
Exit;
end;
TotSepara := 0;
//Conta quantos numeros existem na Variaval DataStr( pData )
for i := 1 to Length(DataStr) do
begin
if not (DataStr in ['0'..'9']) then
begin
DataStr := FormatSettings.DateSeparator;
inc(TotSepara);
end;
end;
// Remove os Separadores de Data
while (DataStr <> '') and ( DataStr[Length(DataStr)] = FormatSettings.DateSeparator) do
begin
Delete(DataStr, Length(DataStr), 1);
Dec(TotSepara);
end;
// Pega o Ano mes e Dia
DecodeDate(Now, Year, Month, Day);
if TotSepara = 0 then
begin
case Length(DataStr) of
0 : DataStr := DateToStr(date);
1, 2 : DataStr := DataStr+FormatSettings.DateSeparator+IntToStr(Month);
4 : Insert(FormatSettings.DateSeparator, DataStr, 3);
6, 8 : begin
Insert(FormatSettings.DateSeparator, DataStr, 5);
Insert(FormatSettings.DateSeparator, DataStr, 3);
end;
end;
end;
try
pField.Value := StrToDate(DataStr);
except
if pErro = true then
pField.Value := Date
else
pField.Value := NULL;
end;
end;
//How to use
//Use this in OnSetText event the Field
procedure TFmBI0004.qry_vendedor_admissaoSetText(Sender: TField; const Text: string);
begin
inherited;
//The function complete the date
CompletaDataField(Text,Sender);
end;