DatabaseExport

Bir tablo veya SQL isteği yürütme sonucunu bir CSV dosyasına aktarır. Dosya UTF-8 kodlamasında oluşturulur.

long  DatabaseExport(
   int           database,           // DatabaseOpen'da elde edilen veritabanı tanıtıcı değeri
   const string  table_or_sql,       // tablo adı veya SQL isteği
   const string  filename,           // veri dışa aktarımı için CSV dosyası adı
   uint          flags,              // bayrak kombinasyonu
   const string  separator           // CSV dosyasındaki veri ayırıcı
   );

Parametreler

database

[in] DatabaseOpen()'da elde edilen veritabanı tanıtıcı değeri

table_or_sql

[in]   Sonuçları belirtilen dosyaya aktarılacak olan tablonun adı veya SQL isteğinin metni.

filename

[in]  Veri dışa aktarımı için dosya adı. Yol, MQL5\Files klasörüne göre ayarlanır.

flags

DATABASE_EXPORT_HEADER                 – alan adlarına sahip bir dizge görüntüle

separator

[in]  Veri ayırıcı. NULL belirtilirse, ayırıcı olarak '\t' tablolama karakteri kullanılır.  Boş bir dizge "" geçerli bir ayırıcı olarak kabul edilir, ancak elde edilen CSV dosyası tablo olarak okunamaz - bir dizge kümesi olarak kabul edilir.

 

Geri dönüş değeri

Dışa aktarılan girdilerin sayısını veya bir hata durumunda negatif bir değer geri döndürür. Hata kodunu almak için GetLastError() kullanın, olası yanıtlar şunlardır:

  • ERR_INTERNAL_ERROR (4001)                       – kritik çalışma zamanı hatası;
  • ERR_INVALID_PARAMETER (4003)                  – veritabanı dosyasının yolu boş bir dizge içeriyor ya da uyumsuz bir bayrak kombinasyonu ayarlanmış;
  • ERR_NOT_ENOUGH_MEMORY (4004)              - yetersiz bellek;
  • ERR_FUNCTION_NOT_ALLOWED(4014)           – belirtilen veri yoluna izin verilmemektedir;
  • ERR_PROGRAM_STOPPED(4022)                    – işlem iptal edildi (MQL programı durdu);
  • ERR_WRONG_FILENAME (5002)                     - geçersiz dosya adı;
  • ERR_TOO_LONG_FILENAME (5003)                 - dosyanın mutlak yolu maksimum uzunluğu aşıyor;
  • ERR_CANNOT_OPEN_FILE(5004)                    – dosya yazmak için açılamıyor;
  • ERR_FILE_WRITEERROR(5026)                      – dosyaya yazılamıyor;
  • ERR_DATABASE_INTERNAL (5120)                 – dahili veritabanı hatası;
  • ERR_DATABASE_INVALID_HANDLE (5121)      - geçersiz veritabanı tanıtıcı değeri;
  • ERR_DATABASE_QUERY_PREPARE(5125)        – istek oluşturma hatası;
  • ERR_DATABASE_QUERY_NOT_READONLY       – salt okunur isteğe izin verilmektedir.

 

Not

Eğer istek sonuçları dışa aktarılırsa, SQL isteği "SELECT" veya "select" ile başlamalıdır. Başka bir deyişle, SQL isteği veritabanı durumunu değiştiremez, aksi takdirde DatabaseExport() bir hata ile başarısız olur.

Veritabanı dizge değerleri, dönüşüm karakterini ('\r' veya '\r\n') ve ek olarak separator parametresinde ayarlanan değer ayırıcı karakterini içerebilir. Bu durumda, 'flags' parametresinde DATABASE_EXPORT_QUOTED_STRINGS bayrağını kullandığınızdan emin olun. Bu bayrak varsa, görüntülenen tüm dizgeler çift tırnak içine alınır. Eğer dizge zaten çift tırnak içerisindeyse, bu çift tırnaklar ikişer adet haline gelir.

 

ENUM_DATABASE_EXPORT_FLAGS

Kimlik

Açıklama

DATABASE_EXPORT_HEADER

İlk dizgede tablo alanlarının adlarını görüntüle

DATABASE_EXPORT_INDEX

Dizgelerin indekslerini görüntüle

DATABASE_EXPORT_NO_BOM

Dosyanın başına BOM işaretini ekleme (varsayılan olarak BOM işareti eklenir)

DATABASE_EXPORT_CRLF

Dizge sonları için CRLF'ler kullan (varsayılan olarak dizge sonları için LF'ler kullanılır)

DATABASE_EXPORT_APPEND

Verileri mevcut dosyanın sonuna ekle (varsayılan olarak dosyanın üzerine yazılır)

DATABASE_EXPORT_QUOTED_STRINGS

Dizge değerlerini çift tırnak içerisinde görüntüle

DATABASE_EXPORT_COMMON_FOLDER

csv dosyası, tüm müşteri terminallerinin ortak klasöründe (\Terminal\Common\File) oluşturulur

Örnek:

input int InpRates=100;
//+------------------------------------------------------------------+
//| Komut dosyası başlatma fonksiyonu                                |
//+------------------------------------------------------------------+
void OnStart()
 {
  MqlRates rates[];
//--- çubukları almadan önce başlangıç zamanını hatırla
  ulong start=GetMicrosecondCount();
//--- H1 zaman diliminde son 100 çubuğu iste
  if(CopyRates(Symbol(), PERIOD_H1,1,InpRates,rates)<InpRates)
   {
    Print("CopyRates() başarısız oldu, hata ",GetLastError());
    return;
   }
  else
   {
    //--- kaç tane çubuk alındı ve bunları almak için ne kadar zaman gerekti
    PrintFormat("%s: CopyRates %d çubuk aldı (%d ms içerisinde)",
                _Symbol,ArraySize(rates),(GetMicrosecondCount()-start)/1000);
   }
//--- veritabanını depolamak için dosya adını ayarla
  string filename=_Symbol+"_"+EnumToString(PERIOD_H1)+"_"+TimeToString(TimeCurrent())+".sqlite";
  StringReplace(filename,":","-"); // dosya adlarında ":" karakteri kullanılamaz
//--- ortak terminal klasöründe veritabanını aç/oluştur
  int db=DatabaseOpen(filename,DATABASE_OPEN_READWRITE|DATABASE_OPEN_CREATE|DATABASE_OPEN_COMMON);
  if(db==INVALID_HANDLE)
   {
    Print(filename," veritabanının açılışı başarısız oldu, hata ",GetLastError());
    return;
   }
  else
    Print(filename," veritabanı başarıyla açıldı");
 
//--- Çubuklar tablosunun mevcut olup olmadığını kontrol et
  if(DatabaseTableExists(db,"Çubuklar"))
   {
    //--- Çubuklar tablosunu kaldır
    if(!DatabaseExecute(db,"DROP TABLE IF EXISTS Çubuklar"))
     {
      Print("Çubuklar tablosu kaldırılamadı, hata kodu ",GetLastError());
      DatabaseClose(db);
      return;
     }
   }
//--- Çubuklar tablosunu oluştur
  if(!DatabaseExecute(db,"CREATE TABLE Çubuklar("
                      "Sembol             CHAR(10),"
                      "Zaman               INT NOT NULL,"
                      "Açılış               REAL,"
                      "Yüksek               REAL,"
                      "Düşük                REAL,"
                      "Kapanış              REAL,"
                      "Tik_Hacim        INT,"
                      "Spread             INT,"
                      "Gerçek_Hacim        INT);"))
   {
    Print(filename," veritabanında Çubuklar tablosu oluşturulamadı, hata ",GetLastError());
    DatabaseClose(db);
    return;
   }
//--- Çubuklar tablosundaki tüm alanların listesini görüntüle
  if(DatabasePrint(db,"PRAGMA TABLE_INFO(Çubuklar)",0)<0)
   {
    PrintFormat("DatabasePrint(\"PRAGMA TABLE_INFO(Çubuklar)\") başarısız oldu, hata kodu=%d (%d satırında)",GetLastError(),__LINE__);
    DatabaseClose(db);
    return;
   }
//--- Çubuklar tablosuna çubukları eklemek için parametreli istek oluştur
  string sql="INSERT INTO Çubuklar(Sembol,Zaman,Açılış,Yüksek,Düşük,Kapanış,Tik_Hacmi,Spread,Gerçek_Hacim)"
             " VALUES (?1,?2,?3,?4,?5,?6,?7,?8,?9)"// istek parametreleri
  int request=DatabasePrepare(db,sql);
  if(request==INVALID_HANDLE)
   {
    PrintFormat("DatabasePrepare() başarısız oldu, hata=%d",GetLastError());
    Print("SQL isteği: ",sql);
    DatabaseClose(db);
    return;
   }
//--- ilk istek parametresinin değerini ayarla
  DatabaseBind(request,0,_Symbol);
//--- Çubuklar tablosuna çubukları eklemeden önce başlangıç zamanını hatırla
  start=GetMicrosecondCount();
  DatabaseTransactionBegin(db);
  int total=ArraySize(rates);
  bool request_error=false;
  for(int i=0;i<total;i++)
   {
    //--- girdi eklemeden önce kalan parametrelerin değerlerini ayarla
    ResetLastError();
    if(!DatabaseBind(request,1,rates[i].time))
     {
      PrintFormat("DatabaseBind() başarısız oldu, hata=%d",GetLastError());
      PrintFormat("Çubuk=%d çizgi=%d",i+1,__LINE__);
      request_error=true;
      break;
     }
    //--- önceki DatabaseBind() çağrısı başarılı olduysa, sonraki parametreyi ayarla
    if(!request_error &&! DatabaseBind(request,2,rates[i].open))
     {
      PrintFormat("DatabaseBind() başarısız oldu, hata=%d",GetLastError());
      PrintFormat("Çubuk=%d çizgi=%d",i+1,__LINE__);
      request_error=true;
      break;
     }
    if(!request_error &&! DatabaseBind(request,3,rates[i].high))
     {
      PrintFormat("DatabaseBind() başarısız oldu, hata=%d",GetLastError());
      PrintFormat("Çubuk=%d çizgi=%d",i+1,__LINE__);
      request_error=true;
      break;
     }
    if(!request_error &&! DatabaseBind(request,4,rates[i].low))
     {
      PrintFormat("DatabaseBind() başarısız oldu, hata=%d",GetLastError());
      PrintFormat("Çubuk=%d çizgi=%d",i+1,__LINE__);
      request_error=true;
      break;
     }
    if(!request_error &&! DatabaseBind(request,5,rates[i].close))
     {
      PrintFormat("DatabaseBind() başarısız oldu, hata=%d",GetLastError());
      PrintFormat("Çubuk=%d çizgi=%d",i+1,__LINE__);
      request_error=true;
      break;
     }
    if(!request_error &&! DatabaseBind(request,6,rates[i].tick_volume))
     {
      PrintFormat("DatabaseBind() başarısız oldu, hata=%d",GetLastError());
      PrintFormat("Çubuk=%d çizgi=%d",i+1,__LINE__);
      request_error=true;
      break;
     }
    if(!request_error &&! DatabaseBind(request,7,rates[i].spread))
     {
      PrintFormat("DatabaseBind() başarısız oldu, hata=%d",GetLastError());
      PrintFormat("Çubuk=%d çizgi=%d",i+1,__LINE__);
      request_error=true;
      break;
     }
    if(!request_error &&! DatabaseBind(request,8,rates[i].real_volume))
     {
      PrintFormat("DatabaseBind() başarısız oldu, hata=%d",GetLastError());
      PrintFormat("Çubuk=%d çizgi=%d",i+1,__LINE__);
      request_error=true;
      break;
     }
 
    //--- girdiyi eklemek için istek yürüt ve bir hata olup olmadığını kontrol et
    if(!request_error &&! DatabaseRead(request)&&(GetLastError()!=ERR_DATABASE_NO_MORE_DATA))
     {
      PrintFormat("DatabaseRead() başarısız oldu, hata=%d",GetLastError());
      DatabaseFinalize(request);
      request_error=true;
      break;
     }
    //--- sonraki parametre güncellemesinden önce isteği sıfırla
    if(!request_error &&! DatabaseReset(request))
     {
      PrintFormat("DatabaseReset() başarısız oldu, hata=%d",GetLastError());
      DatabaseFinalize(request);
      request_error=true;
      break;
     }
   } //--- tüm çubuklardan geçiş tamamlandı
 
//--- durum
  if(request_error)
   {
    PrintFormat("Çubuklar tablosuna %d çubuk eklenemedi",ArraySize(rates));
    DatabaseTransactionRollback(db);
    DatabaseClose(db);
    return;
   }
  else
   {
    DatabaseTransactionCommit(db);
    PrintFormat("Çubuklar tablosuna %d çubuk eklendi (%d ms içerisinde)",
                ArraySize(rates),(GetMicrosecondCount()-start)/1000);
   }
//--- Çubuklar tablosunu csv dosyasına kaydet
  string csv_filename=Symbol()+".csv";
  long saved=DatabaseExport(db,"SELECT * FROM Çubuklar",csv_filename,DATABASE_EXPORT_HEADER|DATABASE_EXPORT_INDEX|DATABASE_EXPORT_COMMON_FOLDER,";");
  if(saved>0)
    Print("Çubuklar tablosu ",Symbol(),".csv dosyasına kaydedildi");
  else
    Print("DatabaseExport() başarısız oldu. Hata ",GetLastError());
//--- veritabanı dosyasını kapat ve bunu rapor et
  DatabaseClose(db);
  PrintFormat("%s veritabanı kapatıldı",filename);
 }

Ayrıca bakınız

DatabasePrint, DatabaseImport