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.
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
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;
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;