Pesquisa SQL usando o quotedstr()
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´´
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
Curtidas 0
Respostas
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 :
Já no Oracle é comum utilizar a função to_date etc...
Estamos a disposição!
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
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 :
Já no Oracle é comum utilizar a função to_date etc...
Estamos a disposição!
qrEventos.SQL.Text := ´ SELECT * ´+ ´ FROM tabEventos ´+ ´ WHERE (Data >=#´+ varDataPesquisa +´)´;
GOSTEI 0
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;
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
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
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;
É 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