SQL Server-DTS(Data Transformation Services)

// 15 Mayıs 2009 // Delphi, Programlama, Veritabanı

Hep Delphi hep Delphi olmasın dedim, Delphi + SQL Server lı bir makale yazayım. :) Bu makalem daha bir renkli olacak galiba çünkü dosya upload etmenin yolunu buldum sanırım.En azından deneyeceğim , Screen capture’lı falan anlatacağım.Daha akılda kalıcı olur.Bu makalemizde SQL Server’ın çok akıllı bir servisinden yani DTS’den bahsetmek istiyorum.DTS(Data Transformation Services) SQL Serverı kullanan pek çok programcı arkadaşımızın SQL Server’dan herhangi bir başka kaynağa, yada herhangi bir başka kaynaktan SQL Server’a veri aktarma yollarından bir tanesi ancak en hızlısı. İnanılmaz bir hızda veri aktarımı yapabiliyor.Ben hala şaşırıyorum bu duruma ya neyse. Bulk Insert tabir edilen aktarma metodunu kullanıyor. Şimdi burasının formatını bozmamak adına (ne de olsa bir Delphi blog’undayız) bu DTS olayını biraz Delphi’ce anlatacağım. Yani Delphi’den DTS paketi çalıştırmayı anlatacağım kısaca. DTS paketi ise SQL Server üzerinde sihirbaz yardımı ile tasarlanan bir aktarım işlevinin SQL Server üzerine bir dosya gibi saklanmasıdır. Gelin bunu grafiklerle adım adım anlatalım.

dts_1

Yukarıdaki resimde DTS sihirbazını nasıl başlatacağımızı görüyoruz.Aslında menüde görünen Export yada Import’un bir anlamı yok.Her ikisinden birisini seçebilirsiniz.Şimdi sihirbazda adım adım ilerleyelim.

dts_2

Size Import yada Export seçmenizin bir anlamının olmadığını söylemiştim.Bunu söylememdeki amaç ikisininde yukarıdaki ekranı açıyor olmasıydı.Sadece DataSource değişiyor.Bu ekranda veri kaynağını seçiyorsunuz.Biz örneğimizde Northwind database’ini kullanacağız siz istediğiniz database’i kullanabilirsiniz.Bir sonraki ekranımız hedef bilgilerini içerecek.Biz excel’e aktarmak istiyoruz.O yüzden görünümü aşağıdaki gibi yapacağız.

dts_3

Bu aşamadan sonra bir sonraki adıma geçiyoruz.

dts_4

Yukarıdaki ekranda bize iki seçenek sunulmuş durumda.Varsayılan olarak gelen seçenk ile ilerleyeceğiz ancak diğerini de kısaca izah etmek isterim.Diğer seçeneği işaretlediğinizde ve ileri dediğinizde aktarım için kullanılacak SQL cümlesini girebileceğiniz bir alanla ve daha da güzeli bir Query Builder ile karşılaşacaksınız.Ancak biz varolan serçenek olan “Copy table(s) and wiev(s) from the source database” seçeneği ile devam ediyor ve ileri tuşuna basıyoruz.

dts_5

Yukarıdaki ekranda ise aktarım yapmak istediğimiz tabloların yanındaki kutucukları işaretliyoruz.

dts_6

İşte en önemli ekranımız(bu makale için en önemli ekran). Bu ekrandaki en önemli kısım Save DTS Package yazan yerdir.Varsayılan olarak işaretsiz gelir.Biz işaretliyoruz.Bu ekrandaki diğer kısımların kendilerini ifade ettiklerini düşünüp daha fazla anlatmayı düşünmüyorum.İlerliyoruz…

dts_7

Yukarıdaki ekranda en önemli kısım ise kırmızı çerçeve içerisindeki DTS adı bölümü.DTS paketimizi çalıştırırken bu ismi kullanacağız.

dts_8

Oluşturduğumuz paketi yukarıda görüyorsunuz.Bu aşamadan sonra Delphi’ye geçiyoruz.Pek çok programcının hala Delphi 7 kullanıyor olmasından ötürü bende Delphi 7 üzerinden anlatmayı tercih edeceğim.Delphi 7 yi açtıktan sonra Project Menüsünden Import Type Library komutunu veriyoruz.Açılır listede “Microsoft DTSPackage Object Library (Version 2.0) olanı seçip Create Unit button’una basıyoruz.Bu işlem muhtemelen \Imports klasörünüzün altında DTS_TLB.pas isimli bir dosya oluşturacaktır.Bu dosyayı uses DTS_TLB; ile projenize ekleyin.Bu aşamadan sonra işimiz kod kısmına geldi.Kodumuz ise şu şekilde olacak:

procedure TForm1.Button1Click(Sender: TObject);
var
  pkg : Package;
  ov  : OleVariant;
  EmptyStr : OleVariant;
  PackageName : String;
begin
  EmptyStr := WideString('');
  PackageName := 'Delphiden_Cagiracagimiz_DTS_Paketi';
  pkg := coPackage.Create;
  pkg.LoadFromSQLServer('(local)',
                         'sa',
                         EmptyStr,
                         0,
                         EmptyStr,
                         EmptyStr,
                         EmptyStr,
                         WideString(PackageName),
                         ov);

  pkg.Execute;
  pkg.UnInitialize;
end;

LoadFromSQLServer isimli metod adından da anlaşılabileceği üzere SQL Server üzerinde kayıtlı olan bir DTS paketini yükleme işlevini görür. Paremetreleri, ServerName, ServerUserName, ServerPassword, Flags, PackagePassword, PackageGUID, PackageVersionGUID, PackageName ve yazmakta bile zorlanacağım için yazmadığım son garip parametre. Gerçi sizde Delphi içerisinde fonksiyon üzerinde iken Ctrl + Shift + Space tuşuna basarsanız parametreleri ve tiplerini görebilirsiniz.

İşte bu kadar, aslında direkt kodu da verebilirdim zaten SQL Server kullananlar DTS’in nasıl yapılacağını biliyorlardır diye de düşünebilirdim ama bizim burası her bilgi düzeyinden arkadaşımıza açık olduğu için bilen arkadaşlarımın affına sığınarak biraz fazla detaylı anlatmak durumunda kaldım. Umarım işinize yarar.

Saygılar,sevgiler..

“SQL Server-DTS(Data Transformation Services)” için 7 Yorum

  1. Zafer Çelenk diyor ki:

    Merhaba,

    Toplu veri girişi (Bulk Insert) metodunu ilk gördüğümde bende oldukça şaşırmıştım. Diğer kopyalama yöntemlerine göre gerçekten çok daha hızlı, sanki veriyi blok blok alıp diğer tarafa yapıştırıyor gibi arkasındaki yapıyı bende merak ediyorum.

    Makalenize gelince bence çok güzel olmuş elinize sağlık, nacizane benimde eklemek istediğim bir husus var. Delphi ile toplu veri girişi (Bulk Insert) kullanmak için illaki bir DTS paketine ihtiyacınız yok, bunu Delphi içinden SQL komutlarıylada gerçekleştirebilirsiniz. Hatta ben yazdığım küçük bir sınıf ile bu işlemi yapıyorum.Büyük verileri kopyalamakla uğraşan arkadaşların bu konuyu incelemelerini tavsiye ederim.

  2. Tuğrul HELVACI diyor ki:

    Merhaba, beğenmenize sevindim. Tabii bulk copy’nin birden fazla yöntemi var. BULK INSERT komutu, yada bcp komut satırı yardımcısı vb. Diğer kullanımlar mesela INSERT INTO … SELECT * FROM … gibi bulk copy gibi çalışmıyor.

    Bu arada Selman ile görüşüyor iseniz selamlarımı iletirseniz sevinirim.

  3. Zafer Çelenk diyor ki:

    Merhaba,
    Doğrusu beni hatırlayacağınızı düşünmediğim için bu yönde bir mesaj yazmaktan vazgeçmiştim ama yanıldığıma sevindim.

    Selmana selamınızı iletirim elbet, mayıs ayında askerliği sona erdi, şimdi evde keyif yapıyor :)

    Ben Ankara’ya taşındım, olur ya yolunuz bu tarafa düşerse sizi mutlaka ağırlamak, misafir etmek isterim. Sağlıcakla kalın, iyi çalışmalar.

  4. sadettinpolat diyor ki:

    ben araya girip cikicam hemen :)
    zafer , ankara da ikamet edenler icin bi etkinlik vs. duzenlemek lazim. tugrul hocayi da konuk oyuncu olarak cagiririz.

  5. Tuğrul HELVACI diyor ki:

    Zafer’e: Hafızam eskisi gibi güçlü değil ama yine de fena sayılmaz :) Selman’ın dinlenmek hakkıdır tabii biraz, askerlik dönüşü hayata adaptasyon zordur hakikatten. Nadiren de olsa Ankaraya geliyorum, geldiğim zaman ziyaret etmekten memnuniyet duyarım, teşekkürler zafer.

    Sadettin’e: İmkanım olursa başımla beraber üstad ;)

  6. nagihan diyor ki:

    var
    pkg : Package;
    ov : OleVariant;
    EmptyStr : OleVariant;
    PackageName : String;
    begin
    EmptyStr := WideString(”);
    PackageName := ‘Delphiden_Cagiracagimiz_DTS_Paketi’;
    pkg := CoPackage.Create;
    pkg.LoadFromSQLServer(‘(local)’,
    ‘(MKKUL)’,
    ‘mk’,
    0,
    EmptyStr,
    EmptyStr,
    EmptyStr,
    WideString(PackageName),
    ov);

    pkg.Execute;
    pkg.UnInitialize;

    end;

    ben bunu yaptıgımda bana
    ‘object or class type required’
    hatası verıyor yardım edersenız sewınırım

Tuğrul HELVACI için yorum yazın