ADOCommand Kontrolü ve _RecordSet Tipi

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
memiky
Üye
Mesajlar: 116
Kayıt: 17 Kas 2004 01:52
İletişim:

ADOCommand Kontrolü ve _RecordSet Tipi

Mesaj gönderen memiky »

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: Tümünü 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: Tümünü 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: Tümünü 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;
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Verdiğiniz güzel ve faydalı bilgiler için teşekkürler. Bunlara ek olarak kendi kullandığım bir başka teknikten bahsetmek istiyorum. SQL Server'da uygulaması çalışan (muhtemelen diğerlerinde de çalışır) bir örnek:

Kod: Tümünü 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;
 //////////////////////////
   ADOQuery1.RecordSet:=ADOConnection1.Execute('SELECT * FROM Firmalar');
end;
İşlev olarak aynı işi gören başka bir uygulama. İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla