Relatorio QReport Master Detail Complicado (eu acho)
Pessoal, tenho a seguinte consulta:
SELECT TBHOSPEDAGEM.ID, TBHOSPEDAGEM.HSDATAENT, TBHOSPEDAGEM.HSDATASAI, TBAPTO.APNUMERO, TBHOSPEDE.HONOME, TBHOSPEDE.HOFONE, TBEMPRESA.EMNOME, TBEMPRESA.EMFONE, TBPAGAMENTO.PGDATA, TBPAGAMENTO.PGVALOR,TBPAGAMENTO.PGTIPO
FROM TBAPTO
INNER JOIN TBHOSPEDAGEM ON TBAPTO.ID = TBHOSPEDAGEM.HSAPTO_ID
INNER JOIN TBHOSPACOMP ON TBHOSPEDAGEM.ID = TBHOSPACOMP.HAIDHOSP
LEFT JOIN TBEMPRESA ON TBHOSPEDAGEM.HSEMPR_ID = TBEMPRESA.ID
LEFT JOIN TBHOSPEDE ON TBHOSPACOMP.HAIDACOM = TBHOSPEDE.ID
LEFT JOIN TBPAGAMENTO ON TBHOSPEDAGEM.ID = TBPAGAMENTO.PGIDHOSP
WHERE TBHOSPEDAGEM.ID = 68
Por ter bastantes tabelas com diferentes registros (um para muitos), estou com problemas para retornar isto no qreport através de uma query (duplicidade de registros). Por tanto, gostaria que os senhores me ajudassem a configurar esta consulta com Tables (ou IBTables, estou usando IB) e master detail. Não saco muito Relatorios nem qreport, mas pelo que andei pesquisando, vou precisar de uma table para cada tabela e um datasource para a tabela principal. O que não sei fazer é configurar a propriedade Master/Detail das tables, alguem poderia me explicar??
O que tenho:
TBHOSPEDAGEM (Tabela principal) com ID (Chave primaria)
TBHOSPEDAGEM Recebe o ID da tabela TBEMPRESA (Se ouver)
TBHOSPACOMP Recebe o ID da tabela principal e o ID da tabela Hospede (um para muitos e muitos para um)
TBPAGAMENTO recebe o ID da tabela TBPAGAMENTO (um para muitos)
E ai galera? deu pra entender? Como configuro as IBTables Propriedade Master/Detail?
Dá pra desenrolar esse relaótio!?!?!?
SELECT TBHOSPEDAGEM.ID, TBHOSPEDAGEM.HSDATAENT, TBHOSPEDAGEM.HSDATASAI, TBAPTO.APNUMERO, TBHOSPEDE.HONOME, TBHOSPEDE.HOFONE, TBEMPRESA.EMNOME, TBEMPRESA.EMFONE, TBPAGAMENTO.PGDATA, TBPAGAMENTO.PGVALOR,TBPAGAMENTO.PGTIPO
FROM TBAPTO
INNER JOIN TBHOSPEDAGEM ON TBAPTO.ID = TBHOSPEDAGEM.HSAPTO_ID
INNER JOIN TBHOSPACOMP ON TBHOSPEDAGEM.ID = TBHOSPACOMP.HAIDHOSP
LEFT JOIN TBEMPRESA ON TBHOSPEDAGEM.HSEMPR_ID = TBEMPRESA.ID
LEFT JOIN TBHOSPEDE ON TBHOSPACOMP.HAIDACOM = TBHOSPEDE.ID
LEFT JOIN TBPAGAMENTO ON TBHOSPEDAGEM.ID = TBPAGAMENTO.PGIDHOSP
WHERE TBHOSPEDAGEM.ID = 68
Por ter bastantes tabelas com diferentes registros (um para muitos), estou com problemas para retornar isto no qreport através de uma query (duplicidade de registros). Por tanto, gostaria que os senhores me ajudassem a configurar esta consulta com Tables (ou IBTables, estou usando IB) e master detail. Não saco muito Relatorios nem qreport, mas pelo que andei pesquisando, vou precisar de uma table para cada tabela e um datasource para a tabela principal. O que não sei fazer é configurar a propriedade Master/Detail das tables, alguem poderia me explicar??
O que tenho:
TBHOSPEDAGEM (Tabela principal) com ID (Chave primaria)
TBHOSPEDAGEM Recebe o ID da tabela TBEMPRESA (Se ouver)
TBHOSPACOMP Recebe o ID da tabela principal e o ID da tabela Hospede (um para muitos e muitos para um)
TBPAGAMENTO recebe o ID da tabela TBPAGAMENTO (um para muitos)
E ai galera? deu pra entender? Como configuro as IBTables Propriedade Master/Detail?
Dá pra desenrolar esse relaótio!?!?!?
Rafaelunp
Curtidas 0
Respostas
Galouco
10/11/2003
Bom cara, vamos lá..... pelo que entedí quanto a duplicidade de registros, vc pode usar na consulta o comando ´DISTINCT´ EX: SELECT DISTINCT......
Isso resolve a duplicidade dos dados, porém se quiser usar uma tabela ou query pra cada tabela vou dar uma dica de como fazer isso, mas usando query, espero que aude.
Existe uma tabela pai de todas, então adicione uma query para cada tabela e para a tabela pai, adicione um datasource.(Estou imaginando que tenho somente tabelas ligadas a essa tabela ´pai´, não estou imaginando que as outras tabelas ligam umas nas outras, mas o exemplo tratado servirá para este caso se ele acontecer).
Bom, adicionado as querys, então agora adicione em cada uma delas um SQL selecionando os seus respectivos registros, mas com uma diferença, na clausula WHERE de cada uma(tirando a tabela pai) adicione:
...WHERE tb_filha.id = :id_pai
lembrando que o parâmetro ´:id_pai´ deve ser exatamente o nome da chave da tabela pai. Por exemplo, se temos a tabela pai chamada Clientes e sua chave chamada ID_CLIENTES deveremos adicionar ´:ID_CLIENTES´.
Terminado ligue o data source das outras querys no datasource da tabela pai.
Acho que isso resolve....
Abraços, quaquer coisa me fale....
Albert Sena Taure
albert.ninf@newtonpaiva.br
Isso resolve a duplicidade dos dados, porém se quiser usar uma tabela ou query pra cada tabela vou dar uma dica de como fazer isso, mas usando query, espero que aude.
Existe uma tabela pai de todas, então adicione uma query para cada tabela e para a tabela pai, adicione um datasource.(Estou imaginando que tenho somente tabelas ligadas a essa tabela ´pai´, não estou imaginando que as outras tabelas ligam umas nas outras, mas o exemplo tratado servirá para este caso se ele acontecer).
Bom, adicionado as querys, então agora adicione em cada uma delas um SQL selecionando os seus respectivos registros, mas com uma diferença, na clausula WHERE de cada uma(tirando a tabela pai) adicione:
...WHERE tb_filha.id = :id_pai
lembrando que o parâmetro ´:id_pai´ deve ser exatamente o nome da chave da tabela pai. Por exemplo, se temos a tabela pai chamada Clientes e sua chave chamada ID_CLIENTES deveremos adicionar ´:ID_CLIENTES´.
Terminado ligue o data source das outras querys no datasource da tabela pai.
Acho que isso resolve....
Abraços, quaquer coisa me fale....
Albert Sena Taure
albert.ninf@newtonpaiva.br
GOSTEI 0
Delphistar
10/11/2003
bom... pelo visto vc tem uma query com todos os dados que vc precisa, e vc quer agrupa-los...
ex :
Apartamento X[list:fa8d4a3bf1]
10/10 a 11/10 Cliente1
12/10 a 15/10 Cliente2 [/list:u:fa8d4a3bf1]
Apartamento Y[list:fa8d4a3bf1]
09/10 a 11/10 Cliente3[/list:u:fa8d4a3bf1]
eh mais ou menos isso que vc quer?
ex :
Apartamento X[list:fa8d4a3bf1]
10/10 a 11/10 Cliente1
12/10 a 15/10 Cliente2 [/list:u:fa8d4a3bf1]
Apartamento Y[list:fa8d4a3bf1]
09/10 a 11/10 Cliente3[/list:u:fa8d4a3bf1]
eh mais ou menos isso que vc quer?
GOSTEI 0
Rafaelunp
10/11/2003
Bom cara, vamos lá..... pelo que entedí quanto a
Terminado ligue o data source das outras querys no datasource da tabela pai.
Acho que isso resolve....
Abraços, quaquer coisa me fale....
Albert Sena Taure
albert.ninf@newtonpaiva.br
Cara, seguinte:
fiz o que voce falou, mas o resultado obtido não foi o esperado.
Em um group header tenho os dados que não se repetirão, isto é, os dado da tabela pai.
Em um detail tenho os dados de tabelas diferentes e consequentemente independentes (Hospede e Pagamento).
Observei que se eu colocar no dataset do quickrep a query do hospede, me retorna os dados (no detail) da tabela hospede ok, mas os pagamentos aparecem repetidos. Se eu coloco no dataset a query pagamento aparece os dados ok, mas os hospedes repetidos, se eu coloco a query pai, aparece apenas o primeiro dado de cada query...
E agora? Onde está o pró?? :roll:
GOSTEI 0