Pesquisa SQL usando o quotedstr()

Delphi

01/07/2004

select pgit.cod_titpg,cod_titpgit,vencto_titpgit,pagto_titpgit,
parc_titpgit,vlrec_titpgit,vlparc_titpgit,vldesc_titpgit,vloutras_titpgit,
juros_titpgit,vlsald_titpgit,plano_titpg,cod_clien,razao_clien,
end_clien,bair_clien,munic_clien,uf_clien,tel_clien,limit_clien,
cpf_clien from titpagarit pgit, titpagar pg, cliente cli, notactb ntctb
where (vencto_titpgit between ´+QuotedStr(s_param1)+´ and ´+QuotedStr(s_param2)+´)´
and pgit.cod_titpg=pg.cod_titpg
and pg.cod_notactb=ntctb.cod_notactb and ntctb.cod_clien=cli.cod_clien
order by ntctb.cod_clien,vencto_titpgit,pgit.cod_titpg

quando passo para a query dá erro ....

´conversion error from string ´15/07/2004´´


Midas

Midas

Curtidas 0

Respostas

Dataclass

Dataclass

01/07/2004

Midas,

Olha, qual o banco que tu acessas?Porque pesquisa em campos Data podem ter particularidades ,ex : no MSAccess usa-se algo como :
 
qrEventos.SQL.Text := ´ SELECT *  ´+
                                  ´   FROM tabEventos 
                                  ´ WHERE (Data >=#´+ varDataPesquisa +´)´;


Já no Oracle é comum utilizar a função to_date etc...

Estamos a disposição!


GOSTEI 0
Dataclass

Dataclass

01/07/2004

Retificando!

Midas, Olha, qual o banco que tu acessas?Porque pesquisa em campos Data podem ter particularidades ,ex : no MSAccess usa-se algo como :
 
qrEventos.SQL.Text := ´ SELECT *  ´+
                                  ´   FROM tabEventos ´+
                                  ´ WHERE (Data >=#´+ varDataPesquisa +´)´;
Já no Oracle é comum utilizar a função to_date etc... Estamos a disposição!



GOSTEI 0
Emerson Nascimento

Emerson Nascimento

01/07/2004

para vc não se preocupar com as particularidades do banco, utilize parâmetros na query. por exemplo:

select pgit.cod_titpg,cod_titpgit,vencto_titpgit,pagto_titpgit,
          parc_titpgit,vlrec_titpgit,vlparc_titpgit,vldesc_titpgit,
          vloutras_titpgit, juros_titpgit,vlsald_titpgit,plano_titpg,
          cod_clien,razao_clien,end_clien,bair_clien,munic_clien,
          uf_clien,tel_clien,limit_clien,cpf_clien
from titpagarit pgit, titpagar pg, cliente cli, notactb ntctb
where (vencto_titpgit between :DataInicial and :DataFinal)
    and (pgit.cod_titpg=pg.cod_titpg)
    and (pg.cod_notactb=ntctb.cod_notactb and ntctb.cod_clien=cli.cod_clien)
order by ntctb.cod_clien,vencto_titpgit,pgit.cod_titpg

daí vc faz:
query.close;
query.parambyname(´datainicial´).asdate := data_inicial; // pode ser asdatetime
query.parambyname(´datafinal´).asdate := data_final; // pode ser asdatetime
query.open;


GOSTEI 0
Midas

Midas

01/07/2004

Na verdade descobri o problema, é que estou usando o Firebird 1.5 e ele esta reconhecendo ´mm/dd/yy´ se passo o parametro vai bem mas não tenho como pois, tenho uma unit com todas as pesquisas assim passo os parametros diretamente na query, não tenho como usar parambyname. Alguem tem alguma saida ?


GOSTEI 0
Casetek

Casetek

01/07/2004

Eu uso o access e criei estas 2 funcoes pra facilitar as chamadas

É muito mais fácil usar ap() do que QuotedStr()
function Ap(nome: String): String;
begin
Result:= QuotedStr(trim(nome));// apostofros e caracteres especiais
end;


Esta inverte o dia pelo mes e ja adiciona os #
function DataAm(data: TDateTime): String;
var Aux: String;
begin // supondo que o ano tenha 4 digitos dd/mm/aaaa
aux:= DateToStr(data);
result:= ´´+ copy(Aux,4,2) + ´/´ + copy(Aux,1,2) + ´/´ + copy(Aux,7,4) + ´´;
end;


Select * from clientes where clinome = ap(Edit1.text) and clinasc = dataAm( dataPesquisa)

Por via das duvidas nas minhas aplicacoes sempre coloco no create do form principal:

DecimalSeparator:= ´,´;
ShortDateFormat:= ´dd/mm/yyyy´;
CurrencyDecimals:= 2;
NegCurrFormat:= 1;


GOSTEI 0
POSTAR