Preencher DBGrid automaticamente.

Delphi

30/09/2008

Minha dúvida é com DBGrid e duas tabelas. Minha app é bem simples e tô usando Paradox, local.
Tenho duas Tabelas (TabMateriais e TabCompras). Coloquei um DBGrid pra preencher os campos da TABCompras e um Picklist na Coluna [0] do DBGrid preenchido com a lista de um campo do TABmaterial. Eu gostaria que quando o usuário clicasse no picklist, alguns campos do DBGrid fossem preenchidos automaticamente. Os campos [Unidade] e [ValorUnitario] são idênticos para as duas tabelas.

Quem puder ajudar, sou grato.


Abelha

Abelha

Curtidas 0

Respostas

Pestana_

Pestana_

30/09/2008

bom eu ainda não cheguei a trabalhar com picklist, mas vou explicar como funciona a extrutura.

O dbGrid é somente um ´espelho´ do componente dataSet, refletindo os dados contidos nos fields do dataSet, então, se você atribuir ou até mesmo alterar valores nos fields do dataSet o dbGrid passará a enchegar estes valores.

Experimente utilizar o método (Append ou Insert) ou Edit do dataSet para adicionar ou alterar valores no dataSet e verifique se não atualiza o dbGrid.

Isto serve para qualquer componete dataSet, basta ter o raciocinio de como funciona!


espero ter ajudado!


GOSTEI 0
Abelha

Abelha

30/09/2008

Obrigado.
Pela teoria que vc passou consegui fazer o preenchimento automático:
procedure TFormCompra.PreecheColunas;
begin
  with QMaterial do    //Query
  begin
    close;
    SQL.Clear;
    sql.Add(´select * from TABMateriais where (Material) =:VMaterial´);
    Parambyname(´VMaterial´).Value:=DBGrid1.Fields[0].DisplayText;
    OPEN;
  end;
  With QCompras do
  begin
    Edit;
    FieldByName(´Unidade´).value :=QMaterial.FieldByName(´Unidade´).value;
    FieldByName(´ValorUnitario´).value :=QMaterial.FieldByName(´ValorUnitario´).value;
    FieldByName(´ValorTotal´).value:=FieldByName(´ValorUnitario´).value * FieldByName(´Quantidade´).value;
   end;
end;


mas agora tenho outra dúvida: quero usar o DBGrid apenas para inserir novos registros, então, quando abrir o form não quero que os registros existentes sejam visualizados.

Se tiver alguma dica, fala aê. Valeu.


GOSTEI 0
Pestana_

Pestana_

30/09/2008

eu utilizo dbGrid somente para consultas e não para inserir e atualizar registros, mas referente a sua dúvida acredito que você deve desfazer este select, ou seja, fechar a query para não mostrar os valores no dbGrid. Depois que você incluiu o registro na tabela, então você executa novamente o Select para exibir a consulta no dbGrid, acho que é isso!


GOSTEI 0
Abelha

Abelha

30/09/2008

:? Mas se eu usar o Queryt fechado os campos não serão preenchidos.


GOSTEI 0
Pestana_

Pestana_

30/09/2008

e se você fizer um select +/- assim:

select * from nomeTabela where codigo = 0



para retornar todos os campo vazio, depois você da um Append ou Insert no dataSet.

verifique se resolve!


GOSTEI 0
Abelha

Abelha

30/09/2008

Oi Pestana,

Essa dica resolveu pra exibir o DBGrid limpo, mas quando insiro os valores, aparece só a linha do registro que está sendo inserido no momento. Por exemplo, se for inserir 3 registros, só o último é exibido.

Pra contornar esse problema eu usei de um ´artifício´ que não sei se é bom, pois conheço muito pouco ainda.
Fiz o seguinte: Crei outra tabela identica a primeira, só que os registros desta são sempre deletados na inicialização do form. Quando o usuário dá o comando pra gravar, os registros dessa tabela são todos copiados para a primeira. Essa segunda tabela é que está lincada ao DBGrid. É uma gambiarra, mas está funcionando bem. O problema é que vou gastar um pocu mais de memória, mas não muito, porque os registros que não são necessários são sempre deletados.

Se tiver outra dica pra mehorar, agradeço.


GOSTEI 0
POSTAR