DatabaseImport

Importa a un recuadro los datos de un archivo.

long  DatabaseImport(
   int           database,          // manejador de base de datos recibido en DatabaseOpen
   const string  table,             // nombre del recuadro para insertar los datos
   const string  filename,          // nombre del archivo para importar los datos
   uint          flags,             // combinación de banderas
   const string  separator,         // separador de datos 
   ulong         skip_rows,         // cuantas primeras líneas se omiten 
   const string  skip_comments      // línea de símbolos que determinan los comentarios
   );

Parámetros

database

[in]  Manejador de base de datos recibido en DatabaseOpen().

table

[in]  Nombre del recuadro al que se añadirán los datos del archivo.

filename

[in]  Archivo CSV o archivo ZIP para leer los datos, el nombre puede contener subcarpetas y se establece con respecto a la carpeta MQL5\Files.

flags

[in]  Combinación de banderas de la enumeración ENUM_DATABASE_IMPORT_FLAGS.

separator

[in]  Separador de datos en el archivo CSV.

skip_rows

[in]  Número de líneas iniciales que se deben omitir al leer los datos del archivo.

skip_comments

[in]  Línea de símbolos para designar las líneas como comentarios. Si al inicio de la línea se encuentra cualquier símbolo de skip_comments, esta línea se considerará un comentario y no será importada.

Valor retornado

Retorna el número de líneas importadas, o -1, en caso de error. Para obtener el código del error, use GetLastError(), posibles respuestas:

  • ERR_INVALID_PARAMETER (4003)              —  el nombre del recuadro no ha sido establecido (línea vacía o NULL);
  • ERR_DATABASE_INTERNAL (5120)              — error interno en la base de datos;
  • ERR_DATABASE_INVALID_HANDLE (5121)   - manejador no válido de la base de datos.

 

Observación

Si el recuadro con el nombre table no existe, será creado de forma automática. El nombre y el tipo de los campos en el recuadro creado serán reconocidos automáticamente usando como base los datos contenidos en el archivo.  

ENUM_DATABASE_IMPORT_FLAGS

Identificador

Descripción

DATABASE_IMPORT_HEADER

La primera línea contiene los nombres de los campos del recuadro

DATABASE_IMPORT_CRLF

Para el traslado de líneas, se considera CRLF (por defecto, LF)

DATABASE_IMPORT_APPEND

Añadir datos al final de un recuadro existente

DATABASE_IMPORT_QUOTED_STRINGS

Los valores de tipo string van entre comillas dobles

DATABASE_IMPORT_COMMON_FOLDER

El archivo está ubicado en la carpeta general de todos los terminales de cliente \Terminal\Common\File.

Ejemplo de lectura de un recuadro desde un archivo creado usando el código del ejemplo en DatabaseExport :

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
  string csv_filename;
//--- obtenemos los nombres de los archivos de texto para realizar la carga desde la carpeta general de los terminales de cliente
  string filenames[];
  if(FileSelectDialog("Seleccione el archivo CSV para cargar el recuadro"NULL,
                      "Text files (*.csv)|*.csv",
                      FSD_WRITE_FILE|FSD_COMMON_FOLDERfilenames"data.csv")>0)
   {
    //--- mostramos el nombre de cada archivo seleccionado
    if(ArraySize(filenames)==1)
      csv_filename=filenames[0];
    else
     {
      Print("Error desconocido al seleccionar el archivo. Código de error "GetLastError());
      return;
     }
   }
  else
   {
    Print("Archivo CSV no seleccionado");
    return;
   }
//--- creamos o abrimos la base de datos
  string db_filename="test.sqlite";
  int db=DatabaseOpen(db_filenameDATABASE_OPEN_READWRITE|DATABASE_OPEN_CREATE);
//--- comprobamos la presencia del recuadro TEST
  if(DatabaseTableExists(db"TEST"))
   {
    //--- eliminamos el recuadro TEST
    if(!DatabaseExecute(db"DROP TABLE IF EXISTS TEST"))
     {
      Print("Failed to drop the TEST table with code "GetLastError());
      DatabaseClose(db);
      return;
     }
   }
  //--- importamos la entrada desde el archivo al recuadro 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());
    }
//--- cerramos el archivo con la base de datos y comunicamos este hecho
  DatabaseClose(db);
  PrintFormat("Database: %s closed"db_filename);
 }

Ver también

DatabaseOpen, DatabasePrint