Como buscar os valores máximo e mínimos no banco de dados e atualizar a escala do gráfico

Olá, estou mexendo em uma aplicação no E3 e necessito buscas os valores máximos e mínimos das coluna em uma tabela no banco de dados, e jogar o valor máximo na propriedade VerScaleBegin e o minimo na VerScaleEnd de um E3Chart grafico.
Ex:
O compressor 01 tem as penas

  • Produção;
  • Corrente;
  • Temperatura.
    Precisos que na hora que o operário selecionar uma pena “Corrente” o E3Chart busque os valores máximos e mínimos no banco de dados da pena secionada e mude a escala do gráfico automaticamente.
    Grato desde já.

Mozart Monteschio.

@mozart, boa tarde.

Há algumas formas de se fazer, sendo:

  1. Utilizando o método FitAll no evento OnAsyncQueryFinish da Consulta do E3Chart; ou

  2. Utilizando uma outra Consulta. Neste fazer da seguinte forma:

  • Criar um objeto Consulta na tela aonde está o E3Chart. Este servirá para retornar os valores máximo e mínimo da coluna que deseja;

  • Neste objeto Consulta, colocar um SQL que retorne o valor máximo e o mínimo para a coluna que determinou e, se for o caso, no período escolhido. Veja um exemplo:

    SELECT Max(Nivel.Nivel1 ) as Maximo, Min(Nivel.Nivel1 ) as Minimo
    FROM Nivel
    WHERE (E3TimeStamp >= #<%DataIni%># AND E3TimeStamp <= #<%DataFim%># )

  • Este irá retornar um valor o qual iremos trabalhar em runtime

  • No objeto de tela que utiliza para mostrar/esconder a pena (neste exemplo, utilizei um objeto Checkbox para mostrar cada uma das penas individualmente) realizar o seguinte script:

    Sub CheckBox1_Change()
    ’ Muda a visibilidade da pena dependendo do valor do CheckBox
    Screen.Item(“E3Chart1”).Pens.Item(“Nivel1”).Visible = Value

    If Value = True Then

      DataIni = Screen.Item("spDataInicial").Value 'Sp com o valor da Data Inicial
      DataFim = Screen.Item("spDataFinal").Value  Sp com o valor da Data Final
    
      Set Consulta = Screen.Item("Consulta1")   'Consulta criada na tela
      Consulta.SetVariableValue "DataIni", DataIni   'Filtro da Data Inicial
      Consulta.SetVariableValue "DataFim", DataFim   'Filtro da Data Final
      Consulta.Execute()
      
      Set RS = Consulta.GetADORecordset() 
      scaleMax = RS.Fields.Item("Maximo").Value  'Atribui o valor máximo 
      scaleMin = RS.Fields.Item("Minimo").Value  'Atribui o valor mínimo
    
      'Passa os valores mínimo e máximo à escala Vertical
      Screen.Item("E3Chart1").Axes.Item("EixoVertical").SetMinMax scaleMin,scaleMax
    

    End If
    End Sub

  • Resultado:

Observações:
1 - Utilizado o SQL Server neste exemplo;
2 - Mudar o nome dos campos para adaptar à aplicação;

Qualquer dúvida, por favor, avisar.

Sds.

1 Like

Primeiramente muito obrigado pela resposta;
Mas no caso o operário tem a opção de escolher um dos 5 compressores


Depois de selecionar o compressor ele ira selecionar uma pena que são :
No caso eu teria que criar uma consulta para cada pena de cada compressor?
Ou tem como filtrar a tabela do sql
Ficou assim

@mozart,

Antes, teria como me informar se:
a) pode-se escolher mais de um compressor por vez?
b) pode-se escolher mais de uma pena do mesmo compressor? (ou, no caso do item a sendo verdadeiro, mais penas de compressores diferentes?)
c) cada compressor utiliza uma tabela diferente?
d) A forma do Item 1 do post anterior funcionou?

Grato pela atenção.

Sds.

1 Like

Teria sim:
A) SIM
B) SIM
C) NÃO
D) FUNCIONOU MAS NÃO ESPECIFICAMENTE
Grato desdejá

Mozart,

São muitas penas (mais de 100 no total) para um mesmo E3Chart.
Mesmo que não utilize todas de uma única vez, caso escolha modificar o EixoVertical de uma Pena e queira adicionar outra, deverá encaixar esta segunda Pena no mesmo EixoVertical anulando a modificação anterior. Caso não queira utilizar o mesmo, deverá adicionar um novo Eixo.

Não considerando a opção de criar novos Eixos para novas Penas, acredito que a melhor opção para este caso seja utilizar o comando FitAll com a opção 1 (enquadrar verticalmente).

Verifica se desta forma está OK, pois do contrário precisará trocar o SQL dinamicamente ou criar outras consultas.

Grato pela compreensão.

Sds.

1 Like

Ok muito obrigado pelas resposta.

1 Like