Fórum SQL agora é apelação!!!!!!!!!!!! #187828
10/10/2003
0
data gravada [b:a400056938]30.01.2003[/b:a400056938] usando ponto como separador
como fazer calculo dentro de um select usando paradox
sendo que ele guarda [b:a400056938]01/30/2003[/b:a400056938]
estou tentando isso mas sempre acusa type mismatch expression
como fazer calculo dentro de um select usando paradox
sendo que ele guarda [b:a400056938]01/30/2003[/b:a400056938]
estou tentando isso mas sempre acusa type mismatch expression
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.nnf as Nota,´);
SQL.Add(´ N.dnf as data,´);
SQL.Add(´ sum (N.vlr * N.qte + n.ipi+n.encpro+n.encipi) as Valor,´);
SQL.Add(´ max((substring (n.dnf from 4 for 2)) +´´/´´+´);
SQL.Add(´ (substring (n.dnf from 1 for 2)) +´´/´´+´);
SQL.Add(´ (substring (n.dnf from 7 for 4))) as inativo´);
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.nnf , n.dnf´);
SQL.Add(´having ( :hoje - max((substring (n.dnf from 4 for 2)) +´´/´´+´);
SQL.Add(´ (substring (n.dnf from 1 for 2)) +´´/´´+´);
SQL.Add(´ (substring (n.dnf from 7 for 4))) > :inativo )´);
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;
Params[4].Value := DateToStr(hoje);
Params[5].Value := StrToInt(mdtInativo.Text);
Open;
end;
Macario
Curtir tópico
+ 0
Responder
Posts
10/10/2003
Ildefonso
Olá, Macario.
Verifique se as datas não devem ser expressas como...No arquivo, a data está no formato DateTime, o que significa haver uma interpretação da seqüência - que parece ser só uma string -para os cálculos internos corretos. Assim, os delimitadores fazem a vez das aspas ou apóstrofos das strings.
Outra dica: nunca use um campo com o nome DATA! O engine pode se confundir com a palavra reservada DADOS em inglês (pelo menos o Access e o SQL Server tiveram este tipo de problema).
Finalmente, ao invés de [b:99b65a15d5]Params[0].Value := mdtCliIni.Text[/b:99b65a15d5], use [b:99b65a15d5]ParamsByName[´DataEmissao´] := ...[/b:99b65a15d5] é mais seguro e você terá certeza que o engine não inverteu a ordem de interpretação de alguma coisa.
Bom trabalho. 8)
Verifique se as datas não devem ser expressas como...
SELECT * FROM Pedidos WHERE [DataEmissao] >= 01/30/2003;
Outra dica: nunca use um campo com o nome DATA! O engine pode se confundir com a palavra reservada DADOS em inglês (pelo menos o Access e o SQL Server tiveram este tipo de problema).
Finalmente, ao invés de [b:99b65a15d5]Params[0].Value := mdtCliIni.Text[/b:99b65a15d5], use [b:99b65a15d5]ParamsByName[´DataEmissao´] := ...[/b:99b65a15d5] é mais seguro e você terá certeza que o engine não inverteu a ordem de interpretação de alguma coisa.
Bom trabalho. 8)
Responder
Gostei + 0
10/10/2003
Macario
Ildefonso meu chapa vc foi certeiro quanto aos parambyname
agora olha só...como ficou
[color=green:66ccacacfc]
agora preciso de um campo com os dias corridos entre as datas
tipo hoje-mespassado = 30 dias
agora olha só...como ficou
[color=green:66ccacacfc]
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.nnf as Nota,´);
SQL.Add(´ N.dnf as data,´);
SQL.Add(´ sum (N.vlr * N.qte + n.ipi+n.encpro+n.encipi) as Valor,´);
SQL.Add(´ max( (substring (n.dnf from 1 for 2)) +´´/´´+´);
SQL.Add(´ (substring (n.dnf from 4 for 2)) +´´/´´+´);
SQL.Add(´ (substring (n.dnf from 7 for 4)) ) as data´);
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(´ and (:dia - (cast( (substring (n.dnf from 1 for 2)) +´´/´´+´);
SQL.Add(´ (substring (n.dnf from 4 for 2)) +´´/´´+´);
SQL.Add(´ (substring (n.dnf from 7 for 4)) as date))) >= :inativo´);
SQL.Add(´Group by C.v1, C.v2, C.v4, C.v5, C.v12, C.v13,R.v1, R.v2, C.datacad, n.nnf , n.dnf´);
SQL.Add(´order by R.v1,´);
SQL.Add(´ C.v1´);
ParamByName(´cli1´).AsString := mdtCliIni.Text;
ParamByName(´cli2´).AsString := mdtCliFim.Text;
ParamByName(´rep1´).AsString := mdtRepIni.Text;
ParamByName(´rep2´).AsString := mdtRepFim.Text;
ParamByName(´dia´).AsDate := hoje;
ParamByName(´inativo´).AsInteger := StrToInt(mdtInativo.Text);
Open;
end;
[/color:66ccacacfc]agora preciso de um campo com os dias corridos entre as datas
tipo hoje-mespassado = 30 dias
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)