GARANTIR DESCONTO

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

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

Macario

Responder

Posts

10/10/2003

Ildefonso

Olá, Macario.

Verifique se as datas não devem ser expressas como...
SELECT * FROM Pedidos WHERE [DataEmissao] >= 01/30/2003;
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)


Responder

Gostei + 0

10/10/2003

Macario

Ildefonso meu chapa vc foi certeiro quanto aos parambyname

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

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

Aceitar