DatabaseImport

Verileri bir dosyadan tabloya aktarır.

long  DatabaseImport(
   int           database,          // DatabaseOpen'da elde edilen veritabanı tanıtıcı değeri
   const string  table,             // veri eklemek için tablo adı
   const string  filename,          // veri aktarmak için dosya adı
   uint          flags,             // bayrak kombinasyonu
   const string  separator,         // veri ayırıcı
   ulong         skip_rows,         // kaç başlangıç dizgesi atlanacak
   const string  skip_comments      // yorumları tanımlayan karakter dizgesi
   );

Parametreler

database

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

table

[in]  Dosyadaki verilerin ekleneceği tablonun adı.

filename

[in]  Veri okumak için CSV dosyası veya ZIP arşivi. Ad, alt dizinler içerebilir ve MQL5\Files klasörüne göre ayarlanır.

flags

[in] ENUM_DATABASE_IMPORT_FLAGS numaralandırmasından bayrak kombinasyonu.

separator

[in]  CSV dosyasındaki veri ayırıcı.

skip_rows

[in]  Dosyadan veri okunurken atlanacak başlangıç dizgesi sayısı.

skip_comments

[in]  Dizgeleri yorum olarak işaretlemek için karakter dizgesi. Bir dizgenin başında skip_comments'ten herhangi bir karakter algılanırsa, böyle bir dizge yorum olarak kabul edilir ve içe aktarılmaz.

Geri dönüş değeri

İçe aktarılan dizgelerin sayısını veya bir hata durumunda -1 geri döndürür. Hata kodunu almak için GetLastError() kullanın, olası yanıtlar şunlardır:

  • ERR_INVALID_PARAMETER (4003)              –  tablo adı belirtilmedi (boş dizge veya NULL);
  • ERR_DATABASE_INTERNAL (5120)              – dahili veritabanı hatası;
  • ERR_DATABASE_INVALID_HANDLE (5121)   - geçersiz veritabanı tanıtıcı değeri.

 

Not

table adında bir tablo yoksa, otomatik olarak oluşturulur. Oluşturulan tablodaki adlar ve alan türleri, dosya verilerine göre otomatik olarak tanımlanır.  

ENUM_DATABASE_IMPORT_FLAGS

Kimlik

Açıklama

DATABASE_IMPORT_HEADER

İlk satırı tablo alanlarının adları olarak içe aktar

DATABASE_IMPORT_CRLF

CRLF'leri dizge sonları olarak kabul et (varsayılan olarak LF'ler dizge sonları olarak kabul edilir)

DATABASE_IMPORT_APPEND

Verileri mevcut tablonun sonuna ekle (varsayılan olarak veriler tablonun üzerine yazılır)

DATABASE_IMPORT_QUOTED_STRINGS

Çift tırnak içerisine alınmış dizge değerlerini içe aktar

DATABASE_IMPORT_COMMON_FOLDER

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

DatabaseExport örneğinde oluşturulan dosyadan tabloyu içe aktarma örneği:

//+------------------------------------------------------------------+
//| Komut dosyası başlatma fonksiyonu                                |
//+------------------------------------------------------------------+
void OnStart()
 {
  string csv_filename;
//--- müşteri terminallerinin ortak klasöründen, içe aktarılacak metin dosyalarının adlarını al
  string filenames[];
  if(FileSelectDialog("Tablosunu oluşturmak için CSV dosyası seçin",NULL,
                      "Metin dosyaları (*.csv)|*.csv",
                      FSD_WRITE_FILE|FSD_COMMON_FOLDER,filenames,"veriler.csv")>0)
   {
    //--- seçilen her dosyanın adını göster
    if(ArraySize(filenames)==1)
      csv_filename=filenames[0];
    else
     {
      Print("Dosya seçilirken bilinmeyen hata. Hata kodu ",GetLastError());
      return;
     }
   }
  else
   {
    Print("CSV dosyası seçilmedi");
    return;
   }
//--- veritabanı oluştur veya aç
  string db_filename="İçeAktarmaTest.sqlite";
  int db=DatabaseOpen(db_filename,DATABASE_OPEN_READWRITE|DATABASE_OPEN_CREATE);
//--- İçeAktarmaTest tablosunun mevcut olup olmadığını kontrol et
  if(DatabaseTableExists(db,"İçeAktarmaTest"))
   {
    //--- İçeAktarmaTest tablosunu kaldır
    if(!DatabaseExecute(db,"DROP TABLE IF EXISTS İçeAktarmaTest"))
     {
      Print("İçeAktarmaTest tablosu kaldırılamadı, hata kodu ",GetLastError());
      DatabaseClose(db);
      return;
     }
   }
  //--- csv dosyasından girdileri İçeAktarmaTest tablosuna içe aktar
  long imported=DatabaseImport(db,"İçeAktarmaTest",csv_filename,DATABASE_IMPORT_HEADER|DATABASE_IMPORT_COMMON_FOLDER|DATABASE_IMPORT_APPEND,";",0,NULL);
  if(imported>0)
   {
    Print(imported," satır İçeAktarmaTest tablosuna içe aktarıldı");
    DatabasePrint(db,"SELECT * FROM İçeAktarmaTest",DATABASE_PRINT_NO_INDEX);
   }
  else
    {
     Print("DatabaseImport() başarısız oldu. Hata ",GetLastError());
    }
//--- veritabanı dosyasını kapat ve bunu rapor et
  DatabaseClose(db);
  PrintFormat("%s veritabanı kapatıldı",db_filename);
 }

 

Ayrıca bakınız

DatabaseOpen, DatabasePrint