1) Introdução
Embora ainda sejam bastante utilizados em sistemas de supervisão, bancos de dados proprietários, que somente podem ser utilizados pelos softwares que geram os dados, não são a solução mais flexível neste caso.
Outra possibilidade neste caso é o uso de bancos de dados comerciais (sejam eles gerenciadores de arquivos ou gerenciadores de bancos de dados). Dentre esses, destacamos o MS-Access, o MS-SQL Server e o Oracle. Entretanto, as tecnologias de acesso a esses softwares têm evoluído bastante nos últimos anos. Aqui, comentaremos algumas delas, antes de apresentar o E3 Query.
Interface ODBC
O uso da interface ODBC, disponível nos sistemas Windows desde a versão 3.1, apresenta algumas limitações:
- Instabilidade: além de trazer instabilidade ao projeto, o processamento da máquina pode ser consumido pela quantidade de dados necessária apenas para retornar uma consulta com resultado extenso.
- Configurações: para utilizar o ODBC, é preciso cadastrar cada fonte no Painel de Controle do Windows, o que requer a execução de procedimentos externos a ela, e consequentemente maior dificuldade de manutenção, possibilidades de erros, etc.
Acesso a Bancos de Dados via Scripts
Outro modo comum de se construir consultas a bancos de dados é através de programação. O Elipse E3, por exemplo, suporta o uso de VBScript, que dispõe de funções específicas para acesso aos diferentes bancos de dados comerciais. Embora simples, o uso dessas funções traz pequenas dificuldades que podem causar problemas de flexibilidade quando são necessárias modificações no aplicativo. Por exemplo, para utilizar a conexão a um arquivo MDB, é preciso o caminho completo desse arquivo. Se a instalação de um aplicativo mudar para outra máquina, o acesso ao banco pode ser perdido. Entretanto, mesmo com esses pequenos riscos, é um dos meios mais utilizados para conexão a bancos, principalmente quando:
- Uma mesma conexão realiza diferentes consultas.
- Tabelas ou registros existentes são atualizados.
- Há consultas complexas ou pré-formatadas.
- Há execução de procedimentos (Stored Procedures) disponíveis em bancos relacionais.
Um exemplo de consulta a banco de dados através de scripts:
Set cnnOracle = CreateObject("ADODB.Connection")
cnnOracle.ConnectionString = MedidorConfig.Item("Dados").Item("DBConnString").Value
'Abre a conexão
cnnOracle.Open
Query = "UPDATE scde_res_col_mdr SET id_dominio_res_col = 305, mn_atualizacao=to_date('" & now & "','DD/MM/YYYY hh24:mi:ss'), nu_tentativas = " & CStr(MedidorConfig.Item("Dados").Item("Retentativas").Value) WHERE id_res_col_mdr=" & MedidorConfig.IDMonitoramento
'Executa a consulta
cnnOracle.Execute Query
'Fecha a conexão com o banco de dados
cnnOracle.Close
set cnnOracle = nothing
O acesso via script não é recomendado para usos típicos em automação industrial, como por exemplo, consultas periódicas à tabela de alarmes de um sistema, pois a execução contínua de scripts de acesso introduz variáveis de desempenho e estabilidade que são indesejáveis. Para esses e outros casos, a Elipse Software desenvolveu no E3 um objeto responsável pela construção e uso dessas consultas: o E3Query.
O E3Query é um editor gráfico de consultas, similar ao utilizado pela Microsoft para acesso ao MS-Access e ao MS-SQL Server (MS SQL Query Analyser). Com essa ferramenta, o uso de consultas à base de dados se faz de modo automático, eliminando a necessidade de criação e manutenção de scripts.
2) E3 e Bancos de Dados
O Elipse E3 suporta *três softwares de banco de dados:
- MS Access
- MS SQL Server
- Oracle
* A partir da versão 6.5 do Elipse E3, não apenas estes bancos, mas também o PostgreSQL e o MySQL passam a possuir conexão nativa com a plataforma.
As diferenças e características de cada um desses bancos de dados, bem como a sugestões para facilitar a opção entre esses softwares, estão descritas neste artigo.
Aqui, o que importa apenas é saber que o tipo do banco de dados é transparente para o E3 Query, pois essa configuração é feita no objeto DBServer. Por esse motivo, trabalharemos sobre o MS Access, que é o tipo mais simples de banco de dados suportado pelo E3.
IMPORTANTE: ao modificar o tipo de banco de dados, talvez seja necessário reconstruir as consultas. Portanto, recomendamos que o projeto não seja desenvolvido com um banco de dados que sirva como rascunho para ser posteriormente corrigido, pois isso causará trabalho extra na finalização do projeto.
3) E3 Query
O E3 Query é o assistente para criação de consultas padrão no E3. Os objetos que fazem uso intensivo de consultas, como o E3 Browser e E3 Reports, trazem internamente um desses objetos, como pode ser visto na Figura 1.
Figura 1: Inserção de consulta no projeto
Para iniciar o trabalho com o E3 Query, clique com o botão direto e insira um objeto Consulta, que acessará um banco de dados disponível. Um duplo clique abre sua janela de configuração (Figura 2).
Figura 2: Definição do banco de dados a ser utilizado
Após configurar o banco de onde os dados serão extraídos, será exibida a lista de tabelas disponíveis. Com essas informações, o E3 passa a montar automaticamente a consulta SQL que trará os dados do banco.
Figura 3: Seleção de tabelas a serem consultadas
Depois de selecionada a tabela de interesse (Figura 3), será exibida a interface de construção da consulta (Figura 4).
Nessa tela, destacam-se áreas distintas:
- Campos: nesse item, é exibido o botão Adicionar Tabela, que faz o trabalho de consulta em mais de uma tabela.
- Variáveis: utilizado para configurar os parâmetros dos filtros criados para a consulta.
- Visualizar: O botão Executar Consulta realiza a consulta no banco de dados.
- SQL: A edição direta do SQL é recomendada para clientes com conhecimentos nessa linguagem.
Figura 4: Tela de configuração de consultas
Na aba Campos, são exibidas as tabelas que foram abertas para a consulta criada. É possível selecionar o item “*”, que seleciona todos os campos, ou cada um dos campos de interesse, o que é mais recomendado. Na consulta exemplo que estamos criando, apenas uma tabela está aberta. Os campos terminados em _Quality são gerados automaticamente pelos históricos do E3.
A Figura 5 é uma consulta completa desenvolvida com o E3 e mostra o uso das outras áreas, como as colunas selecionadas, com as opções de ordenação e agrupamento, entre outras. Uma das opções mais importantes é a de criar filtros em cada campo, que podem ser utilizados através de scripts, como será visto adiante.
A área onde está o comando SQL desenvolvido (aba SQL) para os dados selecionados funciona apenas para consulta, a não ser que seja habilitada a edição direta do SQL.
A última área de interesse traz o resultado (aba Visualizar), em formato de planilha, da consulta realizada através do botão Executar Consulta.
Figura 5: Consulta configurada
Após a configuração da consulta básica, será utilizada uma consulta com filtro por data. Para isso, usaremos a mesma consulta já configurada. O procedimento a ser utilizado é o mesmo para qualquer campo selecionado, mas comumente a consulta de históricos é feita por período, sejam eles registros de dados de produção ou registros de eventos passados. Outros usos para filtros são bastante comuns.
Para edição de filtros por timestamp no E3 Query, vá até a linha onde está sendo mostrado o nome do campo, acesse o item Filtro e clique no lado direito do campo, sobre o botão com reticências (como nas associações no E3). Isto fará com que a interface de configuração do filtro seja aberta (Figura 6).
Nessa janela, configure cada um dos campos de critério (como “maior que” e “menor que”) semelhantemente às variáveis que serão usadas para aplicar os filtros. Neste caso, utilize as variáveis InitialDate e FinalDate. É importante lembrar (como pode ser visto na Figura 6), que os nomes das variáveis devem estar entre os símbolos <% e %>, para que possam ser entendidos como parâmetros. Para trabalhar com datas, é necessário passar os argumentos entre duas #. Para outras variáveis, não utilize as #.
Figura 6: Configuração de filtros em consultas
Depois de concluída a configuração do filtro, é possível testar novamente o resultado da consulta. Para isso, encerre a edição do filtro, clicando sobre o botão OK. Vá até a aba Variáveis e defina os valores para cada um dos filtros a serem utilizados (Figura 7).
Figura 7: Definição de valores para os campos de filtros
O último passo para confirmar se a consulta foi construída apropriadamente é ir na aba Visualizar e clicar no botão Executar Consulta, conferindo na lista de dados trazidos se eles correspondem às expectativas anteriores. Modifique as datas inicial e final, para verificar que os resultados da consulta serão alterados. Como informação adicional, a Figura 8 apresenta a consulta construída com os filtros definidos no assistente.
Figura 8: Consulta SQL gerada pelo E3Query
Uso dos filtros do E3 Query através de scripts
Configurar e confirmar se a consulta está correta é apenas um dos passos no uso do E3 Query. O uso em tempo de execução e as modificações de valores dos filtros definidos para a consulta podem ser vistos no script abaixo. A função Consulta.SetVariableValue é a responsável pela parametrização da consulta conforme valores passados via script.
set consulta = Screen.Item("E3Browser1").Item("Consulta1") consulta.SetVariableValue "InitialDate",Application.GetObject("DadosFH.TagInterno1").Value consulta.SetVariableValue "FinalDate",Application.GetObject("DadosFH.TagInterno2").Value Screen.Item("E3Browser1").Requery()
A função Requery() possibilita que os novos parâmetros de consulta sejam realmente utilizados, visto que uma nova consulta é feita respeitando esses novos valores.
Uso de Record Sets de uma consulta através de scripts
Outro uso do E3 Query é com Record Sets. Depois de feita uma consulta, é possível capturar o Record Set correspondente e trabalhar com registros linha a linha, executar novas consultas, etc.
Na linha de comando “RS = TelaInicial.E3Browser1.Consulta1.GetADORecordset()”, a variável RS assume todas as características de um Record Set, como descrito no início do documento na seção Acesso a Banco de Dados através de Scripts. A vantagem do uso desse recurso é que, se forem feitas modificações nas propriedades do banco, não é necessário ajustar cada um dos scripts que o acessam.