Đọc các trường riêng lẻ: Hàm DatabaseColumn
Kết quả của việc thực thi truy vấn bằng các hàm DatabaseRead
hoặc DatabaseReadBind
, chương trình có cơ hội cuộn qua các bản ghi được chọn theo các điều kiện đã chỉ định. Tại mỗi lần lặp, trong các cấu trúc nội bộ của động cơ SQLite, một bản ghi cụ thể được phân bổ, các trường (cột) của nó có thể truy cập thông qua nhóm hàm DatabaseColumn
.
int DatabaseColumnsCount(int request)
Dựa trên mô tả truy vấn, hàm trả về số lượng trường (cột) trong kết quả truy vấn. Trong trường hợp lỗi, nó trả về -1.
Bạn có thể tìm ra số lượng trường trong truy vấn được tạo trong DatabasePrepare
DatabasePrepare ngay cả trước khi gọi hàm DatabaseRead
DatabaseRead. Đối với các hàm DatabaseColumn
khác, bạn nên gọi DatabaseRead
trước (ít nhất một lần).
Sử dụng số thứ tự ban đầu của một trường trong kết quả truy vấn, chương trình có thể tìm ra tên trường (DatabaseColumnName
), kiểu (DatabaseColumnType
), kích thước (DatabaseColumnSize
), và giá trị của kiểu tương ứng (mỗi kiểu có hàm riêng).
bool DatabaseColumnName(int request, int column, string &name)
Hàm điền tham số chuỗi được truyền bằng tham chiếu (name
) với tên của cột được chỉ định bởi số (column
) trong kết quả truy vấn (request
).
Việc đánh số trường bắt đầu từ 0 và không thể vượt quá giá trị của DatabaseColumnsCount() - 1
. Điều này áp dụng không chỉ cho hàm này mà còn cho tất cả các hàm khác trong phần này.
Hàm trả về true
nếu thành công hoặc false
trong trường hợp lỗi.
ENUM_DATABASE_FIELD_TYPE DatabaseColumnType(int request, int column)
Hàm DatabaseColumnType
trả về kiểu của giá trị trong cột được chỉ định trong bản ghi hiện tại của kết quả truy vấn. Các kiểu có thể được thu thập trong liệt kê ENUM_DATABASE_FIELD_TYPE.
Định danh | Mô tả |
---|---|
DATABASE_FIELD_TYPE_INVALID | Lỗi khi lấy kiểu, mã lỗi trong _LastError |
DATABASE_FIELD_TYPE_INTEGER | Số nguyên |
DATABASE_FIELD_TYPE_FLOAT | Số thực |
DATABASE_FIELD_TYPE_TEXT | Chuỗi |
DATABASE_FIELD_TYPE_BLOB | Dữ liệu nhị phân |
DATABASE_FIELD_TYPE_NULL | Rỗng (kiểu đặc biệt NULL) |
Chi tiết hơn về các kiểu SQL và sự tương ứng của chúng với các kiểu MQL5 đã được mô tả trong phần Cấu trúc (lược đồ) của bảng: kiểu dữ liệu và hạn chế.
int DatabaseColumnSize(int request, int column)
Hàm trả về kích thước của giá trị tính bằng byte cho trường với chỉ số column
trong bản ghi hiện tại của kết quả truy vấn request
. Ví dụ, các giá trị số nguyên có thể được biểu diễn bằng số byte khác nhau (chúng ta biết điều này từ các kiểu MQL5, đặc biệt là short/int/long
).
Nhóm hàm tiếp theo cho phép bạn lấy giá trị của một kiểu cụ thể từ trường tương ứng của bản ghi. Để đọc giá trị từ bản ghi tiếp theo, bạn cần gọi lại DatabaseRead
.
bool DatabaseColumnText(int request, int column, string &value)
bool DatabaseColumnInteger(int request, int column, int &value)
bool DatabaseColumnLong(int request, int column, long &value)
bool DatabaseColumnDouble(int request, int column, double &value)
bool DatabaseColumnBlob(int request, int column, void &data[])
Tất cả các hàm trả về true
khi thành công và đặt giá trị trường vào biến nhận value
. Trường hợp đặc biệt duy nhất là hàm DatabaseColumnBlob
, hàm này truyền một mảng của kiểu đơn giản bất kỳ hoặc các cấu trúc đơn giản làm biến đầu ra. Bằng cách chỉ định mảng uchar[]
làm tùy chọn linh hoạt nhất, bạn có thể đọc biểu diễn byte của bất kỳ giá trị nào (bao gồm các tệp nhị phân được đánh dấu bằng kiểu DATABASE_FIELD_TYPE_BLOB).
Động cơ SQLite không kiểm tra xem một hàm tương ứng với kiểu của cột có được gọi hay không. Nếu các kiểu vô tình hoặc cố ý khác nhau, hệ thống sẽ tự động ngầm chuyển đổi giá trị trường sang kiểu của biến nhận.
Bây giờ, sau khi làm quen với phần lớn các hàm Database
, chúng ta có thể hoàn thành việc phát triển một tập hợp các lớp SQL trong tệp DBSQLite.mqh
và tiến hành các ví dụ thực tế.