5.2 KiB
DatabaseImport
Imports data from a file into a table.
long DatabaseImport(
int database, // database handle received in DatabaseOpen
const string table, // name of a table to insert data
const string filename, // name of a file to import data
uint flags, // combination of flags
const string separator, // data separator
ulong skip_rows, // how many initial strings to skip
const string skip_comments // string of characters defining comments
);
Parameters
database
[in] Database handle received in DatabaseOpen().
table
[in] Name of a table the data from a file is to be added to.
filename
[in] CSV file or ZIP archive for reading data. The name may contain subdirectories and is set relative to the MQL5\Files folder.
flags
[in] Combination of flags from the ENUM_DATABASE_IMPORT_FLAGS enumeration.
separator
[in] Data separator in CSV file.
skip_rows
[in] Number of initial strings to be skipped when reading data from the file.
skip_comments
[in] String of characters for designating strings as comments. If any character from skip_comments is detected at the beginning of a string, such a string is considered a comment and is not imported.
Return Value
Return the number of imported strings or -1 in case of an error. To get the error code, use GetLastError(), the possible responses are:
- ERR_INVALID_PARAMETER (4003) – no table name specified (empty string or NULL);
- ERR_DATABASE_INTERNAL (5120) – internal database error;
- ERR_DATABASE_INVALID_HANDLE (5121) - invalid database handle.
Note
If there is no table named table, it is generated automatically. Names and field types in the created table are defined automatically based on the file data.
If there is no table named table, it is generated automatically. Names and field types in the created table are defined automatically based on the file data.
ENUM_DATABASE_IMPORT_FLAGS
| ID | Description |
|---|---|
| DATABASE_IMPORT_HEADER | The first line contains the names of the table fields |
| DATABASE_IMPORT_CRLF | CRLF (the default is LF) is considered a string break |
| DATABASE_IMPORT_APPEND | Add data to the end of an existing table |
| DATABASE_IMPORT_QUOTED_STRINGS | String values enclosed in double quotes |
| DATABASE_IMPORT_COMMON_FOLDER | The file is stored in the common folder of all client terminals \Terminal\Common\File. |
Example of reading the table from the file created by the code from the DatabaseExport example:
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
string csv_filename;
//--- get the names of text files for downloading from the common folder of the client terminals
string filenames[];
if(FileSelectDialog("Select a CSV file to download a table", NULL,
"Text files (*.csv)|*.csv",
FSD_WRITE_FILE|FSD_COMMON_FOLDER, filenames, "data.csv")>0)
{
//--- display the name of each selected file
if(ArraySize(filenames)==1)
csv_filename=filenames[0];
else
{
Print("Unknown error while selecting file. Error code ", GetLastError());
return;
}
}
else
{
Print("CSV file not selected");
return;
}
//--- create or open a database
string db_filename="test.sqlite";
int db=DatabaseOpen(db_filename, DATABASE_OPEN_READWRITE|DATABASE_OPEN_CREATE);
//--- check if the TEST table exists
if(DatabaseTableExists(db, "TEST"))
{
//--- remove the TEST table
if(!DatabaseExecute(db, "DROP TABLE IF EXISTS TEST"))
{
Print("Failed to drop the TEST table with code ", GetLastError());
DatabaseClose(db);
return;
}
}
//--- import entries from the file to the TEST table
long imported=DatabaseImport(db, "TEST", csv_filename, DATABASE_IMPORT_HEADER|DATABASE_IMPORT_COMMON_FOLDER|DATABASE_IMPORT_APPEND, ";", 0, NULL);
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());
}
//--- close the database file and inform of that
DatabaseClose(db);
PrintFormat("Database: %s closed", db_filename);
}
See also