Fórum Validação de período apenas com mês e exercicio #427703

31/10/2012

0

Salve Galera!

Estou com a seguinte dúvida:

Em meu banco local, tenho dois campos distintos, Mês e Exercício.

Preciso fazer validação para a liberação entre períodos através de duas datas armazenadas em um web service que contém 2 campos: Data Inicial e Data final no formato 99/99/9999.

Ex. se em meu web service contiver as datas iniciais e finais 10/01/2012 e 20/03/2012, preciso que em meu sistema através das datas informadas, libere somente o usuário a trabalhar entre este período 01/2012 e 03/2012.

Estou com uma certa dificuldade em implementar esta liberação de períodos utilizando somente Mês e Exercício.

Alguém já implementou esse tipo de validação ou que possa me dar uma luz de como proceder?

Abraço.


G2 Ltda.

G2 Ltda.

Responder

Posts

31/10/2012

Claudia Nogueira

Você pode fazer uma função no WebService com um parâmetro do tipo data e com retorno booleano.
Verificando se o parâmetro passado está dentro do período.

Na abertura do sistema:

Var
dDataUso : TDateTime;
begin
with QryBusca do
begin
SQL.Text := 'SELECT mes, exercidio FROM tabela';
Open;
if not isEmpty then
begin
dDataUso := StrToDate(01 + '/' + FieldByName('mes').AsString + '/' + FieldByName('exercicio').AsString);
if not Liberado(dDataUso) then
begin
Application.MessageBox('Entre em contato com o suporte!','Atenção',mb_iconinformation+mr_ok);
Application.Terminate;
end;

end;
end;
end;


No WebService:

funcftion Liberado(dDataUso : TDateTime) : Boolean;
begin
Result := False;
with QryBusca do
begin
SQL.Text := 'SELECT data_inicial, data_final FROM tabela';
Open;
if not isEmpty then
Result := (dDataUso >= FieldByName('data_inicial').AsDateTime) and (dDataUso <= FieldByName('data_final').AsDateTime);
end;
end;
Responder

Gostei + 0

31/10/2012

G2 Ltda.

Na verdade Claudiadnh, quando executo o sistema, eu vou no web service e gravo tanto a data inicial quanto a data final na máquina do cliente (Firebird 2.5).

Esta liberação deve ser feita localmente na máquina do cliente.

Responder

Gostei + 0

31/10/2012

Claudia Nogueira

No meu sistema, em toda liberação de senha é gravado no BD local do cliente o período que o cliente pode usar. Essas informações ficam criptografadas em uma tabela.
Na abertura do sistema tem uma verificação de data e se estiver fora do período o sistema fica na tela de liberação.
O cliente liga e um funcionário passa o código, liberando assim o sistema.
Não é feito por WebService.
Não entendi muito bem onde você disse que quando abre o sistema, vai no WebService e grava tanto a data inicial quanto a data final na máquina do cliente.


Na verdade Claudiadnh, quando executo o sistema, eu vou no web service e gravo tanto a data inicial quanto a data final na máquina do cliente (Firebird 2.5).

Esta liberação deve ser feita localmente na máquina do cliente.

Responder

Gostei + 0

31/10/2012

G2 Ltda.

O meu controle de liberação é feito via sistema web.

A entrar no sistema, vou na base Sqlserver do sistema web e pego a data inicial e final e gravo no micro do cliente (existe uma tabela em Firebird e utilizo MD5 para validar e evitar que o cliente altere caso consiga acessar o banco).

Dentro do sistema existem 3 módulos que só utilizam Mês e Exercício que estão em formato char 2 e 4 respectivamente.

Nestes módulos, existem diversos registros misturados (01/2012, 03/2012, 04/2012, ...)

Digamos que eu queira liberar para o cliente digitalizar do mês e exercício 04/2012 ao 06/2012.

Nos exercícios que não estão entre o período informado acima, não seria possível fazer a inclusão das imagens.

Ex.: O cliente seleciona um registro e clica em digitalizar as imagens, se o registro estiver dentro do período liberado, as imagens são salvas no banco, caso contrário, mostro uma mensagem informando que ele não pode digitalizar aquele registro que não esta dentro do período liberado.

Neste caso, a validação seria feita ao clicar no botão digitalizar imagens.

No banco do sistema da web, utilizado para efetuar a liberação dos períodos, gravo o período inicial e final como varchar 10.

Abraço.
Responder

Gostei + 0

31/10/2012

Claudia Nogueira

Seria simples se você usasse uma criptografia que aceitasse o reverso.
Como você grava o período inicial e final como MD5 na tabela, na hora da verificação você não vai conseguir saber se o registro selecionado está dentro do período justamente porque o MD5 você não tem como saber a informação original.

No caso ignorando a criptografia MD5, imaginado que tem uma tabela que guarda o período inicial 04/2012 e final 06/2012 sem o MD5, informação pura ou com outro tipo de criptografia, quando selecionasse o registro e clicasse em digitalizar seria fácil.

dDataRegistro := StrToDate('01' + '/' + mes + '/' + exercicio);
dDataInicial := StrToDate('01' + '/' + mes_inicial + '/' + exercicio_inicial);
dDataFinal := StrToDate('01' + '/' + mes_final + '/' + exercicio_final);

if (dDataRegistro < dDataInicial) or (dDataRegistro > dDataFinal) then
//aqui coloca a mensagem que não pode fazer nada

O meu controle de liberação é feito via sistema web.

A entrar no sistema, vou na base Sqlserver do sistema web e pego a data inicial e final e gravo no micro do cliente (existe uma tabela em Firebird e utilizo MD5 para validar e evitar que o cliente altere caso consiga acessar o banco).

Dentro do sistema existem 3 módulos que só utilizam Mês e Exercício que estão em formato char 2 e 4 respectivamente.

Nestes módulos, existem diversos registros misturados (01/2012, 03/2012, 04/2012, ...)

Digamos que eu queira liberar para o cliente digitalizar do mês e exercício 04/2012 ao 06/2012.

Nos exercícios que não estão entre o período informado acima, não seria possível fazer a inclusão das imagens.

Ex.: O cliente seleciona um registro e clica em digitalizar as imagens, se o registro estiver dentro do período liberado, as imagens são salvas no banco, caso contrário, mostro uma mensagem informando que ele não pode digitalizar aquele registro que não esta dentro do período liberado.

Neste caso, a validação seria feita ao clicar no botão digitalizar imagens.

No banco do sistema da web, utilizado para efetuar a liberação dos períodos, gravo o período inicial e final como varchar 10.

Abraço.
Responder

Gostei + 0

31/10/2012

G2 Ltda.

Oi,

Na verdade, não criptografo as datas e sim quando acesso o sistema, faço um cálculo com MD5 utilizando uma palavra chave e as datas inicias e finais para checar se as mesmas foram alteradas "por trás". rsrs

Quanto ao seu exemplo, o mesmo funcionou perfeitamente. Fazia um bom tempo que não utilizava o Delphi e estou voltando agora novamente.

Gostaria de agradecer o tempo e a paciência em me auxiliar nesta rotina.

Muito obrigado e abraço.

O tópico pode ser encerrado!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar