Preciso de ajuda com um SELECT

Delphi

05/06/2003

Tenho um cadastro de clientes onde existe uma tabela para armazenar os dados do cliente, uma para armazenar os tipos de contado (residencial, comercial,...) e outra para armazenar os contatos (231-3445,...). Fazendo isso eu dou oportunidade ao usuário de armazenar quantos “tipos de contato” e “contato” ele achar necessário para cada cliente!

Minha tabela de contatos (Contatos) está assim:

CodCliente; CodTipo; Contato.

Minha tabela de Tipo (Tipos) de contato está assim:

Codigo; Tipo.

Tenho um relatório de aniversariantes do mês, mas não estou conseguindo puxar os telefones de cada cliente e seus respectivos tipos.

O relatório está ligado a uma TQuery (query1) com o seguinte código: “SELECT * FROM Clientes”, o campo “contato” do relatório está ligado a uma outra TQuery (query2) com o seguinte código em sua propriedade SQL:

SELECT C.CodCliente, T.Tipo, C.Contato
FROM Contatos C, Clientes Cl, Tipos T
WHERE C.CodCliente = Cl.Codigo
AND C.CodTipo = T.Codigo

O DataSet do QuickRep está ligado a query1.

Quando executo o relatório o QRLabel ligado a query2, nesse caso o contato, aparece apenas um e esse se repete em todos os clientes!

Gostaria que cada cliente aparecesse com seus números de telefone e respectivos tipos de contato. Como posso fazer isso?

Já me responderam da seguinte forma:

´Para este problema é necessário vc fazer um select join com as duas tabelas na mesma query, para que o seu quick report possa enxergar, por que vc está somente lendo a partir da query1, faça um select que traga todos os dados das tabela ligados pelo código do cliente e pelo tipo, entendeu?´

Gostaria que alguém pudesse exemplificar para mim tomando por base meu código, pois sou leigo em Delphi e não estou sabendo fazer!

Desde já eu agradeço!


Flaviolrf

Flaviolrf

Curtidas 0

Respostas

Luciano Pimenta®

Luciano Pimenta®

05/06/2003

Use um Inner Join

SELECT CLI.CodCliente, CLI.NomeCliente, TIP.Tipo, CON.Contato
FROM CLIENTES CLI
inner join TIPO TIP on TIP.CodTipo = CON.CodTipo
inner join CONTATO CON on CON.CodCliente = CLI.CodCliente


GOSTEI 0
Thoor Cobain

Thoor Cobain

05/06/2003

Não precisa de Joins fica mais lento faça assim:

ex:

SELECT
CLIENTES.CODCLIENTE,
CLIENTES.NOMECLIENTE,
CONTATOS.CONTATO,
TIPOS.TIPO
FROM CLIENTES, CONTATOS, TIPOS
WHERE CLIENTES.CODCLIENTE= CONTATOS.CODCLIENTE
AND CONTATOS.CODTIPO=TIPOS.CODIGO

Seria melhor voce alterar na tabela tipos o codigo p/ CodTipo assim ficaria igual o da tabela Contatos, só p/ ficar mais organizado


GOSTEI 0
Flaviolrf

Flaviolrf

05/06/2003

Dei uma garimpada em todas as dicas me passada e consegui fazer o que queria. Valeu pela ajuda de todos!


GOSTEI 0
POSTAR