Fórum ADO/SQL e duas tabelas #202694
23/12/2003
0
Gostaria de fazer uma pesquisa com ADOQuery relacionando duas tabelas, mas está dando alguns problemas.
Fiz o seguinte:
ADOQuery1.SQL.Add(´Select * from TAB1, TAB2 where TAB1.NOME = ´´´ + Nome + ´´´ and TAB2.NOME = ´´´ + Nome + ´´´´);
A pesquisa em si parece ter funcionado corretamente. Porém não estou sabendo como ler o conteúdo desta pesquisa que utiliza duas tabelas. Se fosse uma única tabela a leitura do campo seria:
Edit1.Text := ADOQuery1.FieldValues[´NOME´];
Com duas tabelas eu tentei algo como mostrado abaixo, mas dá erro:
Edit1.Text := ADOQuery1.FieldValues[´[b:cbafd0f430]TAB1.[/b:cbafd0f430]NOME´];
Alguém pode ajudar?
Obrigado.
wbb
Wbb
Curtir tópico
+ 0Posts
23/12/2003
Tnaires
SELECT TAB1.NOME AS NOME1, TAB2.NOME AS NOME2 FROM TAB1, TAB2 WHERE NOME1 = :NOME AND NOME2 LIKE NOME1
No Delphi, faça o seguinte:
ADOQuery1.Close; ADOQuery1.Parameters.ParamByName(´NOME´).AsString := Nome; ADOQuery1.Open; Edit1.Text := ADOQuery1.FieldValues[´NOME1´]; Edit2.Text := ADOQuery1.FieldValues[´NOME2´];
Sucesso
Gostei + 0
23/12/2003
Wbb
A maneira como você indicou funciona sem dúvida, para campos determinados.
Porém, na pesquisa que preciso fazer é necessário que sejam selecionados todos os campos das duas tabelas. Sendo assim, como posso fazer para me referir aos demais campos além do campo NOME que foi o que você indicou por ´Aliases´?
Valeu!
wbb
Gostei + 0
23/12/2003
Tnaires
Ou entao, coloque todos os campos q vc quer manualmente.
Sucesso
PS: neste post, a palavra nome foi escrita 7 vezes... :?
Gostei + 0
23/12/2003
Wbb
Vou ver o que consigo alterar...
wbb
OBS.1: Não sou supersticioso. hehehe...
OBS.2: A palavra ´nome´ não pode ser considerada igual a ´nomes´. Portanto são menos que 7 vezes.
Gostei + 0
23/12/2003
Wbb
Finalmente consegui resolver.
Então, para selecionar todos os campos de duas tabelas diferentes (ou mais) onde existam campos com o mesmo nome nas duas tabelas, sem a necessidade de definir ´aliases´ para todos os campos (apenas para os campos com o mesmo nome), pode-se fazer da maneira abaixo.
Exemplo: Para as tabelas abaixo, selecionar todos os registros das duas tabelas onde os campos NOME das duas tabelas possuam o nome [color=red:3fec19c278]NomeXXX[/color:3fec19c278].
TABELA1 contém os campos: NOME, SOBRENOME, FONE, CELULAR, ESTCIVIL
TABELA2 contém os campos: NOME, SOBRENOME, RUA, CEP, CIDADE, ESTADO
Os campos NOME e SOBRENOME aparecem nas duas tabelas. Portanto, basta fornecer aliases aos campos de apenas uma tabela e pronto.
ADOQuery1.SQL.Add(
´Select [color=red:3fec19c278][b:3fec19c278]*[/b:3fec19c278][/color:3fec19c278], TABELA1.NOME as AuxNOME, TABELA1.SOBRENOME as AuxSOBRE
from TABELA1, TABELA2 where
TABELA1.NOME = ´´´ + [color=red:3fec19c278]NomeXXX [/color:3fec19c278]+ ´´´ and TABELA2.NOME = ´´´ + [color=red:3fec19c278]NomeXXX [/color:3fec19c278]+ ´´´´);
Para ler os campos dos registros selecionados na pesquisa, basta fazer como de costume:
Edit1.Text := ADOQuery1.FieldValues[´AuxNOME´];
Edit2.Text := ADOQuery1.FieldValues[´AuxSOBRE´];
Edit4.Text := ADOQuery1.FieldValues[´CELULAR´];
Edit3.Text := ADOQuery1.FieldValues[´CEP´];
...
...
...
etc.
É isso!
Valeu!
Até mais.
wbb
Gostei + 0
23/12/2003
Tnaires
Qdo eu falei nome, tb incluí seus gêneros... :D
Abraços e sucesso
Gostei + 0
24/12/2003
Lcarvalhoneto
Mas atenção, é importante selecionar os mesmos campos nas tabelas.
Ex:
Select Campo1, Campo2, Campo3 from Tabela1
union
Select Campo1, Campo2, Campo3 from Tabela2
Isso fará com que a tabela ´pareça´ ser uma só
QQ coisa escreva ok?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)