DatabaseImport

Импортирует в таблицу данные из файла.

long  DatabaseImport(
   int           database,          // хендл базы данных, полученный в DatabaseOpen
   const string  table,             // имя таблицы для вставки данных
   const string  filename,          // имя файла для импорта данных
   uint          flags,             // комбинация флагов
   const string  separator,         // разделитель данных 
   ulong         skip_rows,         // сколько первых строк пропустить 
   const string  skip_comments      // строка символов, которые определяют комментарии
   );

Параметры

database

[in]  Хендл базы данных, который получен в DatabaseOpen().

table

[in]  Имя таблицы, в которую будут добавлены данные из файла.

filename

[in]  CSV-файл или ZIP-архив для чтения данных, имя может содержать подпапки и задается относительно папки MQL5\Files.

flags

[in]  Комбинация флагов из перечисления ENUM_DATABASE_IMPORT_FLAGS.

separator

[in]  Разделитель данных в CSV-файле.

skip_rows

[in]  Количество начальных строк, которые необходимо пропустить при чтении данных из файла.

skip_comments

[in]  Строка из символов для обзначения строк как комментариев. Если в начале строки найден любой символ из skip_comments,  то такая строка считается комментарием и не импортируется.

Возвращаемое значение

Возвращает количество импортированных строк или -1 в случае ошибки. Для получения кода ошибки используйте GetLastError(), возможные ответы:

  • ERR_INVALID_PARAMETER (4003)              –  имя таблицы не задано (пустая строка или NULL);
  • ERR_DATABASE_INTERNAL (5120)              – внутренняя ошибка базы данных;
  • ERR_DATABASE_INVALID_HANDLE (5121)   - невалидный хендл базы данных.

 

Примечание

Если таблицы с именем table не существует, то она будет создана автоматически. Имена и тип полей в созданной таблице будут распознаны автоматически на основе данных, содержащихся в файле.  

ENUM_DATABASE_IMPORT_FLAGS

Идентификатор

Описание

DATABASE_IMPORT_HEADER

Первая строка содержит имена полей таблицы

DATABASE_IMPORT_CRLF

Переносом строки считается CRLF (по умолчанию LF)

DATABASE_IMPORT_APPEND

Добавлять данные в конец существующей таблицы

DATABASE_IMPORT_QUOTED_STRINGS

Строковые значения заключены в двойных кавычках

DATABASE_IMPORT_COMMON_FOLDER

Файл находится в общей папке всех клиентских терминалов \Terminal\Common\File.

Пример чтения таблицы из файла, созданного кодом из примера в DatabaseExport :

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
  string csv_filename;
//--- получим имена текстовых файлов для загрузки из общей папки клиентских терминалов
  string filenames[];
  if(FileSelectDialog("Выберите CSV-файл для загрузки таблицы"NULL,
                      "Text files (*.csv)|*.csv",
                      FSD_WRITE_FILE|FSD_COMMON_FOLDERfilenames"data.csv")>0)
   {
    //--- выведем имя каждого выбранного файла
    if(ArraySize(filenames)==1)
      csv_filename=filenames[0];
    else
     {
      Print("Неизвестная ошибка при выборе файла. Код ошибки "GetLastError());
      return;
     }
   }
  else
   {
    Print("CSV-файл не выбран");
    return;
   }
//--- создадим или откроем базу данных
  string db_filename="test.sqlite";
  int db=DatabaseOpen(db_filenameDATABASE_OPEN_READWRITE|DATABASE_OPEN_CREATE);
//--- проверим наличие таблицы TEST
  if(DatabaseTableExists(db"TEST"))
   {
    //--- удалим таблицу TEST
    if(!DatabaseExecute(db"DROP TABLE IF EXISTS TEST"))
     {
      Print("Failed to drop the TEST table with code "GetLastError());
      DatabaseClose(db);
      return;
     }
   }
  //--- импортируем записи из файла в таблицу 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());
    }
//--- закроем файл с базой данных и сообщим об этом
  DatabaseClose(db);
  PrintFormat("Database: %s closed"db_filename);
 }

Смотри также

DatabaseOpen, DatabasePrint