Fórum Consultar sobre consulta #196212

20/11/2003

0

Ola pessoal

Blz.
è o seguinte tenho um sistema de locadora ,preciso qua na hora da locação o sistema me informe se o filme de n° tal ja foi locado pelo cliente de n° tal.

Na verdade tenho que aplicar um select e trazer os dados das locações anteriores deste cliente e em cima desses dados( 1° select que apliquei) aplicar outro select, verificando se o filme de n° tal que esta sendo locado já foi locado pelo cliente de n° tal.

Se alguem puder me ajudar ou dar uma diga de como criar esta consulta ficarei muito grato.

Obrigado a todos do forum que me ajudaram muito .


Alexrol

Alexrol

Responder

Posts

20/11/2003

Denis

Olá,

Não sei se entendi direito o que quer. Mas acho que o que vc. quer é um select dentro do outro.
Passe as tabelas para a gente ter uma idéia melhor.


Responder

Gostei + 0

20/11/2003

Alexrol

Tenhio a tabela de pedidos (Locações) e Itens_Pedido(Filmes)

Muito bem Quando inico uma nova locação ja informo os dados do cliente /hora / numero da locação/ etc.

na hora que vou adicionar os itens_pedido(filmes), preciso Localizar os pedidos anteriores deste cliente (tabela Pedidos) trazendo-me os filmes (tabela Itens_Pedido) que ja foram locados por ele anteriormente e em cima disso consultar se o filme que ele estal ocando já foi locado por ele anteriormente.Caso o filme ja foi locado ele me retorna uma menssagem para que eu possa advertir o cliente ,que ele ja locou aquele filme.

minha tabelas são :

Clientes
Dados Basicos
Filmes
Dados Basicos

Pedido
Num_Loc
Cod_Cli
Total_Loc
Data_Hora_Loc
N_Itens
etc...

Itens_Pedido
Cod_Loc
Num_Item_Loc
Cod_Filme
Sub_Total
Total
etc...

Então eu preciso pesquisar o cliente trazendo todos os dados do mesmo e em cima disso pesquisar o filme que esta sendo locado.
ou seja ´preciso aplicar um select em cima de outro select

detalhe au uso o interbase com DbExpress


Responder

Gostei + 0

20/11/2003

Denis

Ok. Acho que entendi mais ou menos o que quer fazer.

Vc. pode fazer uma select que elimina os filmes que já alugou da pesquisa. Mas isto seria um problema. Pois o cliente pode alugar o mesmo filme várias vezes ( eu mesmo sou dono de alugar filmes e esquecer de assistir e depois tenho que alugar de novo, rs,rs,rs). Então esta maneira não seria viável.
O que vc. pode fazer são duas selects separadas mesmo.
Uma select teria todos os filmes. ( select * from filmes )

Quando desse um clique para alugar um filme, então o programa faria uma outra select apenas para consultar se o filme foi alugado por ele ou não.
( select * from itens_pedidos where cod_filme = :cod_filme and cod_cli = :Cliente ) mais ou menos assim.

Então, se esse segunda select retornasse algum dado então o filme já teria sido alugado e vc. poderia dar um aviso para o operador do sistema. Mas sem bloqueios.
Claro, depois melhorar um pouco, trazendo apenas os campos necessários e assim por diante.

Agora para fazer uma select dentro de outra select seria assim :

Select * from filmes where cod_Filme not in (select cod_filme from pedidos where cliente=:cliente)

Mais ou menos assim para as suas tabelas, pois não passou os campos que relacionam as tabelas. Mas já dá para ter uma idéia de como funciona. Só que desta forma eliminaria da consulta todos os filmes que o cliente já alugou.

Espero ter ajudado alguma coisa.


Responder

Gostei + 0

20/11/2003

Denis

ahhh.. para o dbexpress é exatamente igual. Só muda um pouco a forma de acesso (bem mellhor), mas as instruções sql e a logica seria a mesma.


Responder

Gostei + 0

20/11/2003

Davidbezerra

porque vc nao utiliza um locate no lugar de um segundo select,

por exemplo:

apos o select dos filmes que o cliente ja locou, vc aplica um locate do filme que ele esta locando, e caso o filme esteja no resultado do select dos filmes ja locados pelo cliente ele returna verdadeiro, e sendo o resultado verdadeiro o filme ja foi locado pelo cliente.

ate mas.


Responder

Gostei + 0

21/11/2003

Rafael_gamba

Concordo com o Davidbezerra. Um locate na primeira query seria ideal.
a primeira query seria do tipo :

select * from itens pedidos where cliente = :cli

apartir desta query vc faria o locate desta forma:

If Query1.Locate(´Cod_Filme´,TabelaFilmeCodFilme.value,[LocaseInsensitive]) then
ShowMessage(´Filme já locado´);

A idéia do Dennis também é boa. O problema é que vc não tem as 2 informações na mesma tabela. Vc teria que pegar o numero da locação para depois ver o número do filme.


Responder

Gostei + 0

21/11/2003

Denis

Vcs. tem razão um locate tb ficaria bom. Como ele está usando dbexpress, tb está usando clientdatasets. E neste vc. pode indexar da maneira que quiser sem problemas, e o locate fica rápido e sem tráfego de rede.


Responder

Gostei + 0

21/11/2003

Alexrol

e ai pessoal

Valeu pela força , vcs me ajudaram muito.
agradeço a todos vcs

valeu mesmo :D - (b)


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar