BİLİŞİM - BİLGİSAYAR - EĞİTİM
  Recordset-Kayıt dizisi
 

Recordset (Kayıt dizisi)

Veritabanına bağlantıyı oluşturduktan sonra, buradaki tabir yerindeyse ham verileri, kullanılır kayıtlar haline getirmemiz gerekir. Bunu ise ADO’nun Recordset nesnesi sağlar. Kurduğumuz veriyolundan programımıza bilgi gelmesi için .Execute (icra et) metodunu kullanırız; ancak bu komuta icra edeceği bir komut vermemiz gerekir.

Baştan beri ADO ile kullanabileceğimiz veritabanının SQL (sequyel okunur; Structured Query Language/Yapısal Sorgu Dili) uyumlu olması gerektiğini söylüyoruz. Bu dil, verilerin sabit diske yazılması ve okunmasını düzenleyen bir çok veritabanı dilinden sadece biri, fakat en yaygınıdır. Bir veritabanından veri okumak, veri değiştirmek veya eklemek için komutlarımızı bu dille vermek zorundayız.

ASP amacıyla SQL komutlarından çok az kısmını kullanırız; bu bakımdan ASP Tasarımcısı olmak için sınırlı da olsa SQL öğrenmek gerekir.

 

Hızlı SQL Kursu: Select

ASP amaçlı olarak kullanacağımız komut gerçekte sadece SELECT’tir. Fakat hatırlamamız gereken veritabanı ilkeleri var. Bir veritabanı kabaca alanlar (sütunlar) ve bunların içinde yazılı değerler (satırlar) halinde olur; her satır bir elemanın değerleridir; ve Kayıt adını alır.

SELECT                       Bir veritabanından veri seçmeye yarar. SQL Sorgusu da denir. Dört bölümü vardır. Tipik bir SELECT komutu şöyle yazılır:

                                      SELECT alan1, alan2.. FROM tablo WHERE koşul = değer ORDER BY alan1

                                      Seçilecek alanların adı SELECT komutunun ilk bölümünü oluşturur. Bir veritabanında birden fazla tablo bulunabilir; seçimin hangi tabloda yapılacağı FROM bölümünde gösterilir. Kimi zaman bir tablodaki alanda bulunan bütün kayıtları seçmek isteyebiliriz; fakat çoğu zaman seçimin sınırlarını daraltmak için sözgelimi bir alandaki değerlerin vereceğimiz bir koşula uymasını isteyebiliriz. Bu durumda “koşul = değer” testini WHERE bölümünde yaparız. Seçilen değerlerin hangi alandaki kayıtlara göre sıralanmasını istiyorsak, ORDER BY bölümünde bunu belirtelibiliriz. Örnek:

                                      SELECT Adi, Soyadi, TelNo FROM Telefonlar WHERE Alankodu = 0535 ORDER BY Adi

                                      Bu komutla veritabanının Telefonlar isimli tablosundan Adi, soyadi ve TelNo adlı sütunlarındaki kayıtlardan Alankodu sütunundaki değeri “0535” olanları seçmiş oluruz. Bir tablodaki bütün alanların bütün değerlerini seçmek için SELECT komutunu şöyle yazarız:

                                      SELECT * FROM Veri_adi

                                      Buradaki “Veri_adi” kelimelerinin yerine DSN’e verdiğiniz adı (orneğin yukarıdaki örnekte olduğu gibi, “uyeler” kelimesini) yazacaksınız.

SQL’in INSERT, UPDATE ve DELETE komutlarının nasıl kullanıldığını öğrenirseniz, ADO nesnesinin bunlara denk gelen ve aşağıda nasıl kullanıldıklarını göreceğimiz yeni kayıt ekleme, kayıtları güncelleme ve silme metodları yerine kendi SQL komutlarınızı yazabilirsiniz.

 

Sağladığımız veri bağlantısını kullanarak, yararlanabileceğimiz bir veri grubu oluşturmak için, yukarıda .Connection metodunu kullanırken yazdığımız kodu şöyle geliştirmemiz gerekir:

<%

Dim Veriyolu, Kayitdizisi

Set Veriyolu = Server.CreateObject(“ADODB.Connection”)

Veriyolu.Open “Veri_adi”

Set Kayitdizisi = Veriyolu.Execute(“SELECT * FROM Veri_adi”)

%>

Buradaki .Execute metodu, DSN’ini verdiğiniz kaynaktaki veritabanından verileri fiilen alıp getirmeye ve bir Recordset (Kayıt dizisi) oluşturmaya yarar. Kayıtları tek tek okuması için Kayitdizisi’ne bir sonraki kayda gitmesini bildirmemiz gerekir. Bunu .MoveNext (bir sonrakine git) metodu ile yaparız. Okunan her kayıt Kayitdizi adlı değişkenin içindedir. Bu nesnenin elemanlarını herhangi bir döngü yöntemiyle ziyaretçinin Browser penceresinde görüntüleyebiliriz; bir HTML etikenin içeriği yapabiliriz; veya başka bir şekilde kullanabiliriz. Aynı döngü, .MoveNext ile bir sonraki kaydın okunmasını da sağlayacaktır. Bunun bir örneğini daha sonra göreceğiz.

Recordset.Open

Veritabanına dayanan Web uygulamalarımızda sorun buradaki gibi sadece veriyi okumakla bitmeyebilir; veriyi güncelleştirmek veya silmek isteyebiliriz. Bunun için doğruca ADO’nun .Recordset metodundan yararlanmamız gerekir. .Recordset metodu ne yapar? Tıpkı ekranınızdaki bir yazının içinde duran imleç (cursor) gibi hayalî bir imleci götürür verilerinizin en başına koyar. Bu hayali imleci veritabanı üzerinde dolaştırmak ve gittiği yerdeki değeri okutmak bizim işimizdir.

.Recordset metodu, ile bir veritabanını okuyacak imleci üç şekilde ayarlayabilirsiniz:

Static                   (Duragan) SELECT komutu icra edilir ve okunan kayıt arzu ettiğiniz değişkene yazılır. (ADO Sabit Değerleri dosyasınıdan yararlanıyorsak, adOpenStatic)

Forward only       (Sadece ilerle) İmleç veritabanı içinde sadece ileri doğru gider ve her seferinde bir kayıt okunur. (Varsayılan imleç türü budur.) (ADO Sabit Değerleri dosyasınıdan yararlanıyorsak, adOpenForwardonly)

Dynamic              (Dinamik) Veritabanına ulaşan ve değişiklik yapan başka bir kullanıcı varsa, bu değişiklik size anında yansıtılır. (ADO Sabit Değerleri dosyasınıdan yararlanıyorsak, adOpenDynamic)

Bu yöntemlerden birini seçmekle veriyi belirli bir okuma tarzında açmış olursunuz. Bu yöntemlerden hangisini seçtiğinizi .Recordset metodunu kullanacak olan .Open komutunun argümanı olarak açıkça belirtmeniz gerekir. ADO, bunun için sizden sayılar halinde argümanlar ister.

ADO Sabit Değerleri

ADO+ODBC yoluyla kuracağımız veri bağlantıları, çoğu zaman adeta şifreli ifadeler içerebilir ve bir çok komutun argümanı öğrenmesi zor sayılar halinde verilir. Microsoft ve kullanılmaya hazır ASP Uygulamaları üreten firmalar, bu karmaşık ifadeleri düz metinler olarak ifade etmeye yarayan haricî dosyalar (include files) hazırlar ve sunarlar. Bunlar arasında en yaygın olanı (bu kitapçığın kodları arasında bulunan) Microsoft’un ADOVBS (adovbs.inc) dosyasıdır. (Aynı dosyanın JavaScript sürümü ise adojavs.inc ardını taşır). Bu dosyadan yararlanabilmek için, sitenize kopyalamanız ve daha sonra sayfalarınıza şu kodu eklemeniz gerekir:

<!- - #include file=”adovbs.inc” - - >

Bu dosya, Server tarafından icra edilir ve ADO nesnesinin sayı halindeki bütün argümanlarını anlaşılabilir İngilizce kelimelere çevirir. Bu dosyanın içeriğinden nasıl yararlanacağımızı ele alacağız.


Bir veriye bağlantıyı kurduktan sonra kayit dizimizi .Recordset metodu ile sağlayacaksak, yukarıdaki örnek kodumuzu şöyle yazmak gerekir:

<!- - #include file=”adovbs.inc” - - >

<%

Dim Veriyolu, Kayitdizisi, Sorgu

Set Veriyolu = Server.CreateObject(“ADODB.Connection”)

Veriyolu.Open “Veri_adi”

Set Kayitdizisi = Server.CreateObject(“ADODB.Recordset”)

Sorgu = “SELECT * FROM Veri_adi”

Kayitdizisi.Open Sorgu, Veriyolu, aOpenStatic

%>

Bu kod ile, .Recordset metodu son .Open komutu ile bizim için veri bağlantısını sağlar; verdiğimiz SQL Sorgusu icra edilir ve kayıt diziniz Kayitdizisi’ne kaydedilmeye hazır hale gelir. Şimdi imlecinizi ilerleterek, veriyi fiilen okutmanız gerekir; ki bunu yapmak için yukarıda kolayca .Execute metodu ile oluşturduğumuz kayıt dizisinde kullandığımız basit .MoveNext’ten daha çok imkana sahibiz:

MoveFirst:                            Kayıt dizisinin (Recordset’in) birinci satına gider.

MoveLast:                            Kayıt dizisinin (Recordset’in) son satına gider.

MoveNext:                           Kayıt dizisinin (Recordset’in) bir sonraki satına gider.

MovePrevious:                     Kayıt dizisinin (Recordset’in) bir önceki satına gider.

Move:                       Kayıt dizisinin (Recordset’in) içinde vereceğiniz sayıya göre ilerler. Bunun için iki sayı vermeniz gerekir: başlangıç noktası ve ilerlenecek kayıt sayısı.

Recordset.Update

Veritabanından aldığımız değerleri, kimi zaman ziyaretçinin vereceği değerlerle veya ziyaretçinin bir takım tercihleri sonucu güncelleştirmemiz gerekir. Bu Recordset nesnesinin .Update metodu ile kolayca yapılır. Yalnız burada hassas bir nokta var: diyelim ki aynı anda iki veya daha fazla kullanıcı Web programımızın veritabanına ulaşır ve aynı anda değişiklik yaparlarsa ne olur?

Biraz önce Recordset’in .Open metodunun imleçlerinden söz ederken, okumanın yönünü veya imlecin hareket tarzını belirleyen argümanları sıralamıştık. Bu argüman dizisine bir yenisini ekleyerek, veritabanına erişimin niteliğini ve güncelleştirmenin nasıl yapılacağı ve yansıtılacağını da belirleyebiliriz. Bu işlemin temel ilkesi veritabanı kayıtlarının kilitlenmesi esasıdır. Bu kilitlemenin türünü belirleyerek, güncelleştirmenin de nasıl yapılacağını belirlemiş oluruz. Burada kullanacağımız argümanlar da ADO’nin şifreli sayıları olması gerekirken, adovbs.inc dosyası sayesinde İngilizce (ve dolayısıyla anlaşılabilir) kelimeler olur. advbs.inc dosyasını devreye soktuysanız, şu iki tür kiliti kullanabiliriz:

adLockReadOnly    Kayıtların güncelleştirilmesini önler; ziyaretçimiz veritabanına kayıt yapmayacaksa, bu kilit türünü kullanmamız gerekir.

adLockOptimistic    Veritabanına ek yapacaksak, mevcut kayıtmları düzelteceksek ve bazılarını sileceksek, bu kilit türünü kullanmamız gerekir.

Yukarıdaki kod örneğimizin sadece son satırını, bu metodu kullanmak amacıyla, şöyle yazabiliriz:

Kayitdizisi.Open Sorgu, Veriyolu, aOpenStatic, adLockOptimistic

Tabiî bir veritabanını güncelleştirmek için imleci veritabanında doğru kaydın üzerine götürmek ve bu arada Recordset’in bize sağladığı mevcut verilerin yerine yeni değerleri atamış olmak gerekir. Bunu sağladıktan sonra bütün yapacağımız şey .Update metodunu kullanmak ibarettir:

Kayitdizisi(“Adi”) = “Necip Fazıl”

Kayitdizisi(“Soyadı”) “Dayanır”

Kayitdizisi.Update

Bu komut, imleç o sırada hangi kaydın üzerinde ise o kaydın “Adi” ve “Soyadi” alanlarındaki veriyi “Necip Fazıl” ve “Dayanır” haline getirir. Bu metodu kullanırken bir kaydın bütün alanlarını güncelleştirmemiz veya güncelleştirilmeyen alanları eski değerleri ile tekrar etmemiz gerekmez.

Recordset.Delete

Bir veritabanındaki kaydı silmek de ADO ile oldukça kolaydır. İmleci, silinecek kaydın üzerine götürdükten sonra, Recordset’in , .Delete metodunu çağırarak o andaki kayıt silinir. Bu metod, bir kaydı bütün alanlarındaki değerlerle birlikte (yani veritabanının bir satırını tümüyle) siler:

Kayitdizisi.Update

Recordset.AddNew

Bir veritabanına yeni kayıt eklemek istediğimizde, Recordset’in .AddNew (yeni ekle) metodundan yararlanırız. Bu metodun özelliği bizim imleci veritabanı içinde bir yere götürme zorunluğumuz olmamasıdır. Bu metod kendiliğinden imleci dosyanın en son satırının altına götürür. .AddNew metodu bir veritabanı dosyasına kayıt eklerken, veritabanında mevcut bütün alanlar için değer vermenizi isteyecektir. Örneğin

<%

Kayitdizisi.AddNew

Kayitdizisi(“Adi”) = “Necip Fazıl”

Kayitdizisi(“Soyadı”) “Dayanır”

Kayitdizisi(“TelNo”) = “0342-3390000”

Kayitdizisi.Update

%>

Veritabanına yeni kaydı, .Update metodunun yaptığına dikkat edin.

 
 
  Bugün 107 ziyaretçi (151 klik) www.bilisim-egitim.tr.gg  
 
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol