Erro no comando between no Firebird
Estou com um problema no[b:390f0359da] Firebird[/b:390f0359da]!
Quando tento uma sentença(Exemplo) SQL: << select * from pessoa_fisica where dt_nascimento between ´01/12/1984´ and ´09/01/2004´ >>
até ai tudo bem, o problema é quando acrescento um valor na data(dia) maior que 13(no dia)
Por exemplo: << select * from pessoa_fisica where dt_nascimento between ´01/12/1984´ and [b:390f0359da]´14/01/2004´ [/b:390f0359da]>>
No dia ´14/01/2004´o Firebird me retorna um erro:
Isto logo abaixo é a mensagem que ele me retorna:
/************************************************************/
[b:390f0359da]´Error de SQL´
ISC Error Code: 335544334
ISC Error Message: conversion error from string ´14/01/2004´
Statement:
TIBOInternalDataset:
´TApplication>.frmMain.dlgWissql...´[/b:390f0359da]
/***********************************************************/
Bem! Não sei se é erro do banco ou da interface que estou utilizando p/ manipular os dados;
Estou utilizando:
Versão do Banco: Firebird ´1.5´ ou melho ´1.5.1.4481´
Interface: IBOConsole
Procurei detalhar bem a mensagem de erro p/ ver se alguem poderia me ajudar
Se puderem me dar uma ajuda ficarei grato!
Atensiosamente Fernando
Quando tento uma sentença(Exemplo) SQL: << select * from pessoa_fisica where dt_nascimento between ´01/12/1984´ and ´09/01/2004´ >>
até ai tudo bem, o problema é quando acrescento um valor na data(dia) maior que 13(no dia)
Por exemplo: << select * from pessoa_fisica where dt_nascimento between ´01/12/1984´ and [b:390f0359da]´14/01/2004´ [/b:390f0359da]>>
No dia ´14/01/2004´o Firebird me retorna um erro:
Isto logo abaixo é a mensagem que ele me retorna:
/************************************************************/
[b:390f0359da]´Error de SQL´
ISC Error Code: 335544334
ISC Error Message: conversion error from string ´14/01/2004´
Statement:
TIBOInternalDataset:
´TApplication>.frmMain.dlgWissql...´[/b:390f0359da]
/***********************************************************/
Bem! Não sei se é erro do banco ou da interface que estou utilizando p/ manipular os dados;
Estou utilizando:
Versão do Banco: Firebird ´1.5´ ou melho ´1.5.1.4481´
Interface: IBOConsole
Procurei detalhar bem a mensagem de erro p/ ver se alguem poderia me ajudar
Se puderem me dar uma ajuda ficarei grato!
Atensiosamente Fernando
Fernando Piccini
Curtidas 0
Respostas
Vprates
17/01/2005
Talvez vc esteja usando o formato de data assim
mm/dd/yyyy em vez de dd/mm/yyyy
Vlw
mm/dd/yyyy em vez de dd/mm/yyyy
Vlw
GOSTEI 0
Fernando Piccini
17/01/2005
Estou usando o formato de data padrão: dd/mm/yyyy como mostrado no 1º Exemplo no inicio da página!
Vlw!
Vlw!
GOSTEI 0
Fernando Piccini
17/01/2005
Alguem sabe ai?
GOSTEI 0
Debug
17/01/2005
Vc ja tentou assim mm/dd/yyyy?
GOSTEI 0
Vinicius2k
17/01/2005
Colega,
O Firebird só aceita alguns formatos de data e dd/mm/yyyy não é um deles. Esta é a razão do erro que vc está recebendo.
Os formatos são : [b:fe64e8258d]mm/dd/yyyy[/b:fe64e8258d], [b:fe64e8258d]dd.mm.yyyy[/b:fe64e8258d] e [b:fe64e8258d]yyyy-mm-dd[/b:fe64e8258d].
Vc deverá usar um destes formatos ou utilizar parametros na consulta, por exemplo :
ou a data vindo de um TDateEdit, por exemplo :
A solução com parametros é sempre a mais adequada porque não importará a formatação de data do S.O... A conversão ficará a cargo da própria aplicação.
T+
O Firebird só aceita alguns formatos de data e dd/mm/yyyy não é um deles. Esta é a razão do erro que vc está recebendo.
Os formatos são : [b:fe64e8258d]mm/dd/yyyy[/b:fe64e8258d], [b:fe64e8258d]dd.mm.yyyy[/b:fe64e8258d] e [b:fe64e8258d]yyyy-mm-dd[/b:fe64e8258d].
Vc deverá usar um destes formatos ou utilizar parametros na consulta, por exemplo :
With SuaQuery do begin Close; SQL.Clear; SQL.Add(´select * from pessoa_fisica where dt_nascimento between :datainicial and :datafinal´); SuaQuery.ParamByName(´datainicial).AsDate:= StrToDate(´01/12/1984´); SuaQuery.ParamByName(´datafinal).AsDate:= StrToDate(´14/01/2004´); Open; end;
ou a data vindo de um TDateEdit, por exemplo :
With SuaQuery do begin Close; SQL.Clear; SQL.Add(´select * from pessoa_fisica where dt_nascimento between :datainicial and :datafinal´); SuaQuery.ParamByName(´datainicial).AsDate:= DateEdit1.Date; SuaQuery.ParamByName(´datafinal).AsDate:= DateEdit2.Date; Open; end;
A solução com parametros é sempre a mais adequada porque não importará a formatação de data do S.O... A conversão ficará a cargo da própria aplicação.
T+
GOSTEI 0
Fernando Piccini
17/01/2005
Para o pessoal que colaborou ai, com a duvida muito [color=green:7a894d6824][b:7a894d6824]obrigado[/b:7a894d6824][/color:7a894d6824]! :D
abraços pra todos
vlw
abraços pra todos
vlw
GOSTEI 0