ADO/SQL e duas tabelas
Pessoal,
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
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
Curtidas 0
Respostas
Tnaires
23/12/2003
Olá wbb, vc pode fazer o seguinte:
No Delphi, faça o seguinte:
Sucesso
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
Wbb
23/12/2003
Obrigado pela ajuda tnaires.
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
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
Tnaires
23/12/2003
Bom, nao tenho certeza, mas eu acho q o Delphi muda os nomes d campos com mesmo nome automaticamente. Qdo abrir a query, de um ctrl + espaço pra ver os nomes dos campos. Talvez o Delphi tenha colocado nomes como NOME_1, NOME_2, etc.
Ou entao, coloque todos os campos q vc quer manualmente.
Sucesso
PS: neste post, a palavra nome foi escrita 7 vezes... :?
Ou entao, coloque todos os campos q vc quer manualmente.
Sucesso
PS: neste post, a palavra nome foi escrita 7 vezes... :?
GOSTEI 0
Wbb
23/12/2003
Ok. Obrigado.
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.
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
Wbb
23/12/2003
Bem tnaires... com eu te disse, não sou supersticioso.
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
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
Tnaires
23/12/2003
Ah legal cara, vivendo e aprendendo! Não sabia dessa sintaxe.
Qdo eu falei nome, tb incluí seus gêneros... :D
Abraços e sucesso
Qdo eu falei nome, tb incluí seus gêneros... :D
Abraços e sucesso
GOSTEI 0
Lcarvalhoneto
23/12/2003
Cara, eu não sei qual a sua intenção, mas se vc quiser ter um resultado unindo as duas tabelas, utilize o Union.
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?
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