SQL e relatorio Quickreport

01/03/2010

1

Pessoal estou fazendo um relatorio no quickreport, utilizo firebird, clientdataset.

Em uma tabela que é a principal tenho alguns campos e dependo de mais 2 tabelas para preencher outros campos.

este é meu sql:

select presenca.id_cod,
       presenca.id_func,
       presenca.data,
       presenca.codigo,
       presenca.codigogeracao,
       presenca.entrada,
       presenca.almoco,
       presenca.retorno,
       presenca.saida,
       presenca.horaextra,
       presenca.somadiaria,
       presenca.atrasado,
       presenca.dt_cadastro,
       presenca.hora,
       presenca.fechado,
       presenca.regmarcacaoentrada,
       presenca.regmarcacaoalmoco,
       presenca.regmarcacaoretorno,
       presenca.regmarcacaosaida,
       presenca.regponto,
       presenca.regultimo,
       presenca.ocorrencia,
       cargahoraria.id_cargahoraria,
       cargahoraria.entrada as c_entrada,
       cargahoraria.almoco as c_almoco,
       cargahoraria.retorno as c_retorno,
       cargahoraria.saida as c_saida
from funcionario
   inner join presenca on (funcionario.id_func = presenca.id_func)
   inner join cargahoraria on (funcionario.id_cargahoraria = cargahoraria.id_cargahoraria)
where
   (
      (presenca.id_func = 1)
   and
      (presenca.data >= '01/01/2010')
   and
      (presenca.data <= '01/31/2010')
   and
      (presenca.fechado = 'S')
   )
order by presenca.id_func, presenca.data


Problema é que no relatorio preciso imprimir os campos relacionados: cargahoraria.id_cargahoraria, cargahoraria.entrada, cargahoraria.almoco, cargahoraria.retorno, cargahoraria.saida. Acontece que estes campos nao aparecem de jeito nenhum. Eles deveriam aparecer na tabela presenca, que é a tabela que estou fazendo a juncao atraves dos joins?

Nos QRDBText estou selecionando o dataset cdsPresenca, mas estes campos nao aparecem....

Me ajudem...
Responder

Posts

01/03/2010

Iramar Junior

Pessoal no sql onde é from funcionario o correto é from presenca.

select presenca.id_cod,
       presenca.id_func,
       presenca.data,
       presenca.codigo,
       presenca.codigogeracao,
       presenca.entrada,
       presenca.almoco,
       presenca.retorno,
       presenca.saida,
       presenca.horaextra,
       presenca.somadiaria,
       presenca.atrasado,
       presenca.dt_cadastro,
       presenca.hora,
       presenca.fechado,
       presenca.regmarcacaoentrada,
       presenca.regmarcacaoalmoco,
       presenca.regmarcacaoretorno,
       presenca.regmarcacaosaida,
       presenca.regponto,
       presenca.regultimo,
       presenca.ocorrencia,
       funcionario.nome,
       cargahoraria.id_cargahoraria,
       cargahoraria.entrada as c_entrada,
       cargahoraria.almoco as c_almoco,
       cargahoraria.retorno as c_retorno,
       cargahoraria.saida as c_saida
from presenca
   inner join funcionario on (funcionario.id_func = presenca.id_func)
   inner join cargahoraria on (funcionario.id_cargahoraria = cargahoraria.id_cargahoraria)
where
   (
      (presenca.id_func = 1)
   and
      (presenca.data >= '01/01/2010')
   and
      (presenca.data <= '01/31/2010')
   and
      (presenca.fechado = 'S')
   )
order by presenca.id_func, presenca.data
Responder

01/03/2010

Wilson Junior

Como está a definição das suas tabelas (PK, FK e campos NOT NULL)?
Responder

01/03/2010

Iramar Junior

Tabela presenca:

ID_COD pk
ID_FUNC fk

Tabela funcionario
ID_FUNC pk
ID_CARGAHORARIA fk

Tabela cargahoraria
ID_CARGAHORARIA pk


Responder

01/03/2010

Wilson Junior

Já tentou retirar a cláusula WHERE do seu SQL e testar se retorna algo? Se sim e retornou algo, comece colocar uma cláusula de cada vez e ir executando o SQL.
Outra coisa, suas FK são NOT NULL né? Pois você está fazendo INNER.

Qualquer coisa post aí.

Espero ter colaborado.
Responder

01/03/2010

Iramar Junior

O SQL quando executo dentro do IB Expert me traz o resultado desejado com todos os campos, porem, no delphi estou utilizando assim:

with DMPrincipal do
begin
     cdspresenca.close;
     cdspresenca.params.clear;
     qrypresenca.sql.clear;

qrypresenca.sql.add('select p.id_cod, p.id_func, p.data, p.codigo, p.codigogeracao, p.entrada, ');
qrypresenca.sql.add('p.almoco, p.retorno, p.saida, p.horaextra, p.somadiaria, p.atrasado, ');
qrypresenca.sql.add('p.dt_cadastro, p.hora, p.fechado, p.regmarcacaoentrada, p.regmarcacaoalmoco, ');
qrypresenca.sql.add('p.regmarcacaoretorno, p.regmarcacaosaida, p.regponto, p.regultimo, p.ocorrencia, ');
qrypresenca.sql.add('f.nome, ch.id_cargahoraria, ch.entrada as c_entrada, ch.almoco as c_almoco, ');
qrypresenca.sql.add('ch.retorno as c_retorno, ch.saida as c_saida ');
qrypresenca.sql.add('from presenca p ');
qrypresenca.sql.add('inner join funcionario f on (f.id_func = p.id_func) ');
qrypresenca.sql.add('inner join cargahoraria ch on (f.id_cargahoraria = ch.id_cargahoraria) ');
qrypresenca.sql.add('where ((p.id_func = ' + RzEdit.text +') and (p.data >= ' + EvDateEditI.Value + ') ');
qrypresenca.sql.add('and (p.data <= ' + EvDateEditF.Value +') and (p.fechado = 'S') ');
qrypresenca.sql.add('order by p.id_func, p.data');

cdsPresenca.FetchParams;
cdsPresenca.Open;
end;


mas acontece que nao aparece os campos das tabelas ligadas pelo inner join (detalhe da linha em negrito), esta aparecendo somente os campos da tabela presenca p.

Nao deveria aparecer o resultado de todos os campos igual esta aparecendo no ibexpert?

Por esse motivo nao consigo fazer com que imprima no quickreport os campos dessas tabelas ligadas....

Todas as FK sao NOT NULL

Responder
talvez seu cdsPresenca esteja com os campos persistidos. se você persistiu somente os campos da tabela presenca, somente esses serão exibidos.

Responder

01/03/2010

Iramar Junior

o que fazer para incluir os demais campos? ou tem alguma opcao no CDS para aceitar outros campos alem dos persistivos.
Responder
Deixe-me ver se entendi a sua questão.
Responder
Deixe-me ver se entendi a sua questão.   Quando vc inseri os dados no QuickReport em modo de designer os campos não aparecem é isso?   Pq vc alimenta esse dataset em tempo de execução não é?      
Responder
você pode:

1- remover todos os campos persistidos; ou
2- persistir todos os campos que deseja exibir;
Responder