SQL e relatorio Quickreport
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...
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...
Iramar Junior
Curtidas 0
Respostas
Iramar Junior
01/03/2010
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
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
GOSTEI 0
Wilson Junior
01/03/2010
Como está a definição das suas tabelas (PK, FK e campos NOT NULL)?
GOSTEI 0
Iramar Junior
01/03/2010
Tabela presenca:
ID_COD pk
ID_FUNC fk
Tabela funcionario
ID_FUNC pk
ID_CARGAHORARIA fk
Tabela cargahoraria
ID_CARGAHORARIA pk
ID_COD pk
ID_FUNC fk
Tabela funcionario
ID_FUNC pk
ID_CARGAHORARIA fk
Tabela cargahoraria
ID_CARGAHORARIA pk
GOSTEI 0
Wilson Junior
01/03/2010
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.
Outra coisa, suas FK são NOT NULL né? Pois você está fazendo INNER.
Qualquer coisa post aí.
Espero ter colaborado.
GOSTEI 0
Iramar Junior
01/03/2010
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
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
GOSTEI 0
Emerson Nascimento
01/03/2010
talvez seu cdsPresenca esteja com os campos persistidos. se você persistiu somente os campos da tabela presenca, somente esses serão exibidos.
GOSTEI 0
Iramar Junior
01/03/2010
o que fazer para incluir os demais campos? ou tem alguma opcao no CDS para aceitar outros campos alem dos persistivos.
GOSTEI 0
Perivaldo Martins
01/03/2010
Deixe-me ver se entendi a sua questão.
GOSTEI 0
Perivaldo Martins
01/03/2010
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 é?
GOSTEI 0
Emerson Nascimento
01/03/2010
você pode:
1- remover todos os campos persistidos; ou
2- persistir todos os campos que deseja exibir;
1- remover todos os campos persistidos; ou
2- persistir todos os campos que deseja exibir;
GOSTEI 0