RELATORIO COM O DATAREPORT
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
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.
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.
Ou coloque um EXISTS para selecionar a tabela secundaria apenas onde existir o codigo da empresa.
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
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