COMO PREENCHER UM DBGrid com DADOS DO BD?
Boa Tarde
pessoar estou tentando PREENCHER UM DBGrid com DADOS DO BD mas o codigo não da certo?
arguem pode me dar uma dica?
ja tentei varias codigos ma sem sucesso...
Obrigardo!!!
pessoar estou tentando PREENCHER UM DBGrid com DADOS DO BD mas o codigo não da certo?
arguem pode me dar uma dica?
ja tentei varias codigos ma sem sucesso...
Obrigardo!!!
Elisangela Silva
Curtidas 0
Respostas
André Celestino
05/01/2013
Olá, Elisângela.
Pra Preencher a DBGrid com os dados de uma tabela, basta ligar a propriedade DataSource do DBGrid em um Dataset.
Por exemplo, você tem um Dataset (ClientDataSet ou Query) com os dados da tabela. Ligue este componente a um DataSource, e em seguida a DBGrid neste DataSource. Os dados já serão exibidos automaticamente.
Pra Preencher a DBGrid com os dados de uma tabela, basta ligar a propriedade DataSource do DBGrid em um Dataset.
Por exemplo, você tem um Dataset (ClientDataSet ou Query) com os dados da tabela. Ligue este componente a um DataSource, e em seguida a DBGrid neste DataSource. Os dados já serão exibidos automaticamente.
GOSTEI 0
Elisangela Silva
05/01/2013
Olá, Elisângela.
Pra Preencher a DBGrid com os dados de uma tabela, basta ligar a propriedade DataSource do DBGrid em um Dataset.
Por exemplo, você tem um Dataset (ClientDataSet ou Query) com os dados da tabela. Ligue este componente a um DataSource, e em seguida a DBGrid neste DataSource. Os dados já serão exibidos automaticamente.
Pra Preencher a DBGrid com os dados de uma tabela, basta ligar a propriedade DataSource do DBGrid em um Dataset.
Por exemplo, você tem um Dataset (ClientDataSet ou Query) com os dados da tabela. Ligue este componente a um DataSource, e em seguida a DBGrid neste DataSource. Os dados já serão exibidos automaticamente.
Ola Amigo correto seu raciocinio mas o que eu quero é:
Bom, o que eu quero na verdade é fazer que medida que eu realizar a busca no banco, ou seja, digitar o codigo do cliente que quero no Edit1 e clicar no botão pesquisar,então o DBgrid seja preenchido somente com os dados deste cliente.
eu até tenho o select pronto mas o erro ocorre na hora de inserir os dados no DBGrid.
Se alguem puder dar uma dica...
Obrigado
GOSTEI 0
Lucas Chagas
05/01/2013
Olá tudo certo?
Pelo que eu entendi você quer que ao digitar o sistema busque na base os dados. É isso?
Se for no edit1 use o evento "onChange", nele vc irá repassar ao componente de pesquisa no banco o parâmetro da pesquisa, assim atualizando o seu grid.
A query deve ter na sua sintaxe filtro do campo pelo like.
Caso resolva não remontar toda vez a query, pode através do clientdataset utilizar um locate e ele posiciona no primeiro registro posicionado.
Boa sorte abraços.
Pelo que eu entendi você quer que ao digitar o sistema busque na base os dados. É isso?
Se for no edit1 use o evento "onChange", nele vc irá repassar ao componente de pesquisa no banco o parâmetro da pesquisa, assim atualizando o seu grid.
A query deve ter na sua sintaxe filtro do campo pelo like.
Caso resolva não remontar toda vez a query, pode através do clientdataset utilizar um locate e ele posiciona no primeiro registro posicionado.
Boa sorte abraços.
GOSTEI 0
Elisangela Silva
05/01/2013
Olá tudo certo?
Pelo que eu entendi você quer que ao digitar o sistema busque na base os dados. É isso?
Se for no edit1 use o evento "onChange", nele vc irá repassar ao componente de pesquisa no banco o parâmetro da pesquisa, assim atualizando o seu grid.
A query deve ter na sua sintaxe filtro do campo pelo like.
Caso resolva não remontar toda vez a query, pode através do clientdataset utilizar um locate e ele posiciona no primeiro registro posicionado.
Boa sorte abraços.
Pelo que eu entendi você quer que ao digitar o sistema busque na base os dados. É isso?
Se for no edit1 use o evento "onChange", nele vc irá repassar ao componente de pesquisa no banco o parâmetro da pesquisa, assim atualizando o seu grid.
A query deve ter na sua sintaxe filtro do campo pelo like.
Caso resolva não remontar toda vez a query, pode através do clientdataset utilizar um locate e ele posiciona no primeiro registro posicionado.
Boa sorte abraços.
Ok Obrigado pela dica ...mas o select da pesquisa eu ja fiz usando like e sem usar o like ambos funcionam quando testo pelo iboconsole mas no delphi o que esta dando eerrro não é o select é na hora de inserção dos dados no grid...engraçado que estou fazendo dois exercicios simultaneamente e testei este pedaço de codigo:
DBGridPedidos.Columns[0].FieldName := 'NUMEROPEDIDO';
DBGridPedidos.Columns[1].FieldName := 'CLIENTE' ;
DBGridPedidos.Columns[2].FieldName := 'DATAPEDIDO' ;
DBGridPedidos.Columns[3].FieldName := 'FORMAPAGTO' ;
em um deu certo mas em outro da o seguinte erro:
List index out of bounds(1)
mais uma vez obrigado pelas respostas...
GOSTEI 0
Daniel Santos
05/01/2013
É, olhando esse codigo da pra ver quem tem alguma coisa muito errada! o certo é voce postar o projeto inteiro para ter uma visao geral.
GOSTEI 0
Wellington Menezes
05/01/2013
Informe a instrução SQL que vc está usando
GOSTEI 0
Elisangela Silva
05/01/2013
Bom dia Pessoal,
segue o código, se alguem puder ajudar.
Obrigado
segue o código, se alguem puder ajudar.
if EditPedido.Text = '' then
begin
Showmessage('Digite o numero do pedido');
EditPedido.SetFocus;
exit;
end;
try
with DM.SQLConnPedidos do begin
DM.qryPedidos.Close;
DM.qryPedidos.SQL.Clear;
DM.qryPedidos.SQL.Add (' SELECT ');
DM.qryPedidos.SQL.Add (' NUMEROPEDIDO, ');
DM.qryPedidos.SQL.Add (' CLIENTE, ');
DM.qryPedidos.SQL.Add (' DATAPEDIDO, ');
DM.qryPedidos.SQL.Add (' FORMAPAGTO ');
DM.qryPedidos.SQL.Add (' FROM PEDIDOS ');
if(EditPedido.Text <> '') then
begin
DM.qryPedidos.SQL.Add('WHERE NUMEROPEDIDO LIKE' + QuotedStr(EditPedido.Text));
end;
DM.qryPedidos.Open;
end;
DBGridPedidos.Columns[0].FieldName := 'NUMEROPEDIDO';
DBGridPedidos.Columns[1].FieldName := 'CLIENTE' ;
DBGridPedidos.Columns[2].FieldName := 'DATAPEDIDO' ;
DBGridPedidos.Columns[3].FieldName := 'FORMAPAGTO' ;
except
on E:Exception do
ShowMessage(E.Message);
end;Obrigado
GOSTEI 0
Elisangela Silva
05/01/2013
alguem para ajudar
GOSTEI 0
André Celestino
05/01/2013
Elisângela, se o campo NUMEROPEDIDO for numérico, então não é preciso utilizar o QuotedStr, já que essa função envolve o valor em aspas.
Outra observação: já que o número do pedido é um valor exato, então ao invés de LIKE, utilize o sinal de igual mesmo ( = ):
Outra observação: já que o número do pedido é um valor exato, então ao invés de LIKE, utilize o sinal de igual mesmo ( = ):
DM.qryPedidos.SQL.Add('WHERE NUMEROPEDIDO = ' + EditPedido.Text); GOSTEI 0
Elisangela Silva
05/01/2013
Elisângela, se o campo NUMEROPEDIDO for numérico, então não é preciso utilizar o QuotedStr, já que essa função envolve o valor em aspas.
Outra observação: já que o número do pedido é um valor exato, então ao invés de LIKE, utilize o sinal de igual mesmo ( = ):
Outra observação: já que o número do pedido é um valor exato, então ao invés de LIKE, utilize o sinal de igual mesmo ( = ):
DM.qryPedidos.SQL.Add('WHERE NUMEROPEDIDO = ' + EditPedido.Text); fiz o que vc falou mas o erro esta aqui qdo executo
DBGridPedidos.Columns[0].FieldName := 'NUMEROPEDIDO'; DBGridPedidos.Columns[1].FieldName := 'CLIENTE' ; DBGridPedidos.Columns[2].FieldName := 'DATAPEDIDO' ; DBGridPedidos.Columns[3].FieldName := 'FORMAPAGTO' ;
GOSTEI 0
Elisangela Silva
05/01/2013
mensagem do erro:
List index out of bounds(1)
List index out of bounds(1)
GOSTEI 0
André Celestino
05/01/2013
Você está tentando acessar algum índice de coluna que não existe.
Experimente comentar essas 4 linhas e ver se funciona.
Caso funcionar, verifique a quantidade de colunas que são retornadas.
Experimente comentar essas 4 linhas e ver se funciona.
Caso funcionar, verifique a quantidade de colunas que são retornadas.
GOSTEI 0
Landerson Santos
05/01/2013
Elisangela tente fazer o seguinte, não passe para o dbgrid os nomes dos campos como está fazendo... (apenas para testar)
O seu select, caso o campo numero do pedido seja numérico vc deve passar o com
... NUMPEDIDO = ' + edit1.text;
Após isso apenas no evento o click do seu buton de um ClientDataset.OPEN; (acredito eu que vc esteja usando um ClientDataset)
Com isso o dbgrid vai abrir, mesmo que vazio, caso de vc estar digitando um pedido que não exista.
O seu select, caso o campo numero do pedido seja numérico vc deve passar o com
... NUMPEDIDO = ' + edit1.text;
Após isso apenas no evento o click do seu buton de um ClientDataset.OPEN; (acredito eu que vc esteja usando um ClientDataset)
Com isso o dbgrid vai abrir, mesmo que vazio, caso de vc estar digitando um pedido que não exista.
GOSTEI 0
Landerson Santos
05/01/2013
Olá Elisangela... Acho que fazendo assim funciona...
Confirme por favor.
if EditPedido.Text = '' then
begin
Showmessage('Digite o numero do pedido');
EditPedido.SetFocus;
exit;
end;
try
with DM.SQLConnPedidos do begin
DM.qryPedidos.Close;
DM.qryPedidos.SQL.Clear;
DM.qryPedidos.SQL.Add (' SELECT ');
DM.qryPedidos.SQL.Add (' NUMEROPEDIDO, ');
DM.qryPedidos.SQL.Add (' CLIENTE, ');
DM.qryPedidos.SQL.Add (' DATAPEDIDO, ');
DM.qryPedidos.SQL.Add (' FORMAPAGTO ');
DM.qryPedidos.SQL.Add (' FROM PEDIDOS ');
if(EditPedido.Text <> '') then
begin
DM.qryPedidos.SQL.Add('WHERE NUMEROPEDIDO LIKE' + QuotedStr(EditPedido.Text));
end;
//Aqui vamos definir que o dataset do datasource é o dataset da sua query
DATASOURCE1.DATASET := DM.qryPedidos;
//Aqui vamos garantir que seu dbgrid está com o datasource associado
DBGridPedidos.datasource := DATASOURCE1
DM.qryPedidos.Open;
end;
// Comentamos essas linhas aqui abaixo
{
DBGridPedidos.Columns[0].FieldName := 'NUMEROPEDIDO';
DBGridPedidos.Columns[1].FieldName := 'CLIENTE' ;
DBGridPedidos.Columns[2].FieldName := 'DATAPEDIDO' ;
DBGridPedidos.Columns[3].FieldName := 'FORMAPAGTO' ;
}
except
on E:Exception do
ShowMessage(E.Message);
end;Confirme por favor.
GOSTEI 0
Elisangela Silva
05/01/2013
Ola
tentando assim da esse erro:
tentando assim da esse erro:
Operation not allowed on a unidirectional dataset
GOSTEI 0
Elisangela Silva
05/01/2013
Amigos Valeu pelas dicas, mas consegui resolver Sozinha, através de vários teste.Consegui fazer e funcionou.
Vou postar o Código alguem pode ter a mesma dúvida...
Este é o código que funcionou:
if EditPedido.Text = '' then
begin
Showmessage('Digite o numero do pedido');
EditPedido.SetFocus;
exit;
end;
try
with DM.SQLConnPedidos do begin
DM.qryPedidos.Close;
DM.qryPedidos.SQL.Clear;
DM.qryPedidos.SQL.Add (' SELECT ');
DM.qryPedidos.SQL.Add (' NUMEROPEDIDO, ');
DM.qryPedidos.SQL.Add (' CLIENTE, ');
DM.qryPedidos.SQL.Add (' DATAPEDIDO, ');
DM.qryPedidos.SQL.Add (' FORMAPAGTO ');
DM.qryPedidos.SQL.Add (' FROM PEDIDOS ');
if(EditPedido.Text <> '') then
begin
DM.qryPedidos.SQL.Add('WHERE NUMEROPEDIDO LIKE' + QuotedStr(EditPedido.Text));
end;
DM.qryPedidos.Open;
end;
DBGridPedidos.Columns[0].FieldName := DM.qryPedidos.FieldByName('NUMEROPEDIDO').AsString;
DBGridPedidos.Columns[1].FieldName := DM.qryPedidos.FieldByName('CLIENTE').AsString ;
DBGridPedidos.Columns[2].FieldName := DM.qryPedidos.FieldByName('DATAPEDIDO').AsString;
DBGridPedidos.Columns[3].FieldName := DM.qryPedidos.FieldByName('FORMAPAGTO').AsString;
except
on E:Exception do
ShowMessage(E.Message);
end;
Vou postar o Código alguem pode ter a mesma dúvida...
Este é o código que funcionou:
if EditPedido.Text = '' then
begin
Showmessage('Digite o numero do pedido');
EditPedido.SetFocus;
exit;
end;
try
with DM.SQLConnPedidos do begin
DM.qryPedidos.Close;
DM.qryPedidos.SQL.Clear;
DM.qryPedidos.SQL.Add (' SELECT ');
DM.qryPedidos.SQL.Add (' NUMEROPEDIDO, ');
DM.qryPedidos.SQL.Add (' CLIENTE, ');
DM.qryPedidos.SQL.Add (' DATAPEDIDO, ');
DM.qryPedidos.SQL.Add (' FORMAPAGTO ');
DM.qryPedidos.SQL.Add (' FROM PEDIDOS ');
if(EditPedido.Text <> '') then
begin
DM.qryPedidos.SQL.Add('WHERE NUMEROPEDIDO LIKE' + QuotedStr(EditPedido.Text));
end;
DM.qryPedidos.Open;
end;
DBGridPedidos.Columns[0].FieldName := DM.qryPedidos.FieldByName('NUMEROPEDIDO').AsString;
DBGridPedidos.Columns[1].FieldName := DM.qryPedidos.FieldByName('CLIENTE').AsString ;
DBGridPedidos.Columns[2].FieldName := DM.qryPedidos.FieldByName('DATAPEDIDO').AsString;
DBGridPedidos.Columns[3].FieldName := DM.qryPedidos.FieldByName('FORMAPAGTO').AsString;
except
on E:Exception do
ShowMessage(E.Message);
end;
GOSTEI 0
Alisson Santos
05/01/2013
Só uma dica, sempre que trabalhar com esse tipo de consulta, trabalhe com um dataset para armazenar as informações para recuperar, pois quando você passou para as colunas os valores de um dataset não retornou o erro.
GOSTEI 0
Thiago Jesus
05/01/2013
Elisângela, estou desenvolvendo um sistema orientado a objetos no XE. Tenho uma Classe chamada TContasPagarDAO, onde uso
o método abaixo para fazer a pesquisa no banco, e listar o resultado direto no meu ClientDataSet.
Essa é uma forma de implementar a pesquisa.
o método abaixo para fazer a pesquisa no banco, e listar o resultado direto no meu ClientDataSet.
Essa é uma forma de implementar a pesquisa.
procedure TContasPagarDAO.PesquisaDescricao(ContasPagarModel : TContasPagarModel);
var
command : TDBXCommand;
reader : TDBXReader;
parametro : TDBXParameter;
begin
try
try
// abre a conexao com o Banco e passa o Comando SQL
conexao := TDBXConnectionFactory.GetConnectionFactory.GetConnection('SuaConexao','Usuario','Senha');
command := conexao.CreateCommand;
command.Text := 'SELECT * FROM CONTAS_A_PAGAR WHERE UPPER(CON_DESCRICAO) LIKE UPPER(?)';
// parametro Descrição
parametro := command.CreateParameter;
parametro.DataType := TDBXDataTypes.WideStringType;
parametro.Name := 'pDescricao';
command.Parameters.AddParameter(parametro);
command.Parameters.Parameter[0].Value.SetWideString('%' + ContasPagarModel.Descricao + '%');
// Prepara o Comando e Executa no Banco
command.Prepare;
reader := command.ExecuteQuery;
// Copia o Resultado da consulta para um ClientDataSet
if Assigned(reader) then
begin
TDBXDataSetReader.CopyReaderToClientDataSet(reader, dm_dados.cds_contaspagar);
end;
except on e: Exception do
begin
raise Exception.Create('Não foi possível realizar a pesquisa' + E.Message);
end;
end;
finally
FreeAndNil(conexao);
FreeAndNil(command);
FreeAndNil(reader);
end;
end;
GOSTEI 0
Thiago Jesus
05/01/2013
Espero que possa ajudar também.
GOSTEI 0
Elisangela Silva
05/01/2013
Só uma dica, sempre que trabalhar com esse tipo de consulta, trabalhe com um dataset para armazenar as informações para recuperar, pois quando você passou para as colunas os valores de um dataset não retornou o erro.
gostei da sua idéia ma scomo faria isso? poderia me dar um exemplo?
GOSTEI 0
Elisangela Silva
05/01/2013
Elisângela, estou desenvolvendo um sistema orientado a objetos no XE. Tenho uma Classe chamada TContasPagarDAO, onde uso
o método abaixo para fazer a pesquisa no banco, e listar o resultado direto no meu ClientDataSet.
Essa é uma forma de implementar a pesquisa.
o método abaixo para fazer a pesquisa no banco, e listar o resultado direto no meu ClientDataSet.
Essa é uma forma de implementar a pesquisa.
procedure TContasPagarDAO.PesquisaDescricao(ContasPagarModel : TContasPagarModel);
var
command : TDBXCommand;
reader : TDBXReader;
parametro : TDBXParameter;
begin
try
try
// abre a conexao com o Banco e passa o Comando SQL
conexao := TDBXConnectionFactory.GetConnectionFactory.GetConnection('SuaConexao','Usuario','Senha');
command := conexao.CreateCommand;
command.Text := 'SELECT * FROM CONTAS_A_PAGAR WHERE UPPER(CON_DESCRICAO) LIKE UPPER(?)';
// parametro Descrição
parametro := command.CreateParameter;
parametro.DataType := TDBXDataTypes.WideStringType;
parametro.Name := 'pDescricao';
command.Parameters.AddParameter(parametro);
command.Parameters.Parameter[0].Value.SetWideString('%' + ContasPagarModel.Descricao + '%');
// Prepara o Comando e Executa no Banco
command.Prepare;
reader := command.ExecuteQuery;
// Copia o Resultado da consulta para um ClientDataSet
if Assigned(reader) then
begin
TDBXDataSetReader.CopyReaderToClientDataSet(reader, dm_dados.cds_contaspagar);
end;
except on e: Exception do
begin
raise Exception.Create('Não foi possível realizar a pesquisa' + E.Message);
end;
end;
finally
FreeAndNil(conexao);
FreeAndNil(command);
FreeAndNil(reader);
end;
end;
ok Obrigado
GOSTEI 0