Nhập và xuất bảng cơ sở dữ liệu
MQL5 cho phép xuất và nhập các bảng cơ sở dữ liệu riêng lẻ sang/từ tệp CSV. Việc xuất/nhập toàn bộ cơ sở dữ liệu dưới dạng tệp chứa các lệnh SQL không được hỗ trợ.
long DatabaseImport(int database, const string table, const string filename, uint flags, const string separator, ulong skip_rows, const string comment_chars)
Hàm DatabaseImport
nhập dữ liệu từ tệp được chỉ định vào bảng. Mô tả cơ sở dữ liệu đã mở và tên bảng được cung cấp bởi hai tham số đầu tiên.
Nếu bảng có tên table
không tồn tại, nó sẽ được tạo tự động. Tên và kiểu của các trường trong bảng sẽ được nhận diện tự động dựa trên dữ liệu chứa trong tệp.
Tệp được nhập có thể không chỉ là tệp CSV đã sẵn sàng mà còn có thể là tệp nén ZIP chứa tệp CSV. Tên tệp có thể bao gồm đường dẫn. Tệp được tìm kiếm tương đối với thư mục MQL5/Files
.
Các cờ hợp lệ có thể được kết hợp bitwise được mô tả trong liệt kê ENUM_DATABASE_IMPORT_FLAGS:
- DATABASE_IMPORT_HEADER — dòng đầu tiên chứa tên của các trường bảng
- DATABASE_IMPORT_CRLF — sử dụng chuỗi ký tự CRLF để ngắt dòng
- DATABASE_IMPORT_APPEND — thêm dữ liệu vào bảng hiện có
- DATABASE_IMPORT_QUOTED_STRINGS — giá trị chuỗi trong dấu nháy kép
- DATABASE_IMPORT_COMMON_FOLDER — thư mục chung của các terminal
Tham số separator
đặt ký tự phân cách trong tệp CSV.
Tham số skip_rows
bỏ qua số dòng đầu tiên được chỉ định trong tệp.
Tham số comment_chars
chứa các ký tự được sử dụng trong tệp như cờ nhận xét. Các dòng bắt đầu bằng bất kỳ ký tự nào trong số này sẽ được coi là nhận xét và không được nhập.
Hàm trả về số hàng đã nhập hoặc -1 nếu có lỗi.
long DatabaseExport(int database, const string table_or_sql, const string filename, uint flags, const string separator)
Hàm DatabaseExport
xuất bảng hoặc kết quả của một truy vấn SQL sang tệp CSV. Handle cơ sở dữ liệu, cũng như tên bảng hoặc văn bản truy vấn, được chỉ định trong hai tham số đầu tiên.
Nếu xuất kết quả truy vấn, thì truy vấn SQL phải bắt đầu bằng SELECT
hoặc select
. Nói cách khác, truy vấn SQL không thể thay đổi trạng thái cơ sở dữ liệu; nếu không, DatabaseExport
sẽ kết thúc với lỗi.
Tên tệp filename
có thể chứa đường dẫn bên trong thư mục MQL5/Files
của phiên bản terminal hiện tại hoặc thư mục chung của các terminal, tùy thuộc vào các cờ.
Tham số flags
cho phép bạn chỉ định một tổ hợp cờ kiểm soát định dạng và vị trí của tệp.
- DATABASE_EXPORT_HEADER — xuất một chuỗi với tên các trường
- DATABASE_EXPORT_INDEX — hiển thị số dòng
- DATABASE_EXPORT_NO_BOM — không chèn nhãn BOM vào đầu tệp (BOM được chèn mặc định)
- DATABASE_EXPORT_CRLF — sử dụng CRLF để ngắt dòng (mặc định là LF)
- DATABASE_EXPORT_APPEND — thêm dữ liệu vào cuối tệp hiện có (mặc định là ghi đè tệp), nếu tệp không tồn tại, nó sẽ được tạo
- DATABASE_EXPORT_QUOTED_STRINGS — xuất giá trị chuỗi trong dấu nháy kép
- DATABASE_EXPORT_COMMON_FOLDER — tệp CSV sẽ được tạo trong thư mục chung của tất cả các terminal
MetaQuotes/Terminal/Common/File
Tham số separator
chỉ định ký tự phân cách cột. Nếu nó là NULL, thì ký tự tab '\t' sẽ được sử dụng làm phân cách. Chuỗi rỗng "" được coi là phân cách hợp lệ, nhưng tệp CSV kết quả không thể được đọc dưới dạng bảng và sẽ là một tập hợp các hàng.
Các trường văn bản trong cơ sở dữ liệu có thể chứa ký tự xuống dòng ('\r' hoặc '\r\n') cũng như ký tự phân cách được chỉ định trong tham số separator
. Trong trường hợp này, cần sử dụng cờ DATABASE_EXPORT_QUOTED_STRINGS trong tham số flags
. Nếu cờ này có mặt, tất cả chuỗi xuất ra sẽ được bao trong dấu nháy kép, và nếu chuỗi chứa dấu nháy kép, nó sẽ được thay bằng hai dấu nháy kép.
Hàm trả về số bản ghi đã xuất hoặc giá trị âm trong trường hợp có lỗi.