GARANTIR DESCONTO

Fórum COMO PREENCHER UM DBGrid com DADOS DO BD? #431994

05/01/2013

0

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!!!
Elisangela Silva

Elisangela Silva

Responder

Posts

06/01/2013

André Celestino

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.
Responder

Gostei + 0

06/01/2013

Elisangela Silva

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.



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
Responder

Gostei + 0

07/01/2013

Lucas Chagas

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.
Responder

Gostei + 0

07/01/2013

Elisangela Silva

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.



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...
Responder

Gostei + 0

08/01/2013

Daniel Santos

É, olhando esse codigo da pra ver quem tem alguma coisa muito errada! o certo é voce postar o projeto inteiro para ter uma visao geral.
Responder

Gostei + 0

08/01/2013

Wellington Menezes

Informe a instrução SQL que vc está usando
Responder

Gostei + 0

10/01/2013

Elisangela Silva

Bom dia Pessoal,
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
Responder

Gostei + 0

10/01/2013

Elisangela Silva

alguem para ajudar
Responder

Gostei + 0

10/01/2013

André Celestino

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 ( = ):

DM.qryPedidos.SQL.Add('WHERE NUMEROPEDIDO = ' + EditPedido.Text); 
Responder

Gostei + 0

10/01/2013

Elisangela Silva

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 ( = ):

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' ; 
Responder

Gostei + 0

11/01/2013

Elisangela Silva

mensagem do erro:
List index out of bounds(1)
Responder

Gostei + 0

11/01/2013

André Celestino

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.
Responder

Gostei + 0

11/01/2013

Landerson Santos

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.
Responder

Gostei + 0

11/01/2013

Landerson Santos

Olá Elisangela... Acho que fazendo assim funciona...


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.
Responder

Gostei + 0

13/01/2013

Elisangela Silva

Ola


tentando assim da esse erro:
Operation not allowed on a unidirectional dataset
Responder

Gostei + 0

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

Aceitar