Импорт и экспорт таблицы базы данных

MQL5 позволяет экспортировать и импортировать отдельные таблицы базы данных в/из файлов формата CSV. Экспорт/импорт базы целиком, в виде файла с SQL-командами, к сожалению, не предусмотрен.

long DatabaseImport(int database, const string table, const string filename, uint flags,
  const string separator, ulong skip_rows, const string comment_chars)

Функция DatabaseImport импортирует в таблицу данные из указанного файла. Дескриптор открытой базы и имя таблицы задаются двумя первыми параметрами.

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

Импортируемый файл может представлять собой не только готовый CSV-файл, но и ZIP-архив с CSV-файлом. Имя файла может содержать путь. Файл ищется относительно каталога MQL5/Files.

Допустимые флаги, из которых можно составить побитовую комбинацию, описаны в перечислении ENUM_DATABASE_IMPORT_FLAGS:

  • DATABASE_IMPORT_HEADER — первая строка содержит имена полей таблицы;
  • DATABASE_IMPORT_CRLF — для переносов строк используется последовательность символов CRLF;
  • DATABASE_IMPORT_APPEND — добавлять данные к существующей таблице;
  • DATABASE_IMPORT_QUOTED_STRINGS — строковые значения в двойных кавычках;
  • DATABASE_IMPORT_COMMON_FOLDER — общая папка терминалов.

Параметр separator задает символ-разделитель в CSV-файле.

Параметр skip_rows позволяет пропустить указанное количество начальных строк в файле.

Параметр comment_chars содержит символы, используемые в файле в качестве признака комментария. Строки, начинающиеся с любого из этих символов, будут считаться комментариями и не будут импортироваться.

Функция возвращает количество импортированных строк или -1 в случае ошибки.

long DatabaseExport(int database, const string table_or_sql, const string filename, uint flags, const string separator)

Функция DatabaseExport экспортирует таблицу или результат выполнения SQL-запроса в CSV-файл. Дескриптор базы, а также имя таблицы или текст запроса задаются в первых двух параметрах.

Если экспортируются результаты запроса, то SQL-запрос должен начинаться с "SELECT" или "select". Другими словами, SQL-запрос не может изменять состояние базы данных, в противном случае DatabaseExport завершится ошибкой.

Имя файла filename может содержать путь внутри каталога MQL5/Files текущего экземпляра терминала или общей папки терминалов, в зависимости от флагов.

Параметр flags позволяет задать комбинацию флагов, управляющую форматом и размещением файла.

  • DATABASE_EXPORT_HEADER — выводить строку с именами полей;
  • DATABASE_EXPORT_INDEX — выводить номера строк;
  • DATABASE_EXPORT_NO_BOM — не вставлять метку BOM в начале файла (по умолчанию BOM вставляется);
  • DATABASE_EXPORT_CRLF — для переноса строки использовать CRLF (по умолчанию LF);
  • DATABASE_EXPORT_APPEND — дописывать данные в конец существующего файла (по умолчанию файл перезаписывается), если файл не существует — он будет создан;
  • DATABASE_EXPORT_QUOTED_STRINGS — выводить строковые значения в двойных кавычках;
  • DATABASE_EXPORT_COMMON_FOLDER — CSV-файл будет создан в общей папке всех терминалов MetaQuotes/Terminal/Common/File.

Параметр separator задает символ-разделитель столбцов. Если он равен NULL, то в качестве разделителя будет использоваться символ табуляции '\t'.  Пустая строка "" считается допустимым разделителем, но полученный CSV-файл не сможет быть прочитан как таблица — это будет набор строк.

Текстовые поля в базе данных могут содержать переводы строк ('\r' или '\r\n' ), а также символ-разделитель, указанный в параметре separator. В этом случае нужно обязательно использовать флаг DATABASE_EXPORT_QUOTED_STRINGS в параметре flags. При наличии этого флага все выводимые строки будут заключены в двойные кавычки, а если в строке содержится двойная кавычка, то она будет заменена на две двойные кавычки.

Функция возвращает количество экспортированных записей или отрицательное значение в случае ошибки.