Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Renanbg

[Resolvido] Consulta - Preciso pesquisar em 2 tabelas

Recommended Posts

Olá pessoal

 

Uso delphi 6 e paradox para um pequeno sistema

 

Lá tem um cadastro de projetos e me pediram para colocar um campo chamado solicitante que nada mais é que o nome da pessoa que solicitou o tal projeto.

 

Essa pessoa pode ser um cliente ou um funcionário da empresa.

 

Então a duvida é:

 

tem como pesquisar o o nome da pessoa na tabela clientes e na tabela funcionarios?

 

Se fosse em apenas 1 tabela eu usaria assim:

 

Querybusca.Close;
Querybusca.SQL.Clear;
Querybusca.SQL.Add('SELECT nome FROM TBCLIENTE WHERE nome LIKE ' + #39 + Edit1.Text + '%'+ #39);
Querybusca.SQL.Add('AND STATUS = "ATIVO"');
Querybusca.SQL.Add('order by nome');
Querybusca.Open;

Mas nas 2 tabelas tem como incrementar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola amigo

 

Tente fazer assim....

 

CODE
Querybusca.Close;

Querybusca.SQL.Clear;

Querybusca.SQL.Add('SELECT TBCLIENTE.nome, TBFUNCIONARIOS.nome FROM TBCLIENTE, TBFUNCIONARIOS WHERE (((TBCLIENTE.nome) LIKE ' + #39 + Edit1.Text + '%'+ #39) and ((TBFUNCIONARIOS.nome) LIKE ' + #39 + Edit1.Text + '%'+ #39)) ;

Querybusca.SQL.Add('AND STATUS = "ATIVO"');

Querybusca.SQL.Add('order by nome');

Querybusca.Open;

 

Abraço

 

Sergio Martins

Compartilhar este post


Link para o post
Compartilhar em outros sites

Traz apenas a tabela de clientes, mas eu resolvi mudar e fazer a pesquisa só na tabela de clientes

 

Obrigado pela ajuda Sergio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia a todos.

 

A instrução SQL não está correta, pois do jeito que está, está fazendo um produto cartesiano das Tabelas, ou seja, qual o critério de junção das tabelas ? Não há um campo que possa fazer associação entre os registros de ambas as tabelas, além disso, a instrução só trará os campos nome das Tabelas Clientes e Funcionários, ora quais campos da tabela Clientes e quais campos da Tabela Funcionários voce deseja visualizar ?

 

Qual a finalidade da pesquisa ? Se for só identificar se há o texto digitado consta cadastrado em ambas as tabelas (Clientes e Funcionários), então tudo bem, o raciocínio de trazer só o valor do campo nome está correto.

 

Porém se não for esta a finalidade, o seja, voce quer identificar outros campos de ambas as tabelas, então voce além de utilizar o código de junção de tabelas do nosso amigo Sergio, com a associação entre elas é claro, voce pode também utilização o código SQL de junção de tabelas com a cláusula INNER JOIN. Vamos a ambos os códigos:

 

Querybusca.Close;
  Querybusca.SQL.Clear;
  Querybusca.SQL.Add('SELECT F.*, C.* FROM TBFUNCIONARIOS F, TBCLIENTES C WHERE F.Id_Func = C.Id_Func ');
  Querybusca.SQL.Add('AND C.nome LIKE ' + QuotedStr(Edit1.Text + '%')
  Querybusca.SQL.Add(' AND C.STATUS = ' + QuotedStr('ATIVO');
  Querybusca.SQL.Add(' ORDER BY C.nome');
  Querybusca.Open;

A função QuotedStr(..) concatena aspas simples no texto.

 

Repare também que eu usei Aliases para as Tabelas (F para Funcionários e C para Clientes), isto ajuda muito a diminuir o código e identificar melhor as tabelas.

 

Agora com o INNER JOIN.

 

Querybusca.Close;
  Querybusca.SQL.Clear;
  Querybusca.SQL.Add('SELECT F.* FROM TBFUNCIONARIOS F INNER JOIN TBCLIENTES C ');
  Querybusco.SQL.Add(' ON F.Id_Func = C.Id_Func WHERE C.nome LIKE ' + QuotedStr(Edit1.Text + '%')
  Querybusca.SQL.Add(' AND C.STATUS = ' + QuotedStr('ATIVO');
  Querybusca.SQL.Add(' ORDER BY C.nome');
  Querybusca.Open;

É por ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.