AdoConnection Ve AdoDataset

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
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

AdoConnection Ve AdoDataset

Mesaj gönderen Fatih! »

Öncelikle SQL Server öğrenmeden önce Paradox,Firebird veya Access yoluyla Veri erişim bileşenlerinin mantığını olaylarını bildiğinizi varsayıyorum. Bilmeyenler Firebird kısmındaki bileşen özelliklerine bakabilir. Örneğin Şimdi anlatacağımız ADOConnection bileşeni interbase sekmesinde IBTransaction ve IBDatabase bileşenlerinin özelliklerini almıştır. ADODataset içinse IBQuerynin kullanımına bakabilirsiniz. Ayrıca ADO yu fazla kullanmadığımdan her özelliğine değinmeyebilirim. Bilen arkadaşlar ekleme yaparsa daha faydalı bir makale olacağına inanıyorum.

Adım adım bir uygulama geliştirelim. Formunuza birer ADOConnection, ADODataset, DbGrid, DataSource Ve DbNavigator bileşeni ekleyin. DataSourcenin DataSet özelliğine Forma eklediğiniz ADODataset bileşenini gösterin. Dbgrid ve dbnavigatorun DataSource özelliğini ayarlayın.

AdoConnection bileşeni Veritabanına bağlanmamızı sağlıyor. Bu bileşeni kullanmadan direk ADODataset bileşenini kullanarakta veritabanına bağlanabilriz.

ADOconnection ın ConnectionString öelliğine tıklayın karşınıza çıkan pencede Use Connection String kutucuğunu işaretleyip Build Buttonuna tıklayın karşınıza çıkan pencereden Provider tabında Microsoft OLE DB Provider for SQL Server'ı seçin Connection tabına geçip aşağıdaki ayarları yapın. LoginPromp özelliğini false yapın.

Resim

LoginPromp özelliğini false yapın. bileşenin Connected özelliğini True yaptığınızda veritabanına bağlanmış olursunuz..

Transaction İşlemleri

Sanırım transaction konusunu en iyi tanımlayabileceğim örnek banka uygulamaları olacaktır. Hesabınızdan, başka bir hesaba para transferi yaptığımızı düşünelim. Bunu internet üzerinden, şubeden veya telefon bankacılığı yöntemlerinden herhangi birini kullanarak yapabiliriz. İşlem adımları şu şekilde olacaktır.

- Hesabınızda transfer etmek istediğiniz kadar para mevcut olup olmadığının kontrolü.
- Hesabınız müsait ise paranın sizin bakiyenizden düşülmesi.
- Karşı tarafın bakiyesine transfer ettiğiniz paranın eklenmesi
- İşlemin sonlanması.

Bu adımlardan herhangi birinde bir sorun ortaya çıktığını varsayalım. Örneğin siz işleminizi yaptınız, arka planda çalışan program bakiye kontrolünüzü yaptı, hesabınızdan transfer etmek istediğiniz tutarı düştü ve işte tam bu sırada herhangi bir problem yaşandı. Banka sistemleri kilitlendi, elektrikler kesildi, vs. Bu durumda sizin hesabınızdan transfer etmek istediğiniz tutar düşüldü lakin henüz karşı tarafın hesabına geçemedi. Ortada kaynağı belli olmayan, sahipsiz bir para var.

İşte bu tip durumlarda işlemlerin tamamlanıp tamamlanmama durumunu kontrol eden, tamamlanmamış işlemlerde herşeyi en başa yada işlemin belli adımına kadar geri alan bir yapıya ihtiyacımız vardır. Ve biz bu yapıyı transaction kullanarak oluşturacağız. Transaction bir işlem tamamlAnamı kadar ilgili işlem yapılarını kilitleyen bir yapıdan meydana gelir, herhangi bir hata ile karşılaştığı durumda işlemleri geri alır.

Aşağıdaki kodlarla delphiden transaction işlemini delphiden kontrol edebilirsiniz.

Kod: Tümünü seç

 ADOConnection1.BeginTrans; //Transaction İşlemini başlatır

ADOConnection1.CommitTrans; {* Transaction İşlemi başladıktan sonraki

 değişiklikleri veritebanına yansıtıp Transaction İşlemini sona erdirir *}

ADOConnection1.RollbackTrans;  {* Transaction İşlemi başladıktan sonraki

 değişiklikleri iptal edip Transaction İşlemini sona erdirir *}

 if not (ADOConnection1.InTransaction) then {*Transaction İşleminin başlatılıp başlatılmadığını

 kontrol eder. False sonucu çıkarsa Transaction İşleminin başlatılmamış demektir *}

ADOConnection1.BeginTrans; //Transaction İşlemini başlatır  
ADODataset

Formunuza bir ADODataset bileşeni ekleyin. Bileşenin Connection özelliğine forma eklediğiniz AdConnection bileşenin gösterin. ADODataset bileşeni hem ADOtable hemde ADOQuery bileşeni olarak kullanılabilir. Bu bileşenle veritabanındaki tablolara ulaşıyoruz. Bileşenin AdoTable gibi davranmasını isterseniz CommandType özelliğini cmdTable olarak, AdoQuery olarak kullanmak isterseniz CommandType özelliğini cmdText olarak ayarlayın.

adoTable gibi kullandıysanız CommandText özelliğinden listelenen bir tabloyu seçin. ADOQuery gibi kullanıyorsanız aynı özelliğe tabloyu listeleyecek SQL cümlesini yazın.

Avtive özelliğini true yaptığınızda tabloya bağlanmış olacaksınız.



Özellikleri

LockType

Bu özellik özellikle çoklu kullanıcı sistemlerde işinize yarayacaktır. Bir kullanıcı herhangi bir kaydı değiştirirken diğer kullanıcının bu kayıt üzerinde işlem yapmasını önleyebilirsiniz. Buna kaydı kilitleme diyebiliriz. Bu özellilk aşağıdaki değerleri alabilir.

LtOptimistic > Kayıt değiştirilme işlemine girdiği anda kilitlenir.

LtPessimistic > Kayıt değiştirilmeye başlandığı andan Update işlemi bitene kadar kilitlenir.

LtRead Only > Hiçbir Kayıt Değiştirilemez.



Bde ve Interbase bileşenlerinde parametrelere Params Ado’da bu özelliğe Parameters deyimi ile Ulaşılır. ADODataSet1.Parameters gibi

Örnek

Kod: Tümünü seç

 ADODataSet1.Active:=False;

ADODataSet1.CommandText:='select * from TBL_DENE Where URUNADI=:URUNPARAM';

ADODataSet1.Parameters[0].Value:='kitap';

ADODataSet1.Active:=True; 

SQL Server' da Tarih alanlarını sorgularken şunıu bilmeniz gerekir. DateTimePicker vb. bileşenlerde Gün/Ay/Yıl Şeklinde Tarihi gösterir. ancak SQL Server Ay/Gün/Yıl Tarih formatını kullanır. bu sebele Tarihsel bir alanda sorgulama yapmadan önce FormatDateTime fonksiyonu ile değeri SQL Server Tarih formatına çevirmeliyiz. Aşağıdaki örnekleri inceleyebilirsiniz.

Parametre Kullanarak

Kod: Tümünü seç

 ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT  * FROM    tbl_dene  where SATISTARIHI=:SATISPARAM');
ADOQuery1.Parameters[0].Value:=FormatDateTime('mm-dd-yyyy',DateTimePicker1.Date);
ADOQuery1.Open; 
Parametre Kullanmadan

Kod: Tümünü seç

 ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT  * FROM    tbl_dene  where SATISTARIHI='+#39+FormatDateTime('mm-dd-yyyy',DateTimePicker 1.Date)+#39);
ADOQuery1.Open; 
En son Fatih! tarafından 30 Haz 2008 12:53 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Clipper
Üye
Mesajlar: 9
Kayıt: 18 Tem 2005 06:19

Mesaj gönderen Clipper »

Yazdığınız detaylı açıklama için teşekkürler. Ama yazılarınız arasına eklemiş olduğunuz resim görünmüyor. Bu yüzden Connection tab ında gerekli ayarları yapamadım. Delphi ile program yazmaya uzun zaman ara vermiştim. O resmi düzeltirseniz açıklamalarınız benim için çok yararlı olacak.

Şimdiden teşekkürler
Clipper
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

resim konusunda ben masumum gönderdiklerimi hala uploaad etmemiş
hepsi adminin suçu :)
buyur yukarıdaki resmin aynısı
Resim
En son Fatih! tarafından 30 Haz 2008 12:51 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
bluefire
Üye
Mesajlar: 29
Kayıt: 02 Ağu 2005 03:32

Mesaj gönderen bluefire »

verdiginiz bilgiler için çok teşekkürler...
bundan sonra data kontrolleri hakkında sizin başınızı ağrıtabilirmiyim acaba...oracle ve SQL hakkında...
bilgi herşeye değer...
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

Rica ederim. bildiğim kadarıyla yardımcı olurum.zaten yardımlaşmak için burdayız.
yakupk
Üye
Mesajlar: 59
Kayıt: 04 Haz 2004 11:22
Konum: Balıkesir
İletişim:

Mesaj gönderen yakupk »

Herkese merhaba,

verdiğiniz bilgiler için çok teşekkür ederim elinize sağlık, bende bir uygulama yaptım fakat kayıtlar arasında ADODataSet1.Recordset.Movenext; ile dolaşamıyorum komut işlemiyor. forumda arattırdım sql serverda pek kullanışlı değil deniyor. fakat tüm kayıtları listbox'a atmak istiyorum movenext veya movefirst kullanmadan nasıl yapabilirim ?
Cevapla