RELATORIO COM O DATAREPORT

ALVAROVB2009 24/08/2009 14:22:03
#320823



strSQL = SHAPE { SELECT DISTINCT e.codempr,e.nomeempr FROM tbempresas e INNER JOIN tbassociados a ON e.codempr = a.codempr WHERE e.codempr in (2269,2629,4,1116,2605,681,1) group by e.codempr,e.nomeempr} AS Command1 APPEND ({ SELECT count(A.matricula) as Total,a.chapa,a.matricula,a.nomeassociado, a.codempr, a.dtInscricao, a.bairroAssociado , a.endAssociado, a.estadoAssociado, a.cidadeAssociado, a.telAssociado FROM tbassociados a Where a.demAssociado <> [ô]__/__/____[ô] and a.codempr in (2269,2629,4,1116,2605,681,1) and a.dtInscricao >=#01/01/1900# and a.dtInscricao <=#12/31/9999# group by chapa, matricula, nomeassociado, codempr, dtInscricao,bairroAssociado, endAssociado, estadoAssociado, cidadeAssociado, telAssociado order by a.Matricula ASC } AS Command2 RELATE [ô]codempr[ô] TO [ô]codempr[ô]) AS Command2

Galera preciso disso com uma certa urgência, se alguém puder me ajudar agradeço e muito.
Estou reabrindo um problema que esquentou minha cabeça e dos amigos que tentaram me ajudar
http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=Abrir&varID=318085&varWorld=
O tópico é esse acima

Deixa eu colocar novamente um resumo do problemão

O problema é o seguinte, tenho um datareport que possui um vinculo com o dataenviromemnt e que exibi o resultado de duas tabelas - TbEmpresas e TbAssociados

Bom para fazer essa união tive que fazer dois commands no dataenveroment, um apenas para os dados da empresa, para que no formulário possa sair a empresa sózinha no cabeçalho (distinct) e o segundo command, pega o código da empresa e traz os seus devidos associados. Até ai tudo bem é fácil, e ja esta funcionando.

Problema
O problema está no momento de imprimir alguns relatório, pois dependendo do filtro que o usuário aplicar ao relatório, a empresa para a não ter associados selecionados e com isso o relatório é impresso apenas com o cabeçalho da empresa, e o usuário gostaria que isso não acontecesse, pois são muitas empresas que são exibidas sem necessidades.

Aos amigos coloquei o trecho do código que utilizo para fazer essa seleção e o link do print do meu relatório.
Nesse print, o relatório do lado esquerdo não era para aparecer, pois não tem nenhum associados selecionado e o que esta do lado direto está correto.

No código tentei colocar um count na matricula e coloquei uma cláusula no where para exibir somente as empresas que tenham associados, porém não deu certo, pois não importa o que eu faça, o relatório continua sendo impresso com as empresas sem associados.


Abraço a todos e agradeço
ROBIU 24/08/2009 15:47:19
#320829
Troca o INNER JOIN por RIGHT JOIN. Verifique, tambem, o relacionamento entre as tabelas. Se você está usando o inner Join, era para retornar apenas os arquivos que há nas duas tabelas.

Click aqui e Observe este exemplo. Ele está configurado para exibir todos registros da tabela principal, mesmo que a tabela secundária não tenha registros. Porém, quando trocamos o LEFT JOIN por INNER JOIN ou RIGHT JOIN, ele só exibe os dados quando há registros na tabela secundária. Veja se você pode comparar sua select com o deste projeto.
JILNEY 24/08/2009 20:41:50
#320848
Ou coloque um EXISTS para selecionar a tabela secundaria apenas onde existir o codigo da empresa.
ALVAROVB2009 26/08/2009 15:13:42
#321024
ROBIU e JiLNEY agradeço a vocês pela força de vocês e por todos que me ajudaram no outro tópico.

Eu consegui fazer rodar o relatório, o que fiz parecia até óbvio, más eu não tinha pensado nisso ainda.
No DataEnverironmente eu tenho o command1 que faz a pesquisa da tabela de empresas e o commando2 que faz a pesquisa dos associados.

O que eu estava fazendo antes era uma busca simples na tabela empresa
SELECT DISTINCT e.codempr,e.nomeempr FROM tbempresas e INNER JOIN tbassociados a ON e.codempr = a.codempr WHERE e.codempr in (2269,2629,4,1116,2605,681,1) group by e.codempr,e.nomeempr} AS Command1
Aqui eu pegava os associados das empresas selecionadas, até ai tudo bem

Com isso como ele faz um vínculo com o command1 e command2, ele pega o que esta selecionado no command1, ou seja as empresas que possuem associados cadastrados, e compara com o command2 que é a seleção dos associados do filtro, então como as consultas são feitas individualmente no dataenvironment, o que o DATAREPORT faz.
Pega a primeira empresa, monta o cabeçalho e vai buscar os associados da segunda seleção(command2), e quando não tinha nenhum ele deixava o relatório apenas com o cabeçalho.

O que fiz foi fazer a mesma busca da tabela de associados, na tabela de empresas, só que buscando o código da empresa da tabela de associados e não da tabela de empresa como esta sendo feito antes, assim as empresas selecionadas seriam as empresas qie tinham os associados selecionados pelo filtro
SELECT DISTINCT e.codempr,e.nomeempr FROM tbassociados a Where a.demAssociado <> [ô]__/__/____[ô] and a.codempr in (2269,2629,4,1116,2605,681,1) and a.dtInscricao >=#01/01/1900# and a.dtInscricao <=#12/31/9999#

Era uma coisa até que simples, porém não tinha pensado nisso, rsrsrs
é vivendo e apanhando, um dia a gente aprende rsrsrsrs

Abraço a todos, acho que consegui explicar o que eu enxerguei nesse problema
Tópico encerrado , respostas não são mais permitidas