DATAGRID - ATUALIZANDO
Oi amigos,
tenho um Datagrid cujo DataSource é um recordset ADO composto de uma INNER JOIN entre tblPedidosDet e tblProdutos (ou seja, não uso ADO control).
Eu gostaria de digitar no grid o código do produto (da tblPedidosDet) e ter a descrição do produto (da tblPedidos) automaticamente na coluna seguinte. A única forma que encontrei de fazer isto é por meio de um Requery no recordset (no evento AfterColUpdate), que é um método um tanto "caro" e nem sempre apropriado (se estou inserindo um novo registro, por exemplo, não posso fazer o Requery antes de preencher todos os campos).
Qual a melhor forma de se trabalhar com o Datagrid para fazer a entrada de dados neste cenário?
tenho um Datagrid cujo DataSource é um recordset ADO composto de uma INNER JOIN entre tblPedidosDet e tblProdutos (ou seja, não uso ADO control).
Eu gostaria de digitar no grid o código do produto (da tblPedidosDet) e ter a descrição do produto (da tblPedidos) automaticamente na coluna seguinte. A única forma que encontrei de fazer isto é por meio de um Requery no recordset (no evento AfterColUpdate), que é um método um tanto "caro" e nem sempre apropriado (se estou inserindo um novo registro, por exemplo, não posso fazer o Requery antes de preencher todos os campos).
Qual a melhor forma de se trabalhar com o Datagrid para fazer a entrada de dados neste cenário?
Veja, a situação que você expõe é interessante. Normalmente se faria a atualização (entrada/alteração) em controles distintos e o Grid fica apenas como recurso de visualização.
De fato, o requery pode ser demorado, em decorrência da normatização, do engine, do volume de dados, da rede e da complexidade da instrução SQL. Para que esse delay seja menor, você pode utilizar recordsets separados, em grids também separadas. Dá trabalho, pois além de fazer os vÃnculos entre tabelas manualmente, você ainda terá de "desenhar" a grade final com as grids componentes. Dá trabalho e demora muito. E dá muita margem para erros.
O que você poderia fazer é "enganar" o usuário, utilizando um recordset para a grid e outro para um controle textbox comum. Ao entrar na coluna desejada (ou sair daquela que contém o código á ser pesquisado), você posiciona o textbox sobre a célula adequada, com o resultado esperado. Cuidados: Com a movimentação da barra de rolagens, em manter o TextBox invisÃvel enquanto não estiver sendo utilizado e com o repasse de seu conteúdo (se a coluna for editável) á célula correta. Acho que esse método é menos "indolà 'r" e o requery só será utilizado após o update do recordset, para tornar a grade mais estável.
De fato, o requery pode ser demorado, em decorrência da normatização, do engine, do volume de dados, da rede e da complexidade da instrução SQL. Para que esse delay seja menor, você pode utilizar recordsets separados, em grids também separadas. Dá trabalho, pois além de fazer os vÃnculos entre tabelas manualmente, você ainda terá de "desenhar" a grade final com as grids componentes. Dá trabalho e demora muito. E dá muita margem para erros.
O que você poderia fazer é "enganar" o usuário, utilizando um recordset para a grid e outro para um controle textbox comum. Ao entrar na coluna desejada (ou sair daquela que contém o código á ser pesquisado), você posiciona o textbox sobre a célula adequada, com o resultado esperado. Cuidados: Com a movimentação da barra de rolagens, em manter o TextBox invisÃvel enquanto não estiver sendo utilizado e com o repasse de seu conteúdo (se a coluna for editável) á célula correta. Acho que esse método é menos "indolà 'r" e o requery só será utilizado após o update do recordset, para tornar a grade mais estável.
Hehehehe! Gostei do comentário. Mas pense assim: Se a Microsoft lhe entregasse de bandeja o seu arsenal, você mesmo não poderia (aliás, pode, com alguns "truques") desenvolver um MS-Access completo ? E a Microsoft, deixaria o Office mais caro por qual motivo?
Tópico encerrado , respostas não são mais permitidas