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_FOLDERfilenames"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_filenameDATABASE_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_filenameDATABASE_IMPORT_HEADER|DATABASE_IMPORT_COMMON_FOLDER|DATABASE_IMPORT_APPEND";"0NULL);
  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