Fórum Dúvidas DBEdit + DBGrid #479536

20/05/2014

0

Bom dia,

Estou tentando listar todos os filmes que pertencem a um diretor. O nome do diretor está em um DBEdit ligado ao datasource1, onde coloquei um DBNavigator também ligado ao datasource1. Logo tenho uma DBGrid onde devo exibir apenas as colunas Filme_TITPORT, Filme_TITORIG, Filme_ANO que correspondem ao nome do diretor do DBEdit e conforme vou passando os diretores pelo DBNavigator os dados do DBGrid devem ser atualizados.

DM
TSQLConnection -> TSQLQuery -> TDataSetProvider -> TClientDataSet

TSQLQuery - SQL
select filmes.film_titorig, filmes.film_titport, filmes.film_ano
from filmes, diretor
where filmes.dir_codigo = diretor.dir_codigo


Tentei colocar este código dentro do evento OnChange do DBEdit, mas da erro, veja que deixei o nome do diretor fixo somente para teste.
DM.sdsDiretorr.CommandText := 'select filmes.film_titorig, filmes.film_titport, filmes.film_ano from filmes, diretor where diretor.dir_nome ='+''''+'Steven Spielberg'+''''+'filmes.dir_codigo = diretor.dir_codigo;';
DM.sdsDiretorr.Close;
DM.sdsDiretorr.open; - Aqui da o erro


Tentei também o seguinte código, ainda dentro do OnChange do DBEdit
DM.qryFilmesDiretor.Close;
DM.qryFilmesDiretor.SQL.Clear;
DM.qryFilmesDiretor.SQL.Add('select filmes.film_titorig, filmes.film_titport, filmes.film_ano');
DM.qryFilmesDiretor.SQL.Add('from filmes, diretor');
DM.qryFilmesDiretor.SQL.Add('where filmes.dir_codigo = diretor.dir_codigo and diretor.dir_nome = :parametro;');
DM.qryFilmesDiretor.ParamByName('parametro').AsString := edtDiretor.Text;
DM.qryFilmesDiretor.Open;


Desde já muito obrigado!
Thiago Ribeiro

Thiago Ribeiro

Responder

Posts

20/05/2014

Mauricio Rodrigues

Bom dia, como Dbedit é componente ligado ao banco de dados, toda vez que vc avança ou retorna o ponteiro dentro do banco automaticamente ele atualiza os campos que está ligado a que tabela.

Coloca esse comando dentro de um Edit.

att,
Maurício Rodrigues
Responder

Gostei + 0

20/05/2014

Ricardo

Então, é que nem o Mauricio falou, tem que atualizar tudo automaticamente já que estão ligados no mesmo DataSource. Só quem um detalhe que aconteceu comigo em uma situação muito parecida com a sua, então tive que contornar o "problema".

Se os resultados retornados no DBGrid vem de mais de uma tabela, então você teria que colocar no evento OnChange no DBedit a rotina para fazer a consulta em todas tabelas onde o ID do diretor dor o pertencente ao diretor que esta atualmente de DBedit e assim por diante.

Não sei se consegui explicar direito, mas se for o caso eu posto aqui amanhã o código que eu fiz para um programa meu para poder funcionar em uma situação parecida.
Responder

Gostei + 0

21/05/2014

Thiago Ribeiro

Bom dia,

Amigos acabei me esquecendo de um detalhe muito importante o DBGrid está ligado em outro DataSource, a configuração de DM que mostrei representa a conexão que criei para este DataSource. Já o DataSource1 do DBEdit possui uma outra configuração, onde ele está funcionando perfeitamente exibindo o nome dos diretores e consigo passar os registros através do DBNavigator, eu até consigo fazer a listagem de todos os filmes com as colunas que desejo aparecem no DBGrid, mas por nada que faço consigo filtrar por Diretor.
Responder

Gostei + 0

21/05/2014

Mauricio Rodrigues

Faz o seguinte

DM.sdsDiretorr.CommandText := 'select filmes.film_titorig, filmes.film_titport, filmes.film_ano from filmes, diretor where diretor.dir_nome ='+''''+'Steven Spielberg'+''''+'filmes.dir_codigo = diretor.dir_codigo;';
DM.sdsDiretorr.Close;
DM.sdsDiretorr.open; - Aqui da o erro

coloca um showmessage(DM.sdsDiretorr.CommandText)

e da um print da tela e cola aqui.
Responder

Gostei + 0

21/05/2014

Cauê Nishijima

Por que simplesmente não faz duas consultas? Uma retornando todos os registos e outra condicionada ao autor?
Se precisar explico melhor
Responder

Gostei + 0

27/05/2014

Thiago Ribeiro

Bom dia,

Agradeço pela ajuda de todos, consegui resolver o problema com a seguinte estrutura:

DM
Banco -> qryFilmes -> dspFilmes -> cdsFilmes

-> tlbDiretor -> dspDiretor -> cdsDiretor

Query, onde o parâmetro foi definido como string.
select F.FILM_TITPORT, D.DIR_NOME, F.FILM_TITORIG from FILMES F, DIRETOR D
where F.dir_codigo = D.dir_codigo and d.dir_nome = :Diretor;


Form
DBEdit -> dsDiretor -> cdsDiretor
DBGrid -> dsFilmes -> cdsFilmes

procedure TfrmConsultaSQL.edtDiretorChange(Sender: TObject);
var Diretor : String;
begin
  Diretor := edtDiretor.Text;
  DMSQL.cdsFilmes.Close;
  DMSQL.qryFilmes.ParamByName('Diretor').AsString := Diretor;
  DMSQL.cdsFilmes.Open;
end;
Responder

Gostei + 0

27/05/2014

Nelson Santos

ganhe dinheiro com softwares 3D com Delphi 7
http://www.3dsistemas.com.br
Responder

Gostei + 0

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

Aceitar