Jump to content
Fórum Script Brasil
  • 0

Relatório - Varias Tabelas


Eder
 Share

Question

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 to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.1k
    • Total Posts
      647.1k
×
×
  • Create New...