Fórum Dúvidas DBEdit + DBGrid #479536
20/05/2014
0
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
Curtir tópico
+ 0Posts
20/05/2014
Mauricio Rodrigues
Coloca esse comando dentro de um Edit.
att,
Maurício Rodrigues
Gostei + 0
20/05/2014
Ricardo
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.
Gostei + 0
21/05/2014
Thiago Ribeiro
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.
Gostei + 0
21/05/2014
Mauricio Rodrigues
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.
Gostei + 0
21/05/2014
Cauê Nishijima
Se precisar explico melhor
Gostei + 0
27/05/2014
Thiago Ribeiro
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;
Gostei + 0
27/05/2014
Nelson Santos
http://www.3dsistemas.com.br
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)