Ir para conteúdo
Fórum Script Brasil
  • 0

Relatório - Varias Tabelas


Eder

Pergunta

Ola...tenho que fazer um relatorio meio complicadinho....não sei se é possivel...mas vou explicar

tenho as seguintes tabelas:

ajuste.db

codigo
codvei

vei.db

codvei
placa

viagem.db

codigo
data_saida
codlan
peso

abaste.db

codigo
codlan
litros
o que eu queria.... mostrar os veiculos no periodo sintetico sua quantidade de viagens, peso e os litros consumidos.. eu consegui mostrar o total de viagens e o peso mas não consigo mostrar os litros, pois ele esta na tabela abaste.db .....é aqui que ta o problema...não consigo amarrar o processo junto a tabela abaste.db sendo que a abaste.db esta amarrada a ajuste.db
ajuste.codigo = abaste.codlan (somente esta amarração existe).
meu codigo ta ai:
TXT := 'select * from AJUSTE, VEI, VIAGEM '+
 'where DATA_SAIDA between :datai and :dataf AND '+
 '(AJUSTE.CODIGO = VIAGEM.CODLAN) AND '+
 '(AJUSTE.CODVEI = VEI.CODVEI) ORDER BY VEI.PLACA';
eu teria que colocar neste codigo uma amarração pra abaste.db
ajuste.codigo = abaste.codlan

assim eu poderia mostrar os litros...

não sei se deu pra entender....mas é bem complicadinho mesmo de explicar...

Grato

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
Eder, vai ajudar se você colocar qual o relacionamento entre estas tabelas - que campo, de que tabela está relacionada a outra (que lado é 1 e qual é N).
R.: Bom seguinte....a tabela Mestre(pai) é a:

AJUSTE.DB

Codigo(relacionamento)

CodVei

esta se relaciona com as tabelas(filhas):

VIAGEM.DB

CodLan(Relaciomanento)

ABASTE.DB

CodLan(Relaciomanento)

então remumindo:

AJUSTE.CODIGO = VIAGEM.CODLAN

E

AJUSTE.CODIGO = ABASTE.CODLAN

NOTE que as tabelas viagem e abaste estão vinculadas a tabela ajuste atraves do campo chamado CODLAN

é isto que você quer dizer......?

haaaa..e a AJUSTE.DB relaciona com a Vei.db(mas é o relacionamento com o cadastro de veiculos)aqui não to vendo problemas.....

O problema maior é entre as tabelas:

AJUSTE.DB

VIAGEM.DB

ABASTE.DB

Grato

Link para o comentário
Compartilhar em outros sites

  • 0
NOTE que as tabelas viagem e abaste estão vinculadas a tabela ajuste atraves do campo chamado CODLAN

é isto que você quer dizer......?

exatamente!

bom, o SQL abaixo nos trará os dados (data_saida e peso) dos veículos ordenados por placa e data_saida:

select V.placa, G.data_saida, G.peso

from Viagem G, Ajuste A, Vei V

where G.data_saida between :datai and :dataf

and A.codigo = G.codlan

and V.codvei - A.codvei

order by V.placa, G.data_saida

Caso alguma viagem não implique em abastecimento, ocorrerá que não existirá um registro em Abaste.db para um determinado codigo em Ajuste, logo, não dá para simplesmente adicionar a relação da Abaste com Ajuste via cláusula WHERE porque poderíamos deixar informações de fora, já que o resultado implica na satisfação de todas as condições definidas nesta cláusula.

Em alguns bancos, é possível fazer outer joins (left ou right) na cláusula where utilizando um "*" no respectivo lado do sinal de "=", p.e. no SQLServer 2000 (se não estou "trocando as bolas"):

where Ajuste.codigo =* Abaste.codlan

Mas o padrão ANSI é o uso das cláusulas JOIN (inner, left/right outer - veja este artigo - ref. Comunidade-Firebird).

O Paradox é um pouco limitado neste sentido, mas dá suporte ao que você precisa. Então, acredito que com o acréscimo abaixo voce consiga obter os dados corretamente:

select V.placa, G.data_saida, G.peso, B.litros

from Viagem G, Ajuste A, Vei V

left join Abast B on (B.codlan = A.codigo)

where G.data_saida between :datai and :dataf

and A.codigo = G.codlan

and V.codvei - A.codvei

order by V.placa, G.data_saida

não sei se você o utiliza, mas daria para experimentar o código através do Database Desktop ou Database Explorer (ambos acompanham o Delphi).

Caso não o teste com as aplicações citadas, você pode fazer seu relatório inicialmente com uma banda detalhe, o que implica que você terá todos os dados listados e, então, poderá observar se há viajem onde não há litros associados (isto garante que você está pegando os registros corretamente - desde que esta condição realmente exista, é claro).

Uma vez testado, torná-lo sintético, é uma questão de utilizar bandas Group (header e footer) e QRExpr. Não é?!

- você deve ter observado que não utilizei o seu "*" no select - dê preferência a esta opção, se possível. ;)

- Também é conveniente o uso de alias para a tabela (é necessária nos JOIN) e evita problemas de conflito quando há colunas com mesmo nome em tabelas diferentes (ambiguous column name).

Abraços

Modelo_ER.doc

Link para o comentário
Compartilhar em outros sites

  • 0

Ola...Micheus..Bom Dia!

Carinha fiz os testes conforme sua instrução.

Primeiro dei uma alterada no seu codigo pois tava dando uns errinhos ficando assim:

testei num programinha que tenho que teste comando SQL

A data ali em baixo eu coloquei fixa pra teste.

Select A.Codigo, B.CodLan, V.placa, G.CodLan, G.data_saida, G.peso, B.litros
from Viagem G, Ajuste A, Vei V
left join Abaste B on (B.codlan = A.codigo)
where G.Data_Saida = '01/10/2007' 
and A.codigo = G.codlan
and V.codvei = A.codvei
order by V.placa, G.Data_Saida

também testei no quickreport pra ver se realmente bate com o programinha teste(emitante ao DatabaseDesktop).

O Problema:

quando o veiculo possuir 2 Abastecimentos....ele mostra os dois(certinho) mas ai ele mostra o peso duplicando ao nr de abastecimento.....e no quick.....ele totaliza o peso x 2

se tiver 5 abastecimentos fica peso x 5 (isto no quick)

Então resumindo..o problema que encontrei foi este....somente.

o resto ele processa legal....

Tem como corrigir isto????

Não tenho certeza, mas parece que alguém me comentou uma vez que left join o Paradox não gerencia legal......não sei ao certo.....

Obs.: quanto o restante das observações que você fez....OK :)

Grato

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...