Corposemalma Postado Abril 7, 2004 Denunciar Share Postado Abril 7, 2004 Para inciar... Seguinte: Preciso fazer uma pesquisa encima de uma outra... Estou usando o Dbisam com duas query diferentes:Da seguinte maneira:with query1 dobla bla blaSQL.Add('SELECT * FROM tabelateste');ExecSQLwith query2 dobla bla blaSQL.Add('SELECT * FROM ???? (tabela resultado do Query1)O problema está em eu não poder enxergar a tabela no outro query, alguém sabe como posso fazer isso??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 piradox Postado Abril 7, 2004 Denunciar Share Postado Abril 7, 2004 você tem que declarar a primeira query e depois fazer a segunda query com um parâmetroTipo 'select * from funcionario' retorna o funcionario com codigo 1Daí você faz outra query:'select * from vendas where cod_funcionario = :cod_funcionario' //:cod_funcionario é o parâmetroantes de dar o Open na segunda query, você precisa setar o parâmetro 'cod_funcionario' assim:query2.parameter.parambyname('cod_funcionario').asinteger := query1.fieldbyname('cod_funcionario').asinteger;query2.Open; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Guest Postado Abril 7, 2004 Denunciar Share Postado Abril 7, 2004 O problema é que dessa maneira eu tenho que comparar o query1 com uma tabela já existente, quando na verdade eu quero carregar o query inteiro em outro usando alguns criterios de selecao, Por exemplo:SELECT * FROM (query1) WHERE nome LIKE 'A%'Mas acontece que o SQL pode acessar os banco, mas não os componentes, Então:* Tem alguma maneira de acessar o banco inteiro que se encontra no Query1?* Existe como eu re-filtrar o Query1 (ai não precisaria do query2) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Corposemalma Postado Abril 7, 2004 Autor Denunciar Share Postado Abril 7, 2004 OPS!!! esqueci de logar! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest s3c Postado Abril 7, 2004 Denunciar Share Postado Abril 7, 2004 Dê um exemplo prático da query1 e query2 que você quer fazer Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Corposemalma Postado Abril 7, 2004 Autor Denunciar Share Postado Abril 7, 2004 Pequeno banco só pra aprender um pouco...Query1=dados.tabsqlQuery2=dados.tabconsulta Tabelas=tabcd, tabartista, tabgeneroPrimeira QUERYON SHOW form de ConsultaBegin with dados.tabsql do begin sql.Clear; SQL.add('SELECT ' + 'tabcd.título as Título, ' + 'tabartista.nome ' + '+' + '''' + ' ' + '''' + '+' + ' tabartista.sobrenome AS Artista, ' + 'tabcd.ano as Ano, ' + 'tabgenero.genero AS Gênero, ' + 'tabcd.comentário as Comentários ' + 'FROM tabcd, tabartista, tabgenero ' + 'WHERE tabcd.codartista = tabartista.codartista ' + 'AND ' + 'tabcd.codgenero = tabgenero.codgenero order by tabcd.título'); ExecSQL; end;Como se pode notar ele junta as duas colunas NOME e SOBRENOME em uma só Chamada ARTISTAEntão com a segunda QUERY:Ele checa se o edit está vazio, caso não ele usa o texto do edit como um parametro LIKE que deveria filtrar a coluna ARTISTA(antiga NOME + SOBRENOME) do QUERY1 já existente para DENTRO da QUERY2On button CONSULTA press with dados.tabconsulta do begin SQL.Clear; SQL.Add(' SELECT * FROM ????tabsql???? WHERE'); if edittitulo.text <> '' then begin dados.tabconsulta.SQL.Add(' tabsql.título LIKE ' + '''' + '%' + edittitulo.text + '%' + '''');Assim eu não precisaria refazer todas as consultas...Talvez esteja fazendo tudo errado e pela maneira mais dificil... Se alguém tiver uma ideia melhor! Fazer o que.. isso acontece quando se quer aprender sozinho as coisas.. Modo ninja... 20 pirueta pra dar um soco Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Gimbals Postado Abril 7, 2004 Denunciar Share Postado Abril 7, 2004 SQL.add('SELECT ' + 'tabcd.título as Título, ' + 'tabartista.nome ' + '+' + '''' + ' ' + '''' + '+' + ' tabartista.sobrenome AS Artista, ' + 'tabcd.ano as Ano, ' + 'tabgenero.genero AS Gênero, ' + 'tabcd.comentário as Comentários ' + 'FROM tabcd, tabartista, tabgenero ' + 'WHERE tabcd.codartista = tabartista.codartista ' + 'AND ' + 'tabcd.codgenero = tabgenero.codgenero'); if edittitulo.text <> '' then begin SQL.add(' AND (tabartista.nome like ... OR tabartista.sobrenome like...); end; SQL.add(' order by tabcd.título'); execsql; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Corposemalma Postado Abril 7, 2004 Autor Denunciar Share Postado Abril 7, 2004 Saquei! o OR entre os () não implica a obrigatoriedade e não anula os resultados anteriores!HEhehe.. um pouco obvio!!!! valeu! Vo testar! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Corposemalma Postado Abril 7, 2004 Autor Denunciar Share Postado Abril 7, 2004 EI! Funcionou! é claro! Mas como fazer LIKE sem ser sensivel ao Case (maiusculas/minusculas)??? AH! valeu todo mundo pelas dicas! E principalmente a velocidade das respostas Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Corposemalma
Para inciar...
Seguinte: Preciso fazer uma pesquisa encima de uma outra... Estou usando o Dbisam com duas query diferentes:
Da seguinte maneira:
with query1 do
bla bla bla
SQL.Add('SELECT * FROM tabelateste');
ExecSQL
with query2 do
bla bla bla
SQL.Add('SELECT * FROM ???? (tabela resultado do Query1)
O problema está em eu não poder enxergar a tabela no outro query, alguém sabe como posso fazer isso???
Link para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.