- Знакомство с принципами работы с базой данных в MQL5
- Основы SQL
- Структура (схема) таблиц: типы данных и ограничения
- Интеграция ООП (MQL5) и SQL: концепция ORM
- Создание, открытие и закрытие базы данных
- Выполнение запросов без привязки к данным MQL5
- Проверка существования таблицы в базе данных
- Подготовка запросов с привязкой: DatabasePrepare
- Удаление и сброс подготовленных запросов
- Привязка данных к параметрам запроса:DatabaseBind/Array
- Выполнение подготовленных запросов: DatabaseRead/Bind
- Раздельное чтение полей: DatabaseColumn-функции
- Примеры CRUD-операций в SQLite через объекты ORM
- Транзакции
- Импорт и экспорт таблицы базы данных
- Печать таблиц и SQL-запросов в журнал
- Пример поиска торговой стратегии средствами SQLite
Импорт и экспорт таблицы базы данных
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. При наличии этого флага все выводимые строки будут заключены в двойные кавычки, а если в строке содержится двойная кавычка, то она будет заменена на две двойные кавычки.
Функция возвращает количество экспортированных записей или отрицательное значение в случае ошибки.