GARANTIR DESCONTO

Fórum ADO/SQL e duas tabelas #202694

23/12/2003

0

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


Wbb

Wbb

Responder

Posts

23/12/2003

Tnaires

Olá wbb, vc pode fazer o seguinte:
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


Responder

Gostei + 0

23/12/2003

Wbb

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


Responder

Gostei + 0

23/12/2003

Tnaires

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... :?


Responder

Gostei + 0

23/12/2003

Wbb

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.


Responder

Gostei + 0

23/12/2003

Wbb

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


Responder

Gostei + 0

23/12/2003

Tnaires

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


Responder

Gostei + 0

24/12/2003

Lcarvalhoneto

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?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar