136 lines
5.2 KiB
Markdown
136 lines
5.2 KiB
Markdown
# 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()](/en/docs/database/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](/en/docs/database/databaseimport#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()](/en/docs/check/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](/en/docs/database/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
|
||
|
||
[DatabaseOpen](/en/docs/database/databaseopen), [DatabasePrint](/en/docs/database/databaseprint)
|