Fórum Dúvida na hora de fazer filtro com data #425730
08/10/2012
0
Acredito que realmente essa seja uma dúvida besta, mais não estou conseguindo fazer, vamos lá. Tenho um campo na minha tabela que é TIMESTEMP, quando faço o select de dentro do ibexpert só para teste ele funciona porque eu coloco as aspas ( '' ), mais o filtro tem que vim da minha aplicação, e eu tenho que colocar as aspas também, e não estou conseguindo fazer isso, para ficar assim exemplo: '01.09.2012' and '30.09.2012'. Como eu faço para colocar aspas na hora de concatenar as datas?
Sql := 'select * from TBL_SAIDA_CABECALHO, TBL_SAIDA_PRODUTO '+
'where sai_cabe_dtsaida between = '+DateToStr(DateI.Date) + 'and' +
DateToStr(DateF.Date) + 'order by sai_cabe_dtsaida';
Filipe Campos
Curtir tópico
+ 0Posts
08/10/2012
Bruno Leandro
Sql := 'select * from TBL_SAIDA_CABECALHO, TBL_SAIDA_PRODUTO '+
'where sai_cabe_dtsaida between = '+quotedstr(DateToStr(DateI.Date)) + 'and' +
quotedstr(DateToStr(DateF.Date)) + 'order by sai_cabe_dtsaida';
Gostei + 0
08/10/2012
Joel Rodrigues
minhaQuery.SQL.Text := 'select * from TBL_SAIDA_CABECALHO, TBL_SAIDA_PRODUTO where sai_cabe_dtsaida between :dataI and :dataF order by sai_cabe_dtsaida';
minhaQuery.ParamBtName('dataI').AsDateTime := DateI.Date;
minhaQuery.ParamBtName('dataF').AsDateTime := DateF.Date;
//...continuar
Gostei + 0
08/10/2012
Singular Ti
Experimente usar parâmetros:
#Código
minhaQuery.SQL.Text := 'select * from TBL_SAIDA_CABECALHO, TBL_SAIDA_PRODUTO where sai_cabe_dtsaida between :dataI and :dataF order by sai_cabe_dtsaida';
minhaQuery.ParamBtName('dataI').AsDateTime := DateI.Date;
minhaQuery.ParamBtName('dataF').AsDateTime := DateF.Date;
//...continuar
Eu faria uma pequena mudanca:
Experimente usar parâmetros: #Código minhaQuery.SQL.Text := 'select * from TBL_SAIDA_CABECALHO, TBL_SAIDA_PRODUTO where sai_cabe_dtsaida between :dataI and :dataF order by sai_cabe_dtsaida'; minhaQuery.Params[0].AsDateTime := DateI.Date; minhaQuery.Params[1].AsDateTime := DateF.Date; //...continuar
Abraços!!
Gostei + 0
08/10/2012
Joel Rodrigues
Gostei + 0
08/10/2012
Filipe Campos
Eu testei da forma que todos falaram, e da um erro quando clico no botão 'Ok' obs: Ok é para disparar o evento. O erro é Unknown SQL Data type (0).
Segue o meu código...
Dm_Dados.SqlFiltroSaida2.Close;
Dm_Dados.SqlFiltroSaida2.SQL.Clear;
Dm_Dados.SqlFiltroSaida2.SQL.Text:='select * from TBL_SAIDA_CABECALHO, TBL_SAIDA_PRODUTO'+
'where sai_cabe_dtsaida between = :dataI and :dataF order by sai_cabe_dtsaida';
Dm_Dados.SqlFiltroSaida2.ParamByName('dataI').AsDateTime := DateI.Date;
Dm_Dados.SqlFiltroSaida2.ParamByName('dataF').AsDateTime := DateF.Date;
Dm_Dados.SqlFiltroSaida2.ExecSQL;
RelMovSaidas := TFrmRelMovSaida.Create(Self);
RelMovSaidas.QuickRep1.Preview;Esse código é para fazer um filtro por data qualquer que o cliente vai entrar, e mostrar na tela o relatório que está ligado a está query.
Gostei + 0
08/10/2012
Singular Ti
Opa, Leandro. Fiquei curioso sobre o motivo pelo qual você prefere acessar os parâmetros pelo índice e não pelo nome.
O fato de acessar pelo índice ou pelo nome eu não vejo nenhuma diferença de funcionalidade, seria apenas um atalho mesmo, no final vai executar o Params.ParamByName do mesmo jeito como vemos na função a seguir
function TCustomSQLQuery.ParamByName(Const AParamName : String) : TParam; begin Result:=Params.ParamByName(AParamName); end;
Como te disse.. seria apenas uma forma mais simples de passar um parametro para uma instrucao SQL e tambem ja li relatos de colegas que dizem que usando indice a execucao seria mais rapido ou dinamica... Mas porem nunca parei para testar ou medir essa informação pois como te falei no final sera executado a funcao Params.ParamByName..
Abraços!!!!
Gostei + 0
08/10/2012
Singular Ti
Eu testei da forma que todos falaram, e da um erro quando clico no botão 'Ok' obs: Ok é para disparar o evento. O erro é Unknown SQL Data type (0).
Amigo o seu problema, pode estar no dialect 1, pois esse dialect nao suporta o tipo data, vc tera que alterar o dialect 1 para dialect 3, da sua Base de dados.
Da uma olhada nisso....Abraços!!!
Gostei + 0
08/10/2012
Filipe Campos
Gostei + 0
09/10/2012
Joel Rodrigues
Um abraço.
Gostei + 0
09/10/2012
Alisson Santos
Gostei + 0
09/10/2012
Filipe Campos
Gostei + 0
09/10/2012
Alisson Santos
Gostaria de saber qual é o tipo de banco de dados que está utilizando?
Verifique se isso resolve para você a sua duvida.
Dm_Dados.SqlFiltroSaida2.Close;
Dm_Dados.SqlFiltroSaida2.SQL.Clear;
Dm_Dados.SqlFiltroSaida2.SQL.Text:='select * from TBL_SAIDA_CABECALHO, TBL_SAIDA_PRODUTO'+
'where sai_cabe_dtsaida between = :dataI and :dataF order by sai_cabe_dtsaida';
Dm_Dados.SqlFiltroSaida2.ParamByName('dataI').AsDateTime := Nesse local colocar o campo que vai passar os valores que são recebidos pelo usuário;
Dm_Dados.SqlFiltroSaida2.ParamByName('dataF').AsDateTime := Nesse local colocar o campo que vai passar os valores que são recebidos pelo usuário;
Dm_Dados.SqlFiltroSaida2.ExecSQL;
RelMovSaidas := TFrmRelMovSaida.Create(Self);
RelMovSaidas.QuickRep1.Preview;
Gostei + 0
09/10/2012
Filipe Campos
Segue o código
Dm_Dados.SqlFiltroSaida2.SQL.Clear;
Dm_Dados.SqlFiltroSaida2.SQL.Text:='select * from TBL_SAIDA_CABECALHO, TBL_SAIDA_PRODUTO'+
'where sai_cabe_dtsaida between = :dataI and :dataF order by sai_cabe_dtsaida';
Dm_Dados.SqlFiltroSaida2.ParamByName('dataI').AsDateTime := DateI.Date;
Dm_Dados.SqlFiltroSaida2.ParamByName('dataF').AsDateTime := DateF.Date;
Dm_Dados.SqlFiltroSaida2.ExecSQL;
RelMovSaidas := TFrmRelMovSaida.Create(Self);
RelMovSaidas.QuickRep1.Preview;
O DateF.Date; e o DateI.Date; São componentes de data do proprio Delphi. E o banco que eu utilizo é o firebird, o tipo de dado que está no banco é Timestamp.
Gostei + 0
09/10/2012
Joel Rodrigues
Abraço.
Gostei + 0
09/10/2012
Filipe Campos
Segue código modificado..
Dm_Dados.SqlFiltroSaida2.SQL.Clear;
Dm_Dados.SqlFiltroSaida2.SQL.Text:='select * from TBL_SAIDA_CABECALHO, TBL_SAIDA_PRODUTO'+
'where sai_cabe_dtsaida between :dataI and :dataF order by sai_cabe_dtsaida';
Dm_Dados.SqlFiltroSaida2.ParamByName('dataI').AsDateTime := DateI.Date;
Dm_Dados.SqlFiltroSaida2.ParamByName('dataF').AsDateTime := DateF.Date;
Dm_Dados.SqlFiltroSaida2.ExecSQL;
RelMovSaidas := TFrmRelMovSaida.Create(Self);
RelMovSaidas.QuickRep1.Preview;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)