Ainda sobre o controle de tempo de uso do meu sistema

14/12/2003

1

Desculpe-me a insistência e a falta de conhecimento, mais estamos aqui para procurar quem sabe mais e aprender. O negocio e o seguinte ainda não consegui acerta, daí resolvi fazer da seguinte forma criei uma tabela com um cada data inicio e data limite, e ai vou diminuindo as datas e mostrar quantos dias faltam para o programa expirar e fiz dessa forma, só que da os erros abaixo. O que eu estou fazendo de errado? ou dessa forma que estou fazendo não e correto? ou não da pra fazer? Alguém pode me ajudar?

procedure TForm1.FormCreate(Sender: TObject);
var Data : TDatetime;
var dias : integer;
begin
Data := Date();
If data > StrToDate(´25/12/2003´) then
begin
showmessage(´mensagem de aviso´);
application.terminate;
end
else
begin
dias := strtodate(trunc(f_uso.t_uso[´datalimite´] - f_uso.T_uso[´datainicio´]));
showmessage(´faltam ´ + datetostr(Dias) + ´ Dias para o programa expirar´);
end;


[Error] Menu.pas(315): Incompatible types: ´String´ and ´Int64´
[Fatal Error] Locadora.dpr(23): Could not compile used unit ´Menu.pas´


Responder

Posts

showmessage(´faltam ´ + datetostr(Dias) + ´ Dias para o programa expirar´);

nessa linha, voce declarou a variável ´Dias´, como inteiro, e quer transformá-la em string.....

analise melhor essa linha.......


Responder

14/12/2003

Wagner

Certo

essa ja foi uma dica que peguei no forum, sou iniciante, o que mudar para concertar esse erro?

Eu agradeco

wagnernormando@ig.com.br


Responder

15/12/2003

Maxymus

Cara, tu declarou uma varíavel do tipo TDateTime e tá querendo converter o valor para o campo Dias, que é inteiro, usando StrToDate,
Por isso o erro de ´Impatible Types´

voce deveria mudar a variavel dias(integer) para string, pois você quer apenas mostar a data que foi calculada, ou seja, num vai fazer mais calculo com o campo.

Bota ela assim Dias:String[3];
que ai quando vc for transformar vai dar certo.





var Data : TDatetime;
var dias : integer;
dias := strtodate(trunc(f_uso.t_uso[´datalimite´] - f_uso.T_uso[´datainicio´]));


Responder

15/12/2003

Seccatto

cara o problema ta nessa linha
showmessage(´faltam ´ + datetostr(Dias) + ´ Dias para o programa expirar´);
tenta fazer assim
showmessage(´faltam ´ + inttostr(Dias) + ´ Dias para o programa expirar´);

espero ter ajudado


Responder

20/12/2003

Wagner

Caro colegas

Se coloco dessa forma: eliminando a linha em azul o programa entra dessa forma ´faltam 10434852 dias para o programa expirar´

Obs: fiz todas as tentantivas conforme as dicas mais nao deu certo a unica que chegou mais perto foi essa mais eu gostaria de uma comparação de datas e um retorno tipo ´faltam 15 dias para o .......´ o que eu ainda posso esta fazendo de errado, por favor me ajudem

var Data : TDatetime;
var Dias: integer;
begin
Data := Date();
If data > StrToDate(´25/12/2003´) then
begin
showmessage(´Contacte o programador responsavel´);
application.terminate;
end
else
begin
[color=blue:9c86b1d4cd]//dias := strtoint(trunc(f_uso.t_uso[´datalimite´] - f_uso.T_uso[/color:9c86b1d4cd][´datainicio´]));
showmessage(´faltam ´ + inttostr(Dias) + ´ Dias para o programa expirar´);
end;


Responder
vc pode tentar criar uma função q retorna os dias entre as duas datas....

function DifDate(dataini,datafin:string):integer;
{Retorna a quantidade de dias entre duas datas}
var a,b,c:tdatetime;
ct,s:integer;
begin
if StrToDate(DataFin) < StrtoDate(DataIni) then
begin
Result := 0;
exit;
end;
ct := 0;
s := 1;
a := strtodate(dataFin);
b := strtodate(dataIni);
if a > b then
begin
c := a;
a := b;
b := c;
s := 1;
end;
a := a + 1;
while (dayofweek(a)<>7) and (a <= b) do
begin
if dayofweek(a) in [1..7] then
begin
inc(ct);
end;
a := a + 1;
end;
ct := ct + round((7*int((b-a)/7)));
a := a + (7*int((b-a)/7));
while a <= b do
begin
if dayofweek(a) in [1..7] then
begin
inc(ct);
end;
a := a + 1;
end;
if ct < 0 then
begin
ct := 0;
end;
result := s*ct;
end;

depois vc usa + ou - assim :

dias := difDate( f_uso.t_uso[´dataInicio´], f_uso.T_uso[´dataLimite´] ).

Obs:. Não esqueça q as datas terão q ser transformadas em String.....Como não sei como são seus campos não posso ajudar muito...., qqer dúvida entre em contato.....


Responder

21/12/2003

Wagner

Cara tem so uma coisinha

:oops: Eu tinha na minha maquina, mais nao sei onde anda mais, alguma coisa sobre como colocar um função no meu projeto, como sou iniciante nao entendo muito bem isso, pode me da uma passo-a-passo de como colocar essa função no meu projeto :lol: eu agradeço muito

Feliz Natal

wagnenormando@ig.com.br


Responder

21/12/2003

Maxymus

Cara me dar teu e-mail, que te passo um pograminha que eu fiz para vc ver como se faz.


meu e-mail é : maxymus@secrel.com.br


Até mais!!


Responder

21/12/2003

Edilcimar

como é que vc consegue transformar um exemplo tão simples em algo tão complicado?
dias : integer;
data : tdate;



if dias > strtodate(´25/12/2003´) then
showmessage(´o natal já passou, o presente não funciona mais´)
else
begin
dias := strtodate(´25/12/2003´) - date()
showmessage(´faltam ´ + inttostr(dias)´ + ´ dias para o programa expirar´)
end


Responder

21/12/2003

Wagner

Cara, o exemplo pode ser simples, eu concordo mais mesmo assim como voce mostrou nao esta dando certo, o que eu estou fazendo de errado?

dias : integer;
data : tdate;

begin
if dias > strtodate(´25/12/2003´) then
showmessage(´o natal já passou, o presente não funciona mais´)
else
begin
dias := strtodate(´25/12/2003´) - date()
showmessage(´faltam ´ + inttostr(dias)´ + ´ dias para o programa expirar´)
end;
end;
end.

[Error] Menu.pas(301): Unknown directive: ´dias´
[Error] Menu.pas(306): Undeclared identifier: ´dias´
[Error] Menu.pas(311): Missing operator or semicolon
[Error] Menu.pas(311): Missing operator or semicolon
[Error] Menu.pas(311): Missing operator or semicolon
[Error] Menu.pas(311): Missing operator or semicolon
[Error] Menu.pas(314): Statement expected, but expression of type ´String´ found
[Fatal Error] Locadora.dpr(24): Could not compile used unit ´Menu.pas´


Responder

21/12/2003

Fórum Vini

Wagner,
o bloco
dias : integer; 
data : tdate; 

são as declarações de variáveis, portanto você tem que colocar [b:9ffee7d52e]var[/b:9ffee7d52e] antes. Acredito que nosso amigo edicimar pensou que você já soubesse disso, portanto não colocou a declaração.
var
dias : integer; 
data : tdate; 



Espero ter ajudado.
Vinicius.


Responder

21/12/2003

Wagner

Cara sobre a declaração da variavel que erro banal (mesmo para um iniciante) muito obrigado pelo alerta, mais mesmo assim ainda esta dando erro pode me ajudar?

var
dias : integer;
data : tdate;

begin
if dias > strtodate(´25/12/2003´) then
showmessage(´o natal já passou, o presente não funciona mais´)
else
begin
dias := strtodate(´25/12/2003´) - date()
showmessage(´faltam ´ + inttostr(dias)´ + ´ dias para o programa expirar´)
end;
end;
end.

[Error] Menu.pas(311): Incompatible types: ´Integer´ and ´Extended´
[Error] Menu.pas(311): Missing operator or semicolon
[Error] Menu.pas(311): Missing operator or semicolon
[Error] Menu.pas(311): Missing operator or semicolon
[Error] Menu.pas(312): Statement expected, but expression of type ´String´ found
[Fatal Error] Locadora.dpr(24): Could not compile used unit ´Menu.pas´


Responder

21/12/2003

Fórum Vini

Wagner,
você esqueceu de colocar o ; nas linhas!
var 
dias : integer; 
data : tdate; 

begin 
if dias > strtodate(´25/12/2003´) then 
showmessage(´o natal já passou, o presente não funciona mais´);//faltou aqui
else 
begin 
dias := strtodate(´25/12/2003´) - date() ; //aqui tbm
showmessage(´faltam ´ + inttostr(dias)´ + ´ dias para o programa expirar´); //e aqui
end; 
end; 



Espero ter ajudado.
Vinicius.


Responder

21/12/2003

Wagner

Cara ainda não deu certo, ainda pode me judar?


var
dias : integer;
data : tdate;
begin
if dias > strtodate(´25/12/2003´) then
showmessage(´o natal já passou, o presente não funciona mais´);
else
begin
dias := strtodate(´25/12/2003´) - date();
showmessage(´faltam ´ + inttostr(dias)´ + ´ dias para o programa expirar´);
end;
end;
end.

[Error] Menu.pas(309): ´;´ not allowed before ´ELSE´
[Error] Menu.pas(311): Incompatible types: ´Integer´ and ´Extended´
[Error] Menu.pas(312): Missing operator or semicolon
[Error] Menu.pas(312): Missing operator or semicolon
[Error] Menu.pas(312): Missing operator or semicolon
[Error] Menu.pas(313): Statement expected, but expression of type ´String´ found
[Fatal Error] Locadora.dpr(24): Could not compile used unit ´Menu.pas´


Responder

21/12/2003

Fabio.hc

Cara sobre a declaração da variavel que erro banal (mesmo para um iniciante) muito obrigado pelo alerta, mais mesmo assim ainda esta dando erro pode me ajudar? var dias : integer; data : tdate; begin if dias > strtodate(´25/12/2003´) then showmessage(´o natal já passou, o presente não funciona mais´) else begin dias := strtodate(´25/12/2003´) - date() showmessage(´faltam ´ + inttostr(dias)´ + ´ dias para o programa expirar´) end; end; end. [Error] Menu.pas(311): Incompatible types: ´Integer´ and ´Extended´ [Error] Menu.pas(311): Missing operator or semicolon [Error] Menu.pas(311): Missing operator or semicolon [Error] Menu.pas(311): Missing operator or semicolon [Error] Menu.pas(312): Statement expected, but expression of type ´String´ found [Fatal Error] Locadora.dpr(24): Could not compile used unit ´Menu.pas´




[b:ba9056db8f][Error] Menu.pas(311): Incompatible types: ´Integer´ and ´Extended´[/b:ba9056db8f]

Este erro é devido esta linha:

[b:ba9056db8f]dias := strtodate(´25/12/2003´) - date()[/b:ba9056db8f]


Uma solução é o seguinte:

var
dias : double;


e nesta linha:

showmessage(´faltam ´ +[b:ba9056db8f] floattostr[/b:ba9056db8f](dias)´ + ´ dias para o programa expirar´)


Com as alterações o código fica assim:

procedure TForm1.Button1Click(Sender: TObject);
var
   dias : double;
   data : tdate;

begin
   if dias > strtodate(´25/12/2003´) then
      showmessage(´o natal já passou, o presente não funciona mais´)
   else
      begin
      dias := strtodate(´25/12/2003´) - date();
      showmessage(´faltam ´ + floattostr(dias) + ´ dias para o programa expirar´)
   end;
end;



Responder