DatabaseImport

Importieren von Daten aus einer Datei in eine Tabelle.

long  DatabaseImport(
   int           database,          // Handle der Datenbank, erhalten von DatabaseOpen
   const string  table,             // Tabellenname der dort einzutragenden Daten
   const string  filename,          // Dateiname mit den zu importierenden Daten
   uint          flags,             // Kombination der Flags
   const string  separator,         // Trennzeichen der Daten
   ulong         skip_rows,         // Wieviele Zeichenketten sollen am Anfang übersprungen werden
   const string  skip_comments      // Satz von Zeichen zur Kennzeichnung eines Kommentars
   );

Parameter

database

[in]  Handle der Datenbank, erhalten von DatabaseOpen().

table

[in]  Name der Tabelle, der die Daten aus einer Datei hinzugefügt werden sollen.

filename

[in]  CSV-Datei oder ZIP-Archive mit den zu lesenden Daten. Der Name darf Unterverzeichnisse enthalten und ist relativ zu dem Verzeichnis MQL5\Files.

flags

[in] Kombination der Flags aus der Enumeration ENUM_DATABASE_IMPORT_FLAGS.

separator

[in]  Trennzeichen der Daten in der CSV-Datei.

skip_rows

[in]  Anzahl der anfangs zu überspringenden Zeilen, wenn Daten aus einer Datei gelesen werden sollen.

skip_comments

[in]  Satz von Zeichen, die eine Zeichenkette als Kommentar kennzeichnen. Wenn ein Zeichen aus skip_comments am Anfang einer Zeichenkette erkannt wird, wird eine solche Zeichenkette als Kommentar betrachtet und nicht importiert.

Rückgabewert

Anzahl der importierten Einträge oder -1 im Fehlerfall. Um den Fehlercode zu erhalten, verwenden Sie GetLastError(), die möglichen Antworten sind:

  • ERR_INVALID_PARAMETER (4003)              –  kein Tabellenname angegeben (leere Zeichenkette oder NULL);
  • ERR_DATABASE_INTERNAL (5120)              – interner Datenbankfehler;
  • ERR_DATABASE_INVALID_HANDLE (5121)   - ungültiges Handle der Datenbank.

 

Hinweis

Wenn es keine Tabelle mit dem Namen table gibt, wird sie automatisch generiert. Namen und Feldtypen in der erzeugten Tabelle werden automatisch auf der Grundlage der Dateidaten definiert.  

ENUM_DATABASE_IMPORT_FLAGS

ID

Beschreibung

DATABASE_IMPORT_HEADER

Die erste Zeile enthält die Namen der Tabellenfelder

DATABASE_IMPORT_CRLF

CRLF (Standard ist LF) wird als Zeilenumbruch betrachtet

DATABASE_IMPORT_APPEND

Hinzufügen von Daten an das Ende einer bestehenden Tabelle

DATABASE_IMPORT_QUOTED_STRINGS

Zeichenkettenwerte werden in Anführungszeichen eingeschlossen.

DATABASE_IMPORT_COMMON_FOLDER

Die Datei wird im gemeinsamen Ordner aller Client-Terminals \Terminal\Common\File gespeichert.

Beispiel für das Lesen der Tabelle aus der Datei, die mit dem Code aus dem Beispiel DatabaseExport erstellt wurde:

//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
 {
  string csv_filename;
//--- Abrufen der Namen der Textdateien zum Laden aus dem Common-Verzeichnis des Kliententerminals
  string filenames[];
  if(FileSelectDialog("Wählen einer CSV-Date, die in einer Tabelle gespeichert werden soll"NULL,
                      "Textdateien (*.csv)|*.csv",
                      FSD_WRITE_FILE|FSD_COMMON_FOLDERfilenames"data.csv")>0)
   {
    //--- Anzeige der Namen von jeder gewählten Datei
    if(ArraySize(filenames)==1)
      csv_filename=filenames[0];
    else
     {
      Print("Unbekannter Fehler während der Dateiauswahl. Fehlernummer: " GetLastError());
      return;
     }
   }
  else
   {
    Print("Keine CSV-Datei ausgewählt");
    return;
   }
//--- Erstellen oder Öffnen einer Datenbank
  string db_filename="test.sqlite";
  int db=DatabaseOpen(db_filenameDATABASE_OPEN_READWRITE|DATABASE_OPEN_CREATE);
//--- Prüfung, ob Testtabelle existiert
  if(DatabaseTableExists(db"TEST"))
   {
    //--- entfernen der Tabelle TEST
    if(!DatabaseExecute(db"TABELLE TEST LÖSCHEN, WENN VORHANDEN"))
     {
      Print("Löschen der Tabelle TEST ist fehlgeschlagen mit der Fehlernummer "GetLastError());
      DatabaseClose(db);
      return;
     }
   }
  //--- Einträge aus der Datei in die Tabelle TEST importieren
  long imported=DatabaseImport(db"TEST"csv_filenameDATABASE_IMPORT_HEADER|DATABASE_IMPORT_COMMON_FOLDER|DATABASE_IMPORT_APPEND";"0NULL);
  if(imported>0)
   {
    Print(imported," Zeilen in die Tabelle TEST importiert");
    DatabasePrint(db,"SELECT * FROM TEST",DATABASE_PRINT_NO_INDEX);
   }
  else
    {
     Print("DatabaseImport() ist fehlgeschlagen. Error ",GetLastError());
    }
//--- Schließen der Datenbankdatei und Informieren darüber
  DatabaseClose(db);
  PrintFormat("Database: %s wurde geschlossen"db_filename);
 }

 

Siehe auch

DatabaseOpen, DatabasePrint