Você está aqui: Página Inicial Artigos Kankei DBM Classe de gravação de dados em VB.NET

Classe de gravação de dados em VB.NET

Se você faz customizações para o Kankei em linguagens como o VB.NET e está passando por situações onde precisa gravar dezenas, centenas ou até milhares de registros para uma determinada dimensão, este artigo foi feito especialmente para você.

Os recursos para desenvolvedores que o Kankei proporciona são bastante completos e produtivos na maioria das situações. No entanto, quando se trata da gravação de um número muito grande de registros, você pode querer manter distância da classe de gravação tradicional do Kankei (ckaRecordset, a classe retornada pelo método K.BD.NovaGravacao).

O grande problema do ckaRecordset é que ele vai guardando os dados em memória até que o usuário chame o método Gravar(). Somente neste momento é que o Kankei envia as instruções de gravação ao banco de dados. Isso quer dizer que se você precisa gravar uma lista de 1000 registros, o sistema irá manter em memória todos os dados destes 1000 registros.

E os dados também não são eliminados da memória após a execução do método Gravar(), pois o ckaRecordset oferece a funcionalidade de você percorrer os dados que você gravou, podendo obter informações como o record ID de cada registro que foi inserido.

A nossa sugestão, nesse tipo de situação, é utilizar a classe de gravação de dados mais básica do Kankei, o cksHCD. Na verdade, o ckaRecordset utiliza internamente o cksHCD para fazer a gravação de seus dados.

Vamos imaginar uma dimensão chamada "Clientes" que tenha 4 questões: "Nome" (texto), "Sexo" (opções), "Nascimento" (data) e "Salário" (número). Utilizando o VB.NET, podemos escrever uma classe como esta:

Imports KankeiObjects

''' <summary>
''' Os valores dos itens do enumerador são as Keys das opções da questão "Sexo"
''' </summary>
Public Enum Sexo
    Masculino = 1
    Feminino = 2
End Enum

''' <summary>
''' Gravador de clientes, que permite a gravação de dados sem manter os dados
''' já gravados em cache
''' </summary>
Public Class GravadorDeClientes
    Private _hcd As cksHCD

    Public Sub New(ByVal K As ckpGlobal)
        ' O objeto HCD precisa ser criado pelo método K.CreateObject
        _hcd = DirectCast(K.CreateObject("KankeiObjects.cksHCD"), cksHCD)
        ' Adiciona os identificadores das questões ao HCD
        _hcd.AdicionarCampoEx("cli-Nome")
        _hcd.AdicionarCampoEx("cli-Sexo")
        _hcd.AdicionarCampoEx("cli-Nascimento")
        _hcd.AdicionarCampoEx("cli-Salario")
    End Sub

    Public Sub NovoRegistro()
        _hcd.InicializarDados() ' Inicializa o objeto, limpando o cache
        _hcd.NovoRegistroEx() ' Prepara a inclusão de um registro
    End Sub

    Public Sub AlterarRegistro(ByVal id As Integer)
        _hcd.InicializarDados() ' Inicializa o objeto, limpando o cache
        _hcd.NovoRegistroEx(, , id) ' Prepara para alterar o registro informado
    End Sub

    Public Function Gravar() As Integer
        _hcd.Gravar() ' Envia as instruções de gravação ao banco de dados
        Return _hcd.GetRecordID() ' Retorna o ID do registro que foi gravado
    End Function

    Public WriteOnly Property Nome() As String
        Set(ByVal value As String)
            _hcd.ReceberDadoEx("cli-Nome", , , value)
        End Set
    End Property

    Public WriteOnly Property Sexo() As Sexo
        Set(ByVal value As Sexo)
            ' Informa ao HCD para entender o valor como uma key de opção da questão "cli-Sexo"
            _hcd.ReceberDadoEx("cli-Sexo", , enmHCDSpecialData.chcdOptionKey, value)
        End Set
    End Property

    Public WriteOnly Property Nascimento() As Date
        Set(ByVal value As Date)
            _hcd.ReceberDadoEx("cli-Nascimento", , , value)
        End Set
    End Property

    Public WriteOnly Property Salario() As Decimal
        Set(ByVal value As Decimal)
            _hcd.ReceberDadoEx("cli-Salario", , , value)
        End Set
    End Property
End Class

A classe GravadorDeClientes possui as seguntes características principais:

  • Deve receber o objeto K (área de trabalho do Kankei) no seu construtor;
  • O método NovoRegistro(), ou AlterarRegistro() deve ser chamado uma vez para cada registro a ser gravado, antes que os dados em si (nome, sexo, etc.) possam ser informados;
  • O método AlterarRegistro() recebe como parâmetro o ID do registro que se quer alterar; durante a alteração de dados, o Kankei só irá enviar instruções de gravação para campos cujos dados tenham sido explicitamente informados. Ex.: Caso não tenha sido definido nenhum valor para a propriedade "Nome", o Kankei não irá gravar para este campo e ele vai continuar com o mesmo valor que tinha antes da gravação.
  • Propriedades de dados (Nome, Sexo, Nascimento, Salario): estas propriedades servem como uma interface consistente e tipada para os dados a serem gravados. Atenção especial para a propriedade "Sexo" que faz o tratamento necessário para mapear os valores de um enumerador com as keys das opções da questão.
  • Método Gravar(): este método envia as instruções de gravação ao banco de dados e retorna o ID do registro gravado; isso é útil durante uma inclusão onde seja necessário saber o ID do registro que acabou de ser incluído (por exemplo, para ser utilizado ao preencher uma questão do tipo dimensão Cliente, em outra dimensão).

Exemplo de utilização da classe GravadorDeClientes para inclusão de registros:

Dim g As New GravadorDeClientes(K)

g.NovoRegistro()
g.Nome = "José Alfredo Miaushen"
g.Nascimento = DateSerial(1980, 5, 10)
g.Sexo = Sexo.Masculino
g.Salario = 1500.0
g.Gravar()

g.NovoRegistro()
g.Nome = "Maria Augusta Imbereçá Tavares Lins"
g.Nascimento = DateSerial(1984, 10, 21)
g.Sexo = Sexo.Feminino
g.Salario = 1400.0
g.Gravar()
Ações do documento
« Fevereiro 2012 »
Fevereiro
SeTeQuQuSeSaDo
12345
6789101112
13141516171819
20212223242526
272829
Acessar


Esqueceu sua senha?