Olá gente boa. Quero neste artigo de maneira bem sucinta, apresentar a vocês de maneira prática a usabilidade do método "InsertRecord".
O método "InsertRecord", pertence a classe TDataSet do Delphi, desta forma, todos os componentes que descendem desta classe, tais como TClientDataSet, TSQLDataSet, TFDQuery e outros, possuem este método.
Ele é muito útil quando queremos inserir um novo registro, ao invés de usarmos o "Append" ou "Insert" dos componentes descendentes de TDataSet, e em seguida passar campo a campo atribuindo seus respectivos valores, e no final chamar o "Post" para gravar em cache o registro, podemos simplesmente invocar o método "InsertRecord" passando por parâmetro os valores dos campos em suas respectivas ordens. O tipo do parâmetro deste método é um array. Este array precisa estar coerente com a quantidade de campos do TDataSet utilizado, isto é, não posso passar mais ou menos valores no parâmetro array do que a quantidade de campos presentes no TDataSet, caso contrário uma exceção (Argument out of range) será levantada.
Devemos nos atentar também para o fato de que, a ordem dos valores passados no parâmetro deve ser a mesma ordem dos campos, para não atribuir valores errados em campos errados. Se algum campo não será preenchido, você deve passar um valor nulo ou padrão, mas não poderá pulá-lo.
Agora vamos a um exemplo prático e simples para melhorar a compreensão. Imagine uma tela de configuração de permissões do usuário, na qual atribuímos ou removemos permissões a um determinado usuário. Vamos utilizar o método "InsertRecord" justamente para fazer estas atribuições ou remoções de permissões. Para isso, crie um novo projeto no Delphi e monte um layout parecido com este:
No projeto acima, criei dois TClientDataSet temporários, cada um ligado em um TDataSource que está ligado em uma TDBGrid.
Apenas dois campos foram criados nos TClientDataSet temporários: "ID" (código da permissão) e "DESC" (descrição da permissão).
Adicionei dois TButton, um para atribuir e outro para remover. A primeira TDBGrid irá listar as permissões disponíveis, e a segunda, as permissões atribuídas ao usuário. A intenção é que, quando o usuário selecionar uma permissão na primeira TDBGrid e clicar no botão atribuir, a mesma será excluída da listagem para evitar que o usuário duplique uma mesma permissão atribuída, e será inserida na outra TDBGrid que estará listando as permissões atribuídas ao usuário. E ao clicar no botão remover, ocorrerá o processo inverso. Tudo isso será realizado por meio do método InsertRecord, ao qual invocaremos através do TClientDataSet.
Veremos como é bem simples e o código será bem "clean".
Vamos implementar um método que irá popular o TClientDataSet de permissões disponíveis com algumas permissões. No exemplo, vou definir estas permissões no próprio método, porém, você poderá fazer um loop lendo tais permissões de uma tabela do banco de dados por exemplo, e popular o TClientDataSet temporário. Para o nosso exemplo, declare o método "PopularPermissoes" no escopo "private" do formulário:
Implemente-o da seguinte maneira:
Note que apenas estou populando o TClientDataSet temporário com algumas permissões e no final apenas ativo os TClientDataSet temporários.
Muito bem, agora vamos chamar este método no evento "OnCreate" do formulário:
Agora vamos implementar o botão de atribuição, veja que simples:
Na linha 45, o TClientDataSet que listará as permissões atribuídas ao usuário recebe a permissão selecionada no TClientDataSet de permissões disponíveis por meio do método InsertRecord, passando por parâmetro os valores em sua ordem correta.
Na linha 46 apenas deletamos a permissão da listagem para evitar que o usuário atribua a mesma permissão duas vezes ou mais ao usuário.
Simples não? É só isso mesmo, ao executar a aplicação e testar, tu vai ver como vai funcionar perfeitamente.
Agora vamos implementar o botão de remoção:
Na linha 51 estamos voltando a permissão atribuída selecionada no TClientDataSet de listagem das permissões atribuídas ao usuário para a listagem das permissões disponíveis, e na linha 52, apenas excluímos a mesma das atribuições ao usuário.
Simples, teremos um efeito interessante e seguro. Você pode incrementar este projeto, adicionando mais um botão "Gravar atribuições" por exemplo, que ao concluir as atribuições ou remoções, o usuário clicará neste botão para persistir estas informações no banco de dados.
Muito bem, vou parando por aqui, espero ter contribuído de alguma forma, se tiverem alguma dúvida, deixe seu comentário que estaremos te ajudando. Um grande abraço e até o próximo.
(Por Welinton J. Dias)
Ao compilar apresenta este erro:
ResponderExcluircdsPermissoes: Cannot perform this operation on a closed dataset.
Quando você cria um TClientDataSet temporário, é necessário clicar com o botão direito do mouse sobre ele e escolher a opção "Create DataSet". Já realizou este procedimento? Abraço.
Excluir