Fórum Select crescendo..... #187206
08/10/2003
0
Ola colegas depois de varios topicos postados, e muitas dicas e sugestões
de varios colegas cheguei a esse select
notem a parte em negrito pois ela é a minha duvida agora
preciso fazer um calculo com as data das notas retornadas
por exemplo uma nota emitida em 08/09/2003 ai pegar e subtrair ess adat da data atual seriam 30 dias
como faço isso?
outra coisa as datas nas tabelas estão assim [b:6b8649fc7d]08.10.2003[/b:6b8649fc7d] foi utilizado o separador [b:6b8649fc7d]´.´[/b:6b8649fc7d], entao preciso converter a data e depois fazer o calculo..
alguem pode me ajudar???
de varios colegas cheguei a esse select
with QryTemp do
begin
Close;
DatabaseName := DM.TArqEmpr.DatabaseName;
SQL.Clear;
SQL.Add(´select C.v1 as Cod,´);
SQL.Add(´ C.v2 as Cliente,´);
SQL.Add(´ C.v4 as Municipio,´);
SQL.Add(´ C.v5 as UF,´);
SQL.Add(´ C.v12 as Contato,´);
SQL.Add(´ C.v13 as Telefone,´);
SQL.Add(´ R.v1 as codrep,´);
SQL.Add(´ R.v2 as Representante,´);
SQL.Add(´ C.Datacad,´);
SQL.Add(´ N.Dnf as Data,´);
SQL.Add(´ N.nnf as Nota,´);
SQL.Add(´ Sum(N.vlr * N.qte + n.ipi) as Valor,´);
[b:6b8649fc7d] SQL.Add(´ cast ((substring (n.dnf from 1 for 2))+´´/´´+´);
SQL.Add(´ (substring (n.dnf from 3 for 2))+´´/´´+´);
SQL.Add(´ (substring (n.dnf from 5 for 4)))´);[/b:6b8649fc7d] SQL.Add(´from arqclie C,´);
SQL.Add(´ arqprnf N,´);
SQL.Add(´ arqrepr R´);
SQL.Add(´where (C.v1 = N.ncl)´);
SQL.Add(´ and (R.v1 = N.nre)´);
SQL.Add(´ and (N.nnf = (select max(NF.nnf)´);
SQL.Add(´ from arqprnf NF´);
SQL.Add(´ where NF.ncl = C.v1 and nf.nre = r.v1))´);
SQL.Add(´ and (C.v1 between :cli1 and :cli2)´);
SQL.Add(´ and (N.nre between :rep1 and :rep2)´);
SQL.Add(´Group by C.v1, C.v2, C.v4, C.v5, C.v12, C.v13,R.v1, R.v2, C.datacad, n.dnf, n.nnf ´);
SQL.Add(´order by R.v1,´);
SQL.Add(´ C.v1´);
Params[0].Value := mdtCliIni.Text;
Params[1].Value := mdtCliFim.Text;
Params[2].Value := mdtRepIni.Text;
Params[3].Value := mdtRepFim.Text;
Open;
end;
notem a parte em negrito pois ela é a minha duvida agora
preciso fazer um calculo com as data das notas retornadas
por exemplo uma nota emitida em 08/09/2003 ai pegar e subtrair ess adat da data atual seriam 30 dias
como faço isso?
outra coisa as datas nas tabelas estão assim [b:6b8649fc7d]08.10.2003[/b:6b8649fc7d] foi utilizado o separador [b:6b8649fc7d]´.´[/b:6b8649fc7d], entao preciso converter a data e depois fazer o calculo..
alguem pode me ajudar???
Macario
Curtir tópico
+ 0
Responder
Posts
12/10/2003
Hiko Seijuro
Você pode usar a seguinte idéia:
Cosidere as variaveis ´nData e DataqQuero´ como sendo do tipo EXTENDED e as ´tData e pData´ como sendo string e a :
Isso é só uma idéia de como calcular as datas, tem outras formas mais simples mas eu preferi fazer, como diz minha professora de matemática, em câmera lenta pra ficar mais fácil de entender os passos.
Primeiro formatar a data, depois converter ela pra número e quaiquer outras que serão somadas ou subtraidas (como ela virá um número da até pra dividir e multiplicar, só que ainda não achei muito uso pra isso).
Faz o calculo e converte pra texto ou data, pro que for usar.
Provavelmente você vai ter que calculalas todas antes de começar a adicionar as linhas de sql. Da até pra fazer uma função pra isso.
Cosidere as variaveis ´nData e DataqQuero´ como sendo do tipo EXTENDED e as ´tData e pData´ como sendo string e a :
pData := tblSuaTabelaNomedoCampoComAData.[b:ac6a01788c]AsString[/b:ac6a01788c];
//Amazenando provizoriamente a data, da forma digitada;
tData := pData[0];
tData := tData + pData[1];
tData := ´/´;
tData := pData[3]; //Aqui pulando o ponto e já previamente adicionando
//uma pra ficar no padrão;
tData := tData + pData[4];
tData := ´/´;
tData := tData + pData[6];
tData := tData + pData[7];
tData := tData + pData[8];
tData := tData + pData[9];
//Dessa forma a data já está formatada;
nData := StrToFloat (tData); //Agora ela é passada pro padrão de datas //do Delphi;
DataqQuero := Date - nData;
{
no lugar do Date, que é a atual, podia ser qualquer numero, ou uma data da seguinte forma StrToDate(´05/08/2003´) ou subistituindo o que esta entre as aspas e as aspas por outra string contendo uma data no formato valido (nesse caso podia ter sido direto a tData), a data fica ainda em um número mas você pode provavelmente você vai qurer ela na forma de texto então poderia usar mais uma linha tipo
tData := DateToStr(DataqQuero);
aí ela estaria calculada e formatada.
;
}
Isso é só uma idéia de como calcular as datas, tem outras formas mais simples mas eu preferi fazer, como diz minha professora de matemática, em câmera lenta pra ficar mais fácil de entender os passos.
Primeiro formatar a data, depois converter ela pra número e quaiquer outras que serão somadas ou subtraidas (como ela virá um número da até pra dividir e multiplicar, só que ainda não achei muito uso pra isso).
Faz o calculo e converte pra texto ou data, pro que for usar.
Provavelmente você vai ter que calculalas todas antes de começar a adicionar as linhas de sql. Da até pra fazer uma função pra isso.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)