Dúvidas DBEdit + DBGrid
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
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.
Tentei também o seguinte código, ainda dentro do OnChange do DBEdit
Desde já muito obrigado!
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
Curtidas 0
Respostas
Mauricio Rodrigues
20/05/2014
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
Coloca esse comando dentro de um Edit.
att,
Maurício Rodrigues
GOSTEI 0
Ricardo
20/05/2014
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.
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
Thiago Ribeiro
20/05/2014
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.
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
Mauricio Rodrigues
20/05/2014
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.
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
Cauê Nishijima
20/05/2014
Por que simplesmente não faz duas consultas? Uma retornando todos os registos e outra condicionada ao autor?
Se precisar explico melhor
Se precisar explico melhor
GOSTEI 0
Thiago Ribeiro
20/05/2014
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.
Form
DBEdit -> dsDiretor -> cdsDiretor
DBGrid -> dsFilmes -> cdsFilmes
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
Nelson Santos
20/05/2014
ganhe dinheiro com softwares 3D com Delphi 7
http://www.3dsistemas.com.br
http://www.3dsistemas.com.br
GOSTEI 0