Preencher DBGrid automaticamente.
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.
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
Curtidas 0
Respostas
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!
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
30/09/2008
Obrigado.
Pela teoria que vc passou consegui fazer o preenchimento automático:
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.
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_
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
30/09/2008
:? Mas se eu usar o Queryt fechado os campos não serão preenchidos.
GOSTEI 0
Pestana_
30/09/2008
e se você fizer um select +/- assim:
para retornar todos os campo vazio, depois você da um Append ou Insert no dataSet.
verifique se resolve!
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
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.
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