Olá Vagner, desculpa a demora.
Fiz aqui um exemplo de aplicação onde se é plotado uma curva em função de uma consulta no banco e também o salvamento dessa mesma consulta - que é a que está gerando o plot, em um formato csv.
A dinâmica é bastante simples, um botão faz a consulta no banco, armazena esses valores resgatados em uma tabela lua e depois utiliza dessa tabela para gerar o plot. Outro botão realiza a mesma consulta (que vale lembrar, está limitado pelos tags de data de início e fim na tela), também converte esses valores em uma tabela lua e depois formata essa tabela lua para o formato .csv, que nada mais é do que pegar cada ele elemento da tabela lua e separá-los por um ";".
No entanto, o que está fazendo essa conversão para o .csv é um módulo Lua, criado aqui na HI, que nada mais é do que um trecho de código Lua - que fica armazenado como um arquivo .Lua sempre numa pasta chamada lua que está localizada dentro da pasta do projeto (C:\Users\Public\Documents\HI_tecnologia\HIscada_Pro\1.4\SCADA_1\Kernel\Projects\Exemplo_Arquivo_CSV\publ), e que funciona como uma função externa que você pode chamar a qualquer momento dentro de qualquer script. No arquivo de exemplo que estou te passando você pode acessar esses módulos lua e abri-los como bloco de notas para visualizar o código, não vou entrar em detalhes aqui de como o código está exatamente fazendo a conversão, mas qualquer dúvida você pode me perguntar.
O módulo que faz a conversão se chama "ConvTabCsv.lua", e ele funciona como uma função que recebe dois tipos de parâmetros primeiro o caminho do local onde será armazenado o arquivo.csv e segundo a tabela lua com os valores que serão convertidos, o processo funciona de seguinte forma:
Code: Select all
-- Primeiro você de declara o módulo, lembrando de usar o mesmo nome do arquivo Lua
AdicionaModuloConvTabCsv = require "ConvTabCsv"
-- Depois você pode chamar a função junto com os parâmetros
local ret = ConvTabCsv("Endereço do local do arquivo","tabela lua para converter")
Na variável ret será retornado alguns valores relativos a erros que podem ser tratados se quiser.
Então basta você converter a consulta em uma tabela lua e enviar essa tabela junto com o endereço do local onde será salvo o arquivo. Importante notar que no caso do botão que plota o gráfico a conversão da consulta para uma tabela lua está sendo feito "à mão", outra forma de fazer é utilizando um módulo criado para isso. Então, no caso do script que gera o arquivo csv, a conversão da consulta para a tabela lua está sendo feito com o módulo "CursorTab.lua", que funciona de maneira similar ao outro módulo, só mudando os parâmetros:
Code: Select all
-- Primeiro você declara o módulo
AdicionaModuloConvTabCsv = require "CursorTab"
-- Depois você chama a função com seus parâmetros
tabela_dados_arquivo_csv = CursorTab("cursor retornada da consulta", "titulo das colunas separado por vírgula")
Os parâmetros necessários são: o cursor retornado da consulta "local cursor,error = retOpenDB:Execute(CmdSQL)", e o nome das colunas retornadas na consulta ao banco.
Outro detalhe é sobre a função "flag_selected":
Code: Select all
local flag_selected, file1 = FileDialog(
2, -- opcao para SALVAR um arquivo
"Selecione arquivos para exportar", -- Titulo da janela de solicitação do arquivo
"csv", -- Extensão padrão para os arquivos
UnidadeSalvaRelatorio, -- Diretorio inicial para seleção dos arquivos
NomeArquivo .. ".csv", -- Nome Inicial para o arquivo
filtro, -- Especificação dos filtros dos arquivos
1); -- Seleção do filtro 2 como filtro inicial
Essa função ela abre um diretório para o usuário escolher e retorna como valor uma string com o endereço do diretório escolhido. E é esse resultado que está sendo enviado para o módulo que faz a conversão para o arquivo csv. Para mais informações
http://doc.hitecnologia.com.br/hiscada_ ... iledialog1. Caso você não queira dar essa opção para o usuário basta fixar o endereço do local onde sempre será salvo o arquivo gerado.
Espero ter conseguido ser claro, qualquer coisa estou a disposição.
OBS: Para testar o exemplo que estou enviando, que já tem alguns dados armazenados no banco User.db, utilize as seguinte datas de início e fim: 01/03/2016 00:00:00 e 02/03/2016 09:50:00.