jrtras 0 Denunciar post Postado Agosto 5, 2005 eis ai o codigo da busca DTModulo.QryRTLPg.Close; DTModulo.QryRTLPg.SQL.Clear; DTModulo.QryRTLPg.SQL.Add('SELECT TblPacientes.Nome, TblPacientes.Codigo, TblConvenio.Codigo, TblConvenio.Nome, TbPagamentos.* '); DTModulo.QryRTLPg.SQL.Add('FROM TblPacientes, TblConvenio INNER JOIN TbPagamentos '); DTModulo.QryRTLPg.SQL.Add('ON TblPacientes.Codigo = TbPagamentos.Id_paciente'); DTModulo.QryRTLPg.SQL.Add('AND TblConvenio.Codigo = TbPagamentos.Id_convenio'); DTModulo.QryRTLPg.SQL.Add('WHERE 1 = 1'); if idPaciente.Text <> '' then DTModulo.QryRTLPg.SQL.Add('AND TbPagamentos.Id_paciente = "' + idPaciente.text +'"'); if idConvenio.Text <> '' then DTModulo.QryRTLPg.SQL.Add('AND TbPagamentos.Id_convenio = "' + idConvenio.text +'"'); if idServico.Text <> '' then DTModulo.QryRTLPg.SQL.Add('AND TbPagamentos.Id_servico = "' + idServico.text +'"'); if idPagamento.Text <> '' then DTModulo.QryRTLPg.SQL.Add('AND TbPagamentos.Id_pagamento = "' + idPagamento.text +'"'); if dtInicio.Text <> '' then DTModulo.QryRTLPg.SQL.Add('AND TbPagamentos.Dt_pg BETWEEN "' + dtInicio.text + '" AND "' + dtFinal.Text +'"'); DTModulo.QryRTLPg.Open; o problema realmente eh esta parte q esta em negrito, pq o resto funciona corretamente, mas na hora q faco uma pesquisa entre dadas o lance n funciona o banco esta em DATE ja tentei colocar MASKEDIT mas nem assim funciona, hora da erro ora volta vazio e o banco ta cheio q faco? valeu Compartilhar este post Link para o post Compartilhar em outros sites
CameloBr 0 Denunciar post Postado Agosto 5, 2005 É o seguinte: Tenta primeiro converter de string para date -> StrToDate(dtInicio.text) e StrToDate(dtFinal.text); Isso deve funcionar, mas caso contrario, nao sei como ta teu programa, passa por parametro: if dtInicio.Text <> '' then Begin DTModulo.QryRTLPg.SQL.Add('AND TbPagamentos.Dt_pg BETWEEN :dtInicio AND :dtFinal'); DTModulo.QryRTLPg.parambyname('dtInicio').AsString := dtInicio.text; DTModulo.QryRTLPg.parambyname('dtFinal').AsString := dtFinal.text; end; DTModulo.QryRTLPg.Open; So uma pergunta: dtInicio.text e dtFinal.text estao vindo com o formato dd/MM/aaaa ? Tem que estar com esse formato ai, ex: 05/08/2005 Dependendo do banco de dados(nao sei qual o seu). Se for .GDB (intebase) nao tem problemas com esse codigo que estou te passando http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Ps: Só uma obervaçao, tem um furo ai: Acho que nao esta entrando nesse IF hein, porque voce so esta filtrando um campo. Da uma olhada ai colocando stop nesse IF, para ver se estar entrando quando voce digita as duas datas :P Espero ter ajudado :D Compartilhar este post Link para o post Compartilhar em outros sites
jrtras 0 Denunciar post Postado Agosto 6, 2005 bro tentei fazer isto, mas foi na mesma linha ficou assim:DTModulo.QryRTLPg.SQL.Add('AND TbPagamentos.Dt_pg BETWEEN "' + StrToDate(dtInicio.text) + '" AND "' + StrToDate(dtFinal.Text) +'"'); e mesmo assim deu erro, ai tentei com o q me deu, tb deu erroagora n sei se eh com o delphi ou com este paradox, banco gratuito eh o q da neh :( o lance do if funciona certinho sim, se o cara n colocar a data final um outro comando avisa, ou se por apenas a finalagora as datas as x com 00/00/0000 funcionam ora com 0/0/0000 funcionam, mas n eh sempre, a maioria da pausoh n achei a logica do erro, pq n eh a data = a do DB, nem data fora, eh uma data totalmente aleatoria ai funciona o trecotem solucao isto?valeu Compartilhar este post Link para o post Compartilhar em outros sites
jrtras 0 Denunciar post Postado Agosto 6, 2005 olha o erro q da:Project Teste.exe raised exception class EDBEngineError with message 'Type mismatch in expression'. Process stopped. Use Step or Run to Continuepior q agora colokei os numeros na mao e mesmo assim da erroeu fiz isto e deu certo DTModulo.QryRTLPg.SQL.Add('AND TbPagamentos.Dt_pg BETWEEN "10/12/2004" AND "10/10/2006"');ai acabei d reparar q qndo coloco aspas simples o treco n funciona, e qndo volto funciona, mas o problema tb esta qndo ponho um dia maior q o mespor ex:10/08/2004ai da erroforam as unicas coisas q consegui descobrir, mas ainda n solucionei o trecohelp gentevaleu Compartilhar este post Link para o post Compartilhar em outros sites
CameloBr 0 Denunciar post Postado Agosto 6, 2005 Cara agora que to vendo a besteira que escrevi !!! Não ia funcionar a parada do StrToDate, porque ele tem que concatenar, e so concatena strings http://forum.imasters.com.br/public/style_emoticons/default/blush.gif o a parada do if tb, vai entrar beleza, sem problemas. :P Vou ver se melhoro agora. Acho que o problema ta na aspas mesmo. Eu quando faço aqui, uso uma variavel global, tipo ASPAS := ' " '; Mas eu uso o Firebird para acessar o banco .GDB, pq voce nao usa, é bem melhor e mais confiavel http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Tentasse passando os parametros ? Faz o seguinte agora: Declara a variavel ASPAS (só pra ficar padrao e quando voce mudar o valor dela, muda no programa inteiro o tipo de consulta) como uma constante, logo embaixo do Implementation da unit (se tiver o USES, coloque abaixo dele): const ASPAS = '"'; Agora a consulta sql: if dtInicio.Text <> '' thenDTModulo.QryRTLPg.SQL.Add('AND TbPagamentos.Dt_pg BETWEEN '+ASPAS+ dtInicio.text +ASPAS+' AND '+ASPAS+ dtFinal.Text +ASPAS );Agora da uma conferida se o paradox permite voce usar aspas dupla na consulta, eu nao tenho certeza, mas se voce disse que testou beleza. Nao testei esse codigo ai, se errei alguma sintaxe, verica ai ok! Espero dessa vez ajudar, aew ^_^ Compartilhar este post Link para o post Compartilhar em outros sites
jrtras 0 Denunciar post Postado Agosto 6, 2005 bro este treco aki ta loco hahahhase ponho uma data q existe ele me retorna nada, mas qndo colokei uma data bem afastada tipo 2001 - 2007 ele volta todos os valorespo mas ai n serve, pq qro tirar a do dia, da semana, e por aiate melhorou, mas to achando q eh o DB, mas o q sera?bom eu soh to usando este PARADOX pq eh gratis e o pessoal n qr desembolsar grana pra isto, e me parece q o interbase tem q pagar neh?valeu Compartilhar este post Link para o post Compartilhar em outros sites
jrtras 0 Denunciar post Postado Agosto 6, 2005 cara nem isto funciona:DTModulo.QryRTLPg.SQL.Add(' AND TbPagamentos.Dt_pg = "' + dtInicio.text + '"');vi e revi o DB mas n achei nada estranho, fui nos datamodulo e tb n tinha nada errado, o unico pau q da sao as datasse ponho uma data acima do dia 12/7/2005 da erro, muito loco istoeu tenho registro com o dia 7/7/2005, mas se ponho esta data o lance n volta o registroto ficando biruta com isto aiaiaiaiabracos Compartilhar este post Link para o post Compartilhar em outros sites