Melhor prática - Banco de dados

Bom dia

Tenho uma aplicação no E3 que ao cadastrar uma nova elevatória, ele cria automaticamente os blocos de comunicações e objetos de dados.

Contudo, eu precisaria gravar os dados recebidos pelos blocos de comunicações no banco. Dessa maneira, eu crio nos objetos de dados um XControl com um histórico para gravar.

Porém, eu preciso pedir ao histórico que gere a estrutura no DB. Como fazer isso via comando?

Ou, existe alguma outra forma para gravar os dados no banco?

@wagner.dracha, boa tarde.

Quando o XObject que contém um Hist for instanciado em Runtime, a tabela é gerada automaticamente.

Obs.: Se não tiver uma propriedade no XObject vinculado ao TableName deste Hist para mudar o nome da tabela em que os dados serão gravados, sempre que instanciar este XObject, os dados serão armazenados na mesma tabela inicial.

Sds.

1 Like

Então @Fernando, vou tentar explicar o que está acontecendo.

No objeto de dados que é criado ao cadastrar uma nova elevatória, cria-se também um XControl com um histórico dentro.

Contudo, ao encerrar a aplicação e edicionar um E3Browser em alguma tela para consultar a nova tabela criada pelo novo XControl, a tabela não existe. Então, eu escolhi uma outra tabela, só para testar, executei a aplicação e encerrei a aplicação.

Ao excluir esse E3Browser e adicionar outro E3Browser, aparece a tabela que antes não existia.

O que pode estar acontecendo? Não sei se eu consegui explicar corretamente!

@wagner.dracha, por favor, verifica se se aplica.

  1. [quote=“wagner.dracha, post:3, topic:2271”]
    No objeto de dados que é criado ao cadastrar uma nova elevatória, cria-se também um XControl com um histórico dentro.
    [/quote]

Acredito que esteja se referindo a um XObject aqui, certo? Está criando este objeto de biblioteca em Runtime ou Studio?

  1. [quote=“wagner.dracha, post:3, topic:2271”]
    ao encerrar a aplicação e edicionar um E3Browser em alguma tela para consultar a nova tabela criada pelo novo XControl, a tabela não existe.
    [/quote]

Em Studio, certo? Como este Hist está configurado?

  1. [quote=“wagner.dracha, post:3, topic:2271”]
    Então, eu escolhi uma outra tabela, só para testar, executei a aplicação e encerrei a aplicação.
    [/quote]

No mesmo E3Browser, selecionou outra tabela qualquer e conseguiu buscar os dados, certo?

  1. [quote=“wagner.dracha, post:3, topic:2271”]
    Ao excluir esse E3Browser e adicionar outro E3Browser, aparece a tabela que antes não existia.
    [/quote]

Antes de excluir este E3Browser, chegou a verificar se a tabela aparecia? Chegou a verificar dentro do servidor de Banco de Dados?

Opinião/Exemplo:

Geralmente quando crio um Hist na biblioteca faço criando alguns campos que precisam ser modificados após instanciar o XObject. São eles:

  • propriedade “Tabela”;
  • propriedade “BD”;
  • propriedade “Coluna” (podem ser muitos deste pois representam as colunas do Hist).

Depois crio o Hist e associo estes campos aonde for necessário. Exemplo em utilização:

Imagem 1: Hist dentro do XObject recebendo dados de nomes Banco de Dados e Tabela das propriedades criadas.

Imagem 2: Campo (coluna da tabela) recebendo como fonte de dados a propriedade Coluna do XObject.

Imagem 3: XObject instanciado com as propriedades preenchidas.

Imagem 4: Tabela criada após rodar e parar a aplicação.

Sds.

Bom dia

@Fernando,

Tais certo, é um XObject, o qual segue abaixo:

O Hist está dessa forma:

E seus parâmetros assim:

Então, ao cadastrar uma nova elevatória, será criado os drivers e objetos de dados em RunTime o qual segue:


Percebe-se que na imagem acima aparece o XObject Teste.

Segue o código que cria o XObject:

set Dados = Application.GetObject("Dados")
set DtFolder = Dados.AddObject("DataFolder", True, Application.GetObject("Dados.DadosCadPonto.spNome").Value)
    set Hist = DtFolder.AddObject("Teste", True, "Teste")
Hist.nome = Application.GetObject("Dados.DadosCadPonto.spNome").Value                             **<= Aqui eu passo o nome da tabela, que provavelmente vai ser ERE...**
Hist.Links.CreateLink "nivel", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." & 
    Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[NIVEL_%].Value", 0
Dados.Save

Então, após criar tudo isso, eu paro a aplicação e adiciono um E3Browser na TelaPrincipal, mas não aparece a tabela que era para ter criado.

No caso, era para estar aparecendo ERE504, mas só aparece a anterior criada:

Aí, se eu criar uma nova elevatória, aí vai aparecer a ERE504 essa tabela e a ERE505 não vai aparecer.

@wagner.dracha, bom dia.

Entendido.

  1. Este script que cria o XObject está em qual objeto de tela?
  2. O tag “spNome” está vinculado a um SetPoint ou ele recebe o valor por script?

Sds.

Bom dia wagner,

Acredito que o problema é que você não está esperando o tempo da primeira coleta de dados do histórico. Se você aguardar o tempo necessário, acredito que a tabela irá aparecer normalmente.

Ele cria o XObject no Objeto de Dados->Dados->DataFolder(ERE…)

Um setPoint está vinculado a essa tag sim

Bom dia @nivaldonicolau

Acredito que não seja este o problema, pois ao cadastrar essa nova elevatória ele cria todos esses objeto e já aparece automaticamente a elevatória na tela com os dados.

@wagner.dracha,

Tenta dessa forma:

set Dados = Application.GetObject("Dados")
set DtFolder = Dados.AddObject("DataFolder", True, Application.GetObject("Dados.DadosCadPonto.spNome").Value)
set Hist = DtFolder.AddObject("Teste", False, "Teste")
      Hist.nome = Application.GetObject("Dados.DadosCadPonto.spNome").Value
      Hist.Links.CreateLink "nivel", Application.GetObject("Dados.DadosCadPonto.spDrive").Value & "." &_
      Application.GetObject("Dados.DadosCadPonto.spNome").Value & ".RW.[NIVEL_%].Value", 0
      Hist.Activate
      Dados.Save

Sds.

1 Like

Show de bola, funcionou!

Perfeito! Tem outro detalhe na linha 3:

Ele inicia o objeto desativado, faz as configurações e ativa já configurado.

Obrigado pelo feedback. :v:

1 Like