Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

ÖNEMLİ AÇIKLAMA: MUTLAKA OKUYUNUZ!

Gönderen Konu: ADOCommand Kontrolü ve _RecordSet Tipi  (Okunma sayısı 1563 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Fatih

  • Emekli Yönetici
  • *****
  • İleti: 2.217
  • Rep: +43/-10
  • Cinsiyet: Bay
    • Delphi Dünyası
ADOCommand Kontrolü ve _RecordSet Tipi
« : 16 Aralık 2006 17:02:18 »
Gönderen: Memik YANIK

Biz yazarlar için konu Delphi ve Veritabanı işlemleri olduğunda karşımıza çıkan ilk sorun seçenek bolluğudur. Görece eski DBE bir yanda dururken ADO, Interbase’e özel bileşenler, DBExpress’ler vs.. Interbase veritabanı Delphi ile birlikte verildiği için Interbase hakkında bilgi verilmek istenir. Son birkaç yıldır Interbase yerine ücretsiz dağıtılan FireBird’ün kullanımı yaygınlaştı. Bu nedenle şu aralar yazmayı sürdürdüğüm Turbo Delphi kitabımda FireBird’e ister istemez biraz yer verdim.

Benim asıl üzerinde durmak istediğim Delphi’de ADO adı altında gruplanan kontroller. Birçok kaynakta ADOCommand kontrolünün daha çok geriye bilgi göndermeyen SQL kodlarını işletmek için kullanıldığı işaret edilmektedir. Bazı kaynaklarda ise ADOCommand nesnesinden söz edilirken sanki geriye bilgi göndermediği anlamı çıkarılabilinecek cümleler bulunmaktadır. Gerçekte ADOCommand nesnesi sayesinde istenen SQL kodu işletilebilir.

Bu SQL kodunun içinde SELECT gibi deyimin olmasına ADOCommand’ın bir itirazı yoktur. Çünkü TADOCommand sınıfının Execute metodu geriye “_RecordSet” tipinde bilgi göndermektedir. Delphi üzerine yazılmış kitaplarında ve Web sitelerinde “_RecordSet” tipinden söz edildiğine şimdiye kadar rastlamadım.

Bu konuda bilgi vermek için Delphi ile yeni bir proje hazırlayıp forma 4 Edit, ADOConnection ve ADOCommand nesnesi yerleştirdim. ADOConnection nesnesinin ConnectionString özelliğini aşağıdaki gibi ayarlayıp veritabanına bağlandım.

Kod: [Seç]
procedure TForm1.FormCreate(Sender: TObject);
Var
  Segment1, Segment2 : String;
  Segment3,  Segment4 : String;
  Segment5,  Segment6 : String;
  Segment7,  Segment8 : String;
  Str : String;
begin
  Segment1 := 'Provider=SQLOLEDB.1;';
  Segment2 := 'Persist Security Info=True;';
  Segment3 := 'User ID=sa;';
  Segment4 := 'Password=12345678;';
  Segment5 := 'workstation id=BILGISAYAR3;';
  Segment6 := 'data source=SERVER;';
  Segment7 := 'Packet Size=4096;';
  Segment8 := 'Initial Catalog=Cari;';
  Str := Segment1 + Segment2 + Segment3 + Segment4 +
    Segment5 + Segment6 +Segment7 +Segment8 ;
   ADOCOnnection1.ConnectionString := Str;
   ADOConnection1.Open;
end;

ADOConnection nesnesi ile bağlandığım “Cari” adlı veritabanında “Firmalar” adında ve String tipinde 4 alana sahip bir tablo bulunmaktadır. Devamında bu koda ekleme yapıp ADOConnection nesnesinin Connection ve CommandText özelliğini aşağıdaki gibi ayarladım.

Kod: [Seç]
procedure TForm1.FormCreate(Sender: TObject);
Var
  Segment1, Segment2 : String;
  Segment3,  Segment4 : String;
  Segment5,  Segment6 : String;
  Segment7,  Segment8 : String;
  Str : String;
  Komut_metni : String;
begin
  Segment1 := 'Provider=SQLOLEDB.1;';
  Segment2 := 'Persist Security Info=True;';
  Segment3 := 'User ID=sa;';
  Segment4 := 'Password=12345678;';
  Segment5 := 'workstation id=BILGISAYAR3;';
  Segment6 := 'data source=SERVER;';
  Segment7 := 'Packet Size=4096;';
  Segment8 := 'Initial Catalog=Cari;';
  Str := Segment1 + Segment2 + Segment3 + Segment4 +
    Segment5 + Segment6 +Segment7 +Segment8 ;
   ADOCOnnection1.ConnectionString := Str;
   ADOConnection1.Open;
   Komut_metni := 'SELECT * FROM Firmalar';
   ADOCommand1.CommandText := Komut_metni;
   ADOCommand1.Connection := ADOConnection1;
end;

Buraya kadar veritabanına bağlandık ve veritabanından bilgi çekecek SQL kodunu hazırladık. Tabii ki burada ADOTable, ADOQuery ve ADODataSet kullanılarak bu işlem daha kolay yapılabilinirdi. Buradaki amacım ADOCommand nesnesi olduğunu tekrar hatırlatıp forma 4 Edit yerleştirip bu koda eklemeler yaptım. Bu sayede proje çalıştırıldığında ekrana tablodaki ilk kaydın içeriği gelir. Gerisini size bırakıyorum.

Kod: [Seç]
procedure TForm1.FormCreate(Sender: TObject);
Var
  Segment1, Segment2 : String;
  Segment3,  Segment4 : String;
  Segment5,  Segment6 : String;
  Segment7,  Segment8 : String;
  Str : String;
  Komut_metni : String;
  Kayit_set : _RecordSet;
begin
  Segment1 := 'Provider=SQLOLEDB.1;';
  Segment2 := 'Persist Security Info=True;';
  Segment3 := 'User ID=sa;';
  Segment4 := 'Password=12345678;';
  Segment5 := 'workstation id=BILGISAYAR3;';
  Segment6 := 'data source=SERVER;';
  Segment7 := 'Packet Size=4096;';
  Segment8 := 'Initial Catalog=Cari;';
  Str := Segment1 + Segment2 + Segment3 + Segment4 +
    Segment5 + Segment6 +Segment7 +Segment8 ;
   ADOCOnnection1.ConnectionString := Str;
   ADOConnection1.Open;
   Komut_metni := 'SELECT * FROM Firmalar';
   ADOCommand1.CommandText := Komut_metni;
   ADOCommand1.Connection := ADOConnection1;
   Kayit_set := ADOCommand1.Execute;
   Edit1.Text := Kayit_set.Fields[0].Value;
   Edit2.Text := Kayit_set.Fields[1].Value;
   Edit3.Text := Kayit_set.Fields[2].Value;
   Edit4.Text := Kayit_set.Fields[3].Value;
end;
Malulen emekli programcı / yazar. Bildiklerini unutmakta olduğundan size cevap veremez.

Çevrimdışı Kocaturk

  • Administrator
  • *****
  • İleti: 2.474
  • Rep: +56/-5
  • Cinsiyet: Bay
    • Delphi Dünyası
Ynt: ADOCommand Kontrolü ve _RecordSet Tipi
« Yanıtla #1 : 18 Aralık 2006 03:22:48 »
Fatih bunun bir alıntı olduğunu başlığındanmı anlıycaz yoksa bu değerli yazarımız siteye üyemi oldu :):)

Çevrimdışı Fatih

  • Emekli Yönetici
  • *****
  • İleti: 2.217
  • Rep: +43/-10
  • Cinsiyet: Bay
    • Delphi Dünyası
Ynt: ADOCommand Kontrolü ve _RecordSet Tipi
« Yanıtla #2 : 18 Aralık 2006 12:53:30 »
Memik Bey sitemize üye. Kendisinin isteği ve izni üzerine dökümanları ekliyorum
Malulen emekli programcı / yazar. Bildiklerini unutmakta olduğundan size cevap veremez.

Çevrimdışı Kocaturk

  • Administrator
  • *****
  • İleti: 2.474
  • Rep: +56/-5
  • Cinsiyet: Bay
    • Delphi Dünyası
Ynt: ADOCommand Kontrolü ve _RecordSet Tipi
« Yanıtla #3 : 18 Aralık 2006 13:37:12 »
anlıyorum buna sevindim umarım üyeler için hayırlı olur.