DatabaseImport

从文件导入数据到表格中。

long  DatabaseImport(

   int           database,          // 在DatabaseOpen中接收的数据库句柄

   const string  table,             // 要插入数据的表格名称

   const string  filename,          // 要导入数据的文件名

   uint          flags,             // 标识组合

   const string  separator,         // 数据分隔符

   ulong         skip_rows,         // 要跳过多少初始字符串

   const string  skip_comments      // 定义注释的字符串

   );

参数

database

[in]  在DatabaseOpen()中接收的数据库句柄。

table

[in]  将要添加文件数据的表格名称。

filename

[in]  用于读取数据的CSV文件或ZIP存档文件。该名称可能包含子目录,并且是相对于MQL5\Files文件夹设置。

flags

[in] ENUM_DATABASE_IMPORT_FLAGS枚举中的标识组合。

separator

[in]  CSV文件中的数据分隔符。

skip_rows

[in]  当从文件读取数据时,要跳过的初始字符串数。

skip_comments

[in]  用于将字符串指定为注释的字符串。如果在字符串的开头检测到skip_comments中的任何字符,那么该字符串将被视为注释,并不被导入。

返回值

返回导入字符串的数量,如果出现错误则返回-1。要获得错误代码,请使用GetLastError(),可能回应:

  • ERR_INVALID_PARAMETER (4003)              –  没有指定表格名称(空字符串或NULL);
  • ERR_DATABASE_INTERNAL (5120)              – 内部数据库错误;
  • ERR_DATABASE_INVALID_HANDLE (5121)   - 无效数据库句柄。

注意

如果没有名为table的表格,则自动生成该表。根据文件数据自动定义创建表格中的名称和字段类型。 

ENUM_DATABASE_IMPORT_FLAGS

ID 描述
DATABASE_IMPORT_HEADER 第一行包含表格字段的名称
DATABASE_IMPORT_CRLF CRLF(默认为LF)被认为是字符串中断
DATABASE_IMPORT_APPEND 将数据添加到现有表格末端
DATABASE_IMPORT_QUOTED_STRINGS 用双引号括住字符串值
DATABASE_IMPORT_COMMON_FOLDER 该文件存储在所有客户端的常规文件夹\Terminal\Common\File。

DatabaseExport示例中的代码创建的文件中读取表格的示例:

//+------------------------------------------------------------------+

//| 脚本程序起始函数                                                   |

//+------------------------------------------------------------------+

void OnStart()

 {

  string csv_filename;

//--- 从客户端的通用文件夹获取要下载的文本文件的名称

  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)

   {

    //--- 显示每个选定文件的名称

    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;

   }

//--- 创建或打开数据库

  string db_filename="test.sqlite";

  int db=DatabaseOpen(db_filename, DATABASE_OPEN_READWRITE|DATABASE_OPEN_CREATE);

//--- 检查TEST表格是否存在

  if(DatabaseTableExists(db, "TEST"))

   {

    //--- 移除TEST表格

    if(!DatabaseExecute(db, "DROP TABLE IF EXISTS TEST"))

     {

      Print("Failed to drop the TEST table with code ", GetLastError());

      DatabaseClose(db);

      return;

     }

   }

  //--- 从文件导入条目到TEST表格

  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());

    }

//--- 关闭数据库文件并告知

  DatabaseClose(db);

  PrintFormat("Database: %s closed", db_filename);

 }

另见

DatabaseOpenDatabasePrint