Fórum Dimunuir Data e Hora com Resultados #445661

17/06/2013

0

Boa Tarde amigos, venho aqui mais uma vez pedir ajuda de vocês. E o seguinte tenho um DBEdit10 em meu formulario que quando vou criar um novo regsitro clicando no botão "Novo" ele automaticamente preenche com a data atual, fiz isso com o codigo: DBEdit10.Text:=datetostr(now);, o quero fazer e quando eu preencher um DBEdit11 manualmente com uma data, o meu DBEdit12 me de o resultado somando dos dias automaticamente. Exemplo DBEdit10, me mostra 17/06/2013, dai vou no DBEdit11 e coloco 21/06/2013, o resultado no DBEdt12 seria assim: 5 Dias, porem esse ''5 Dias'', teria que ser automatico e a mesma coisa seria para as horas.
Alguem tem alguma solução.

Obrigado, e desde ja agradeço a todos.

Att, Felipe.
Felipe Arruda

Felipe Arruda

Responder

Posts

17/06/2013

Felipe Arruda

Alguem pode me ajudar nesse problema?
Responder

Gostei + 0

18/06/2013

Alan Souza

dá para usar a função DaySpan para obter a quantidade de dias e horas entre duas datas:

var
  vDaySpan: Double;
  qtdeDias: Integer;
  qtdeHoras: TTime;
begin
  vDaySpan := DaySpan(datainicio, datafim);
  qtdeDias := Trunc(vDaySpan);
  qtdeHoras := Frac(vDaySpan);
end; 
Responder

Gostei + 0

18/06/2013

Felipe Arruda

Boa Tarde Alanps, desde ja fico muito agradecido a sua ajuda.
Ok, mas eu tenho 3 dbedit um para data incial que e gerado automaticamente com o codigo DBEdit10.Text:=datetostr(now), o outro eu colocarei a data manualmente e o terceiro e ultimo teria que me dar o resultado automatico quando eu preencho o segundo DBEdit.
Para a hora seria parecido, tenho 3 dbedit um para hora incial que e gerado automaticamente com o codigo DBEdit7.Text:=timetostr(now); o outro eu colocarei a hora manualmente e o terceiro e ultimo teria que me dar o resultado automatico quando eu preencho o segundo DBEdit.

Obrigado, fico no aguardo.

Att, Felipe.
Responder

Gostei + 0

18/06/2013

Alan Souza

só colocar no evento OnExit do seu edit onde a data é manual o código que calcula o DaySpan e atribuir o valor obtido no seu edit de quantidade de dias (mesma coisa para as horas).
Responder

Gostei + 0

18/06/2013

Felipe Arruda

datainicio e datafim, seria os meus DBEdit?
Responder

Gostei + 0

19/06/2013

Alan Souza

as duas datas que vc tem que comparar, se estão no seu TDBEdit é só passar:

DaySpan(StrToDate(DBEdit1.Text), StrToDate(DBEdit2.Text));
Responder

Gostei + 0

19/06/2013

Felipe Arruda

Bom dia alanps, muito obrigado por estar me ajudando, porem deu outro problema.
1- No meu DBEdit de horas automatica, alem de quando cirar o formulario ele insere a data automaticamente, ele tambem tem uma mascasra no Evento OnEnter:
DBEdit10.Field.EditMask:= '!99/99/0000;1';


2 - No meu DBEdit de horas manual, eu tenho no evento OnEnter e no Evento OnExit:
procedure TFRAtendimento.DBEdit11Enter(Sender: TObject);
begin
  DBEdit11.Field.EditMask:= '!99/99/0000;1';
end;

procedure TFRAtendimento.DBEdit11Exit(Sender: TObject);
var
  vDaySpan: Double;
  qtdeDias: Integer;
  qtdeHoras: TTime;
begin
  vDaySpan := DaySpan(StrToDate(DBEdit10.Text), StrToDate(DBEdit12.Text));
  qtdeDias := Trunc(vDaySpan);
  qtdeHoras := Frac(vDaySpan);

end;


3 - O meu DBEdit que vai receber, eo DBEdit12.

4 - Os tipos de campos, em meu banco de dados são: A data automatica tipo date, data manual tipo date, e data a ser mostrada esta como varchar, quando vou fazer o teste no programa me retornar o seguint erro: 'Is not a valid Date".
Tentei mudar o campo que calcula automatico para date, porem quando vou compilar o programa da outro erro.
A mesma data que eu coloco no campo manual e a que aparece no campo automatico.

Obrigado, fico aguardando.

Att, Felipe.
Responder

Gostei + 0

19/06/2013

Alan Souza

tenta assim:

procedure TFRAtendimento.DBEdit11Exit(Sender: TObject);
var
  vDaySpan: Double;
  qtdeDias: Integer;  
begin
  vDaySpan := DaySpan(StrToDate(DBEdit10.Text), StrToDate(DBEdit11.Text));
  qtdeDias := Trunc(vDaySpan);
  DBEdit12.Text := IntToStr(qtdeDias);
end;


Responder

Gostei + 0

19/06/2013

Felipe Arruda

Boa Tarde alanps, ficou do mesmo jeito.
Responder

Gostei + 0

21/06/2013

Felipe Arruda

Bom dia pessoal, seguindo o exemplo do alanps, tentei de varias outras formas, porem não esta dando certo, alguem teria mais alguma sugestão?
Obrigado, aguardo respostas.

Att, Felipe.
Responder

Gostei + 0

21/06/2013

Alan Souza

tenta atribuir o valor direto no campo, ao invés de inserir no DBEdit13.

no lugar de:
DBEdit12.Text := IntToStr(qtdeDias);


tente:

DBEdit12.DataSource.DataSet.FieldByName(DBEdit12.DataField).AsInteger := qtdeDias;
Responder

Gostei + 0

21/06/2013

Felipe Arruda

Bom dia alanps, muito obrigado por estar me ajudando mais uma vez, mas tem um porem meu campos são do tipo date e tem a mascara.

DBEdit11.Field.EditMask:= '!99/99/0000;1';


Como ficaria nesse caso?

Obrigado, e tenha um bom dia.

Att, Felipe
Responder

Gostei + 0

21/06/2013

Alan Souza

o campo ligado ao DBEdit12 não deveria ser inteiro, já que ele vai receber a quantidade de dias?
(os testes que fiz foram com essa idéia)
Responder

Gostei + 0

25/06/2013

Felipe Arruda

Bom dia, mas eu posso colocar como tipo inteiro e com a mascara? Todos os meus DBEdit vão ter que ser no tipo inteiro?
Obrigado.

Att, Felipe.
Responder

Gostei + 0

25/06/2013

Alan Souza

não, só o campo que recebe a quantidade de dias precisa ser inteiro (e ele pode ter máscara sim, só que não a de data)
Responder

Gostei + 0

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

Aceitar