DatabaseImport

Importa para uma tabela dados de um arquivo.

long  DatabaseImport(
   int           database,          // identificador de banco de dados recebido em DatabaseOpen
   const string  table,             // nome da tabela para inserir dados
   const string  filename,          // nome do arquivo para importar dados
   uint          flags,             // combinação de sinalizadores
   const string  separator,         // separador de dados 
   ulong         skip_rows,         // quantas primeiras linhas ignorar
   const string  skip_comments      // strings de símbolos que definem comentários
   );

Parâmetros

database

[in]  Identificador do banco de dados obtido em DatabaseOpen().

table

[in]  Nome da tabela à qual serão adicionados os dados do arquivo.

filename

[in]  Arquivo CSV ou arquivo ZIP para leitura de dados, o nome pode conter subpastas e é definido em relação à pasta MQL5\Files.

flags

[in]  Combinação de sinalizadores a partir da enumeração ENUM_DATABASE_IMPORT_FLAGS.

separator

[in]  Separador de dados em um arquivo CSV.

skip_rows

[in]  Número de linhas iniciais a serem ignoradas ao ler dados de um arquivo.

skip_comments

[in]   Linhas dos símbolos para designar strings como comentários. Se, no início da linha, for encontrado qualquer símbolo de skip_comments, tal linha é considerada um comentário e não é importada.

Valor retornado

Retorna o número de linhas importadas ou -1 em caso de erro. Para obter o código de erro, use GetLastError(), respostas possíveis:

  • ERR_INVALID_PARAMETER (4003)              —  o nome da tabela não está especificado (linha vazia ou NULL);
  • ERR_DATABASE_INTERNAL (5120)              — erro interno do banco de dados;
  • ERR_DATABASE_INVALID_HANDLE (5121)   - identificador de banco de dados inválido.

 

Observação

Se tabelas cujo nome é table não existirem, elas serão criadas automaticamente. Os nomes e o tipo de campos na tabela criada serão reconhecidos automaticamente com base nos dados contidos no arquivo.  

ENUM_DATABASE_IMPORT_FLAGS

Identificador

Descrição

DATABASE_IMPORT_HEADER

A primeira linha contém os nomes dos campos da tabela

DATABASE_IMPORT_CRLF

Quebra de linha é CRLF ( por padrão, LF)

DATABASE_IMPORT_APPEND

Adiciona dados ao final de uma tabela existente

DATABASE_IMPORT_QUOTED_STRINGS

Os valores de string estão contidos em aspas duplas

DATABASE_IMPORT_COMMON_FOLDER

O arquivo está localizado na pasta comum de todos os terminais do cliente \Terminal\Common\File.

Exemplo de leitura de tabela a partir de um arquivo criado pelo código no exemplo em DatabaseExport :

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
  string csv_filename;
//--- obtemos os nomes dos arquivos de texto a serem carregados da pasta comum dos terminais do cliente
  string filenames[];
  if(FileSelectDialog("Selecione o arquivo CSV para carregamento da tabela"NULL,
                      "Text files (*.csv)|*.csv",
                      FSD_WRITE_FILE|FSD_COMMON_FOLDERfilenames"data.csv")>0)
   {
    //--- exibimos o nome de cada arquivo selecionado
    if(ArraySize(filenames)==1)
      csv_filename=filenames[0];
    else
     {
      Print("Erro desconhecido durante a seleção do arquivo. Código de erro "GetLastError());
      return;
     }
   }
  else
   {
    Print("arquivo CSV não selecionado");
    return;
   }
//--- criamos ou abrimos um banco de dados
  string db_filename="test.sqlite";
  int db=DatabaseOpen(db_filenameDATABASE_OPEN_READWRITE|DATABASE_OPEN_CREATE);
//--- verificamos a presença da tabela TEST
  if(DatabaseTableExists(db"TEST"))
   {
    //--- removemos a tabela TEST
    if(!DatabaseExecute(db"DROP TABLE IF EXISTS TEST"))
     {
      Print("Failed to drop the TEST table with code "GetLastError());
      DatabaseClose(db);
      return;
     }
   }
  //--- importamos os registros desde um arquivo para uma tabela TEST
  long imported=DatabaseImport(db"TEST"csv_filenameDATABASE_IMPORT_HEADER|DATABASE_IMPORT_COMMON_FOLDER|DATABASE_IMPORT_APPEND";"0NULL);
  if(imported>0)
   {
    Print(imported," lines imported in table TEST");
    DatabasePrint(db,"SELECT * FROM TEST",DATABASE_PRINT_NO_INDEX);
   }
  else
    {
     Print("DatabaseImport() failed. Error ",GetLastError());
    }
//--- fechamos o arquivo do banco de dados e relatamos isso
  DatabaseClose(db);
  PrintFormat("Database: %s closed"db_filename);
 }

Veja também

DatabaseOpen, DatabasePrint