Ainda sobre o controle de tempo de uso do meu sistema
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´
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´
Wagner
Curtidas 0
Respostas
Carlos Bernardo
14/12/2003
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.......
nessa linha, voce declarou a variável ´Dias´, como inteiro, e quer transformá-la em string.....
analise melhor essa linha.......
GOSTEI 0
Wagner
14/12/2003
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
essa ja foi uma dica que peguei no forum, sou iniciante, o que mudar para concertar esse erro?
Eu agradeco
wagnernormando@ig.com.br
GOSTEI 0
Maxymus
14/12/2003
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´]));
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´]));
GOSTEI 0
Seccatto
14/12/2003
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
showmessage(´faltam ´ + datetostr(Dias) + ´ Dias para o programa expirar´);
tenta fazer assim
showmessage(´faltam ´ + inttostr(Dias) + ´ Dias para o programa expirar´);
espero ter ajudado
GOSTEI 0
Wagner
14/12/2003
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;
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;
GOSTEI 0
Carlos Bernardo
14/12/2003
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.....
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.....
GOSTEI 0
Wagner
14/12/2003
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
: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
GOSTEI 0
Maxymus
14/12/2003
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!!
meu e-mail é : maxymus@secrel.com.br
Até mais!!
GOSTEI 0
Edilcimar
14/12/2003
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
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
GOSTEI 0
Wagner
14/12/2003
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´
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´
GOSTEI 0
Fórum Vini
14/12/2003
Wagner,
o bloco
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.
Espero ter ajudado.
Vinicius.
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.
GOSTEI 0
Wagner
14/12/2003
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´
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´
GOSTEI 0
Fórum Vini
14/12/2003
Wagner,
você esqueceu de colocar o ; nas linhas!
Espero ter ajudado.
Vinicius.
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.
GOSTEI 0
Wagner
14/12/2003
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´
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´
GOSTEI 0
Fabio.hc
14/12/2003
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;
GOSTEI 0
Wagner
14/12/2003
Grande Fabio funcionou Legal :D Valeu, muito obrigado a todos que tentaram me ajudar, valeu mesmo, a todos um Feliz natal e um novo abençoado por Deus.
GOSTEI 0