ASP’nin diğer CGI tekniklerine göre kolay olmasının (peki, kabul, “kolay görünmesi”
diyelim!) belki de sadece veri erişimini adeta çocuk oyuncağı haline getirmesidir. ADO,
gerçekte bir ASP nesnesi olmaktan çok Server Component’i (sunucu bileşeni) sayılır. Bu
bileşene biz ASP içinden bir ActiveX nesnesi ile ulaşırız.
Veritabanı, günümüzde giderek Web Programlarının temelini oluşturuyor. Sayfaların unsurları
veritabanı dosyasından alınıyor; ziyaretçilerin verdikleri bilgiler veritabanına yazılıyor. Bu
gelişimin başlıca sebebi, veritabanının site güncelleştirme işlerini kolaylaştırmasıdır. Söz
gelimi bir sayfadaki seçenekleriniz, bir veritabanından alınıyorsa, bu seçenekleri alan VBScript
kodu hiç değişmeden kalacak ve siz sadece veritabanı dosyanızda ilgili verinin alındığı alana
yeni değerler girerek, sayfanızı sürekli güncel tutmuş olacaksınız. Bir diğer sebep ise
veritabanı dosyalarının idaresinin kolay olmasıdır. Sözgelimi ziyaretçilerinizden aldığınız
bilgileri daha sonra muhasebe kayıtlarınıza veya adres defterinize, müşteri kütüğüne ya da
başka suretle kayda geçirmek istiyorsunuz. Ziyaretçilerimizin form yoluyla bize ilettiği
bilgileri düzyazı dosyasına işlemenin yollarını Dosya sistemi Nesnesi’ni (FileSystem)
görürken, ele aldık. Bunu yapabiliriz kolayca. Ama daha sonra düz yazı dosyasının idaresi,
veritabanının idaresi kadar kolay olamaz. ASP sayfalarınız Access, Excel, Paradox, FilePro,
SQL Server ve Oracle veritabanlarına ve spreadsheet dosyalarına erişebilir; bu dosyalardan
veri okur ve bu dosyalara veri yazabilir. Özetle, ASP programlarımızla, SQL-uyumlu veya
Windows ve diğer sistemler için yazılmış ODBC (Open Database Connectivity/Açık
Veritabanı Bağlantısı) ile uyumlu her türlü dosyaya, ADO nesnesi aracılığıyla ulaşabiliriz.
///////////////////KUTU//////////////////
ODBC ve OLE-DB
Bu kitapçığın baştarafında, ASP dosyalarınızı geliştirmeye başlamadan önce bilgisayarınızda
ODBC (Open Database Connectivity/Açık Veritabanı Bağlantısı) sürücülerinin kurulu olması
gerektiğini belirtmiştik. ODBC, ADO’nun kullandığı tek sistem değildir; ve Microsoft firması,
ODBC’nin yerine hızla OLE-DB adını verdiği yeni bir teknolojinin alması için yoğun çaba
içinde. OLE-DB, ODBC’nin Web’de sağladığı başarının üzerine bina edilen yeni bir teknoloji.
ODBC, ilişkilendirilmiş (relational) veritabanlarına erişmek üzere tasarlandığı halde OLE-DB
her türlü veritabanına erişebilir. OLE-DB, ASP programlarımıza yeni nesneler kazandırabilir;
kullanılmaya hazır elektronik ticaret bileşenlerini kullanmaya imkan verir. Bu konuda geniş
bilgiyi, Microsoft’tan edirebilirsiniz.
ASP sayfalarımızda kullanacağımız ADO nesneleri ilerde de ODBC sürücülerine erişme
imkanını koruyacağı için, şimdilik sadece ODBC tekniği ile çalışmakta ve bu tekniği
öğrenmekte sakınca yok. OLE-DB, ODBC’nin yerini almayacak; fakat içinde ODBC’yi de
bulunduracak. Bu da şu anda oluşturacağımız ASP uygulamalarının ilerde OLE-DB tekniği ile
çalışan sunucularda işleyeceği anlamına geliyor.
/////////////////////KUTU BİTTİ///////////////////
Şimdi ADO ile aşağıda yapacağımız küçük örnekler için bilgisayarınızda kurulu bir veritabanı
programı varsa onu kullanarak bir veritabanı dosyasında uyeler adıyla şu tabloyu
oluşturabilirsiniz:
A lan Adı: V eri türü
uyeNo AutoNumber (Birincil Anahtar/Primary Key)
uyeAdi metin
uyeSoyadi metin
email metin
mesaj memo
Daha sonra da renkler adıyla şu tabloyu yapın:
A lan Adı: V eri türü
renkID AutoNumber (Birincil Anahtar/Primary Key)
renk metin
Bu tablolardan birincisine bir kaç isim ve diğer bilgileri; ikincisine ise dört-beş renk adı girin.
Bilgisayarınızda veritabanı oluşturma programı yoksa bu kitapçığın kodları arasında bulunan
uyeler.mdb adlı MS-Access dosyasını kullanabilirsiniz. Bu dosyayı, kişisel Web Server’ınızın
kök dizinine kopyalayın. Sonra, Denetim Masası’nı açın ve adı ODBC, ODBC 32 Bit, ya da
ODBC Data Source olan simgeyi çalıştırın; ikinci sekme olan System DSN’i tıklayın.
<odbc0001.tif>
Açılacak kutuda Add/Ekle düğmesini tıklayarak, yeni veri kaynağı oluşturmak için ilk adım
olan veriyi okumakta kullanacağımız sürücüyü seçebileceğimiz kutunun açılmasını sağlayın.Burada, yukarıda oluşturduğunuz veri dosyasına uygun sürücüyü seçin. Örnek uyeler.mdb’yi
kullanıyorsanız, birinci seçenek olan Microsoft Access Driver’ı seçmeniz gerekir. Son
düğmesini tıklayın ve Access dosyasının kurulumunu yapmaya başlayalım. Buradaki Data
Source Name (DSN, Veri Kaynak Adı), biraz sonra ADO nesnesiyle ilgili metodları ve
deyimleri yazarken kullanacağımız veri adıdır; buraya “uyeler” yazın; çünkü örneklerde bu
veriye “uyeler” adıyla gönderme yapacağız. İsterseniz, Description/Açıklama bölümüne
veritabanının niteliğini belirten bir kaç kelime yazabilirsiniz. Sonra, Select/Seç düğmesini
tıklayarak ve açılıcak diyalog kutusu yardımıyla veritabanı dosyasını kopyaladığınız yerde
bulun; OK/Tamam’ı tıklayarak, veritabanı seçme işlemini tamamlayın.
<odbc0002.tif>
DSN oluşturma kutularını sırasıyla OK/Tamam düğmelerini tıklayarak kapatın; “uyeler” verisi,
şu andan itibaren bütün Web uygulamalarımızın hizmetine girmiş demektir.
Internet sitenize koyacağınız ve veritabanına erişmesi gereken sayfalarınız için bu işlemi
gerçek Internet ortamında da yapmak zorundasınız. Veritabanı dosyanızı Internet sitenizde kök
dizinine veya bir diğer dizine kopyaladıktan sonra sistem yöneticisine ya elektronik mektupla,
ya da evsahibi firmanın yönetim ve teknik destek yardımı sağlayan sayfasında veritabanınızın
dosya adını, yolunu, ve DSN olarak kullanmak istedeğiniz ismi bildirerek, bizim burada
yaptığımız işi Server yöneticisinin yapmasını sağlamamız gerekir.
ADO’nun bize sağladığı imkanlardan yararlanabilmek için onun nesnelerini kullanılırız. Bu
bölümde ADO’nun nesneleri ve metodlarını ele alacağız.
Connection (Veritabanına bağlantı)
ADO’dan yararlanabilmek için kullanacağımız ilk nesne Connection’dır. Bu nesne ile
veritabanı ile bağlantı sağlarız, yol açarız:
<%
Dim Veriyolu
Set Veriyolu = Server.CreateObject(“ADODB.Connection”)
Veriyolu.Open “Veri_adi”
%>
Burada, Server’ın CreateObject metodu ile ADOBD.Connection nesnesini oluşturuyoruz.
Oluşturduğumuz bağlantıya istediğimiz değişken adını verebiliriz. Bu örnekte veriye
kurduğumuz bu bağlantı Veriyolu adıyla biliyor. Bu yolla sağlayacağımız veriler, ASP
programı boyunca bir isimle bilinmelidir. Veriyolunun açacağı veri kümesinin ismini buradaki
“Veri_adi” kelimelerinin yerine yazarız. Bu isim, bağlantının .Open metodu ile açacağı verinin
adıdır. Bu, kullanacağımız veritabanı dosyasının adı değildir. Bu isim ile söz konusu veritabanı
dosyasını işletim sisteminin ODBC aracına tanıtırken kullandığınız isim aynı olmalıdır. Bir
veritabanı dosyasını ODBC aracını kullanarak sisteme tanıtma (DSN-Data Source Name)
ayarının nasıl yapıldığını daha önce ele aldık. Bu üç satırla, ASP programı, Server’dan ADO
aracılığıyla, sistemin “Veri_adi” kelimelerinin yerine yazacağınız isimli veriye yol açacaktır.
Örneğin yukarıdaki kutuda oluşturduğumuz ODBC veri kaynağını kullanacağımız zaman,
buraya “uyeler” kelimesini yazacağız,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.
//////////////////KUTU//////////////////////
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.
///////////////////////KUTU BİTTİ////////////////
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.
/////////////////KUTU BİTTİ///////////////
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
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.
DSN’siz Veri Bağlantısı
Bu kadar DSN oluşturmayı öğrendikten sonra, “Aslında DSN olmadan da veritabanlarınıza
ulaşabilirsiniz!” derlerse, herhalde çok sevinmeyiz. Ama işin doğrusu DSN yoludur. Fakat yine
de DSN oluşturmadan veritabanına ulaşabileceğimizi bilmemiz gerekir.
DSN, genellikle Web Server’ları yavaşlatır; Web Server, DSN’ini belirttiğiniz veriye ulaşmak
için önce ODBC’nin yardımını ister; ODBC, bir takım sürücüleri devreye sokar ve sonunda
veriye ulaşırız. Bir DSN-verisine 20-30’dan fazla kullanıcı aynı anda eriştiği zaman bu
yavaşlama gözle görünür hale gelebilir. Bir süre öncesine kadar Microsoft firması, veriye
dayanan Web sitelerinin veri-bağını DSN yoluyla kurmasını tavsiye ederken, şimdi MS
yayınlarında sık sık DSN’siz veri bağlantısının da etkin şekilde kullanılacağı belirtiliyor.
Yukarıda verdiğimiz DSN örneği şöyle idi:
<%
Dim Veriyolu, Kayitdizisi
Set Veriyolu = Server.CreateObject(“ADODB.Connection”)
Veriyolu.Open “Veri_adi”
Set Kayitdizisi = Veriyolu.Execute(“SELECT * FROM Veri_adi”)
%>
Böyle bir DSN bağlantısını kullanabilmemiz için, kendi kişisel Web Server ortamımızda
Denetim Masası’ndaki ODBC aracını kullanarak bir DSN oluşturmamız; Internet ortamında ise
bu adı vereceğimiz veritabanı dosyasına DSN oluşturulması için Web Server yöneticisinin
yardımını istememiz gerekiyor. Oysa aynı işlemi DSN’siz veri bağlantısı kurarak da
yapabiliriz. Bunun için, DSN’e yukarıdaki gibi doğrudan göndermede bulunmak yerine; ya
ODBC sürücüsüne ya da ODBC’nin kullandığı Microsoft Jet OLEDB sürücüsüne doğrudan
atıfta bulunuruz. Örnek:
Veriyolu.Open "Veri=" & Server.MapPath("..../veriler/uyeler.mdb") & "; Driver = {Microsoft Access Driver (*.mdb);"
Burada, DNS’siz bağlantı için veritabanı dosyasının Server’daki göreli yerini, adını ve hangi
sürücünün kullanılacağını belirtiyoruz. Aynı bağlantıyı, doğruca Jet sürücüsü için de
yazabilirdik:
Veriyolu.Open "Veri=" & Server.MapPath("..../veriler/uyeler.mdb") & "; Provider=Microsoft.Jet.OLEDB4.0;"
Tabiî buradaki sorun kullandığınız veritabanı dosya türüne uygun Microsoft Jet sürücüsü
seçebilmektir. Bu konuda geniş bilgi Microsoft’un Internet sitesinde bulunabilir.
Veri ile HTML Etiketlerini Doldurma
ADO nesnesini tanıdık; metodlarını gördük. ADO’nun veritabanı ile DSN ile ve DSN’siz nasıl
bağlantı kuracağını ele aldık. Şimdi çok kısa olarak elde ettiğimiz verilerle, HTML
etiketlerinin içini nasıl dolduracağımızı görelim. Burada “içini doldurmak” (veya bir çokİngilizce kaynakta göreceğiniz üzere populate etmek) bir etiketin değer (value) bölümünü
yazmak anlamına geliyor). Burada küçük bir kaç örnekle, veri kaynağını kullanarak HTML
etiketlerinin içini doldurma alıştırması yapalım. Buradaki bzı örneklerde ODBC konusunu ele
alırken oluşturduğumuz uyeler.mdb’yi DSN olarak “uyeler” verisi şeklinde kullanacağız; fakat
siz istediğiniz veriyi kullanabilirsiniz.
Seçme Kutuları: SELECT
SELECT, ziyaretçilerimize önceden belirlenmiş bir çok unsurdan birini veya daha fazlasını
seçmelerine imkan veren bir etikettir. Ziyaretçi, seçimini SELECT’in OPTION’ları arasından
yapar. Seçenekler (OPTION), sahip oldukları değeri Server’a gönderirler. Genel yazım kuralı
şöyledir:
<FORM ACTION=”...” METHOD=POST|GET>
<SELECT NAME=”metin”>
<OPTION VALUE=”değer1”>Tercih 1
<OPTION VALUE=”değer2”>Tercih 2
<OPTION VALUE=”değer3”>Tercih 3
</SELECT>
Bu Form’un gönder (Submit) düğmesi ile sağlanan hareket (ACTION), seçilen değeri veya
değerleri, Form’u işleyecek ASP programına gönderir.
Ziyaretçimize sunacağımız seçenekler, iki-üç adet ise, bunu HTML dosyasını yazarken,
OPTION’lar halinde kodlamak kolay olabilir. Ancak seçenek sayısı artıyorsa, veya
seçeneklerimiz sık sık değişiyorsa, bunları bir veri tabanında toplamak ve OPTION değerlerini
veritabanının bir alanından alarak ziyaretçiye sunmak çok daha kolay olur. Böylece ASP
sayfası değişmeden kalır; biz sadece veritabanını güncelleştiririz. Çoğu zaman bu
güncelleştirme ziyaretçilerin yapacakları eklerin veritabanına yazılmasıyla sağlandığı için,
ortaya gerçekten dinamik bir Web Uygulaması çıkmış olur.
Diyelim ki, bizim grubumuzun üyelerini gösteren yukarıda oluşturduğumuz uyeler.mdb
(DSN’i uyeler olan veritabanı) dosyasının adı-soyadı alanlarını birleştirerek, sayfamızdaki bir
SELECT etiketinin OPTION’larına yazmak istiyoruz. Bunun için önce sayfamızda
kullanacağımız değişkenleri tanımlayalım:
<%
Dim connVeriyolu, rsVeri, SQL
%>
Sonra, bu değişkenlerden veri ile ilgili olanlara .Connection ve .Recordset için gerekli ifadeleri
yazalım. Veri ile çalışırken tasarımcının değişken adlarına bakarak hangisinin .Connection,
hangisinin .Recordset değerlerini içerdiğini anlaması zorlaşabilir. Bu bakımdan değişken
adlarının önüne .Connection için olanında conn, .Recordset için olanında rs harflerini
kulllanmak yararlı olabilir. Veritabanından fiilen hangi verileri çekeceğimizi gösteren SQL
deyimini de belirgin bir şekilde SQL değişkenine yazabiliriz:
<%
Set connVeriyolu = Server.CreateObject("ADODB.Connection")
SQL ="SELECT uyeAdi, uyeSoyadi FROM uyeler"
%>Şimdi bu değerlere dayanan ve adına uyeler diyeceğimiz veri kümesini oluşturalım:
<%
connVeriyolu.open "uyeler"
Set rsVeri=connVeriyolu.execute(SQL)
%>
Artık elimizde içinde bütün üyelerin adı ve soyadını tutan bir dizi-değişken var. Şimdi
biliyoruz ki veritabanından veri satır-satır okunur. Birinci satırın okunması sırasında bu
değişkenin değerlerini yazacak olursak:
rsVeri (0) = üye 1’in adı
rsVeri(1) = üye 1’in soyadı
olacaktır. Veritabanından ikinci satırın okunmasında ikinci üyenin adı ve soyadı, üçüncü satırın
okunmasında üçüncü üyenin adı ve soyadı bu değişkenlerin değeri olacaktır. Demek ki, bu
değerleri bir SELECT etiketinin OPTION değeri olarak kullancaksak, bu işlemi ikinci satır
okunmadan yaptırmamız gerekir. O halde:
<SELECT NAME="AdSoyad">
<% Do While Not uyeler.eof %>
<OPTION VALUE = "<%= rsVeri(0) & " " & rsVeri(1)%>"><%= rsVeri(0) & " " & rsVeri(1)%>
</Option>
<%rsVeri.movenext
loop%>
</select>
<% rsVeri.close %>
</SELECT>
Do döngüsünün içinde iken veritabanından alınan değer, herhangi bir değişkenin değeri gibi
kullanılabilir. Burada verilerin uyeler dizisinin dosya sonuna (eof, End Of File) okunduğuna
dikkat edin. Şimdi yukarıdaki kodları bir Form içinde birleştirelim:
<%@ LANGUAGE="VBSCRIPT" %>
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>ASP SELECT DOLDURMA</TITLE>
<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<META http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>
<%
' Değişkenleri tanımlayalım
Dim connVeriyolu, rsVeri, SQL
Set connVeriyolu = Server.CreateObject("ADODB.Connection")SQL ="SELECT uyeAdi, uyeSoyadi FROM uyeler"
connVeriyolu.open "uyeler"
Set rsVeri=connVeriyolu.execute(SQL)
%>
<BODY>
Bu listeden bir üyenin adını seçiniz:
<SELECT NAME="AdSoyad">
<% Do While Not rsVeri.eof %>
<OPTION VALUE = "<%= rsVeri(0) & " " & rsVeri(1)%>"><%= rsVeri(0) & " " & rsVeri(1)%>
</Option>
<%rsVeri.movenext
loop%>
</select>
<% rsVeri.close %>
</SELECT>
</BODY>
</HTML>
Bu sayfayı option.asp adıyla kaydederek sınayabiliriz. Alacağımız sonuç şuna benzemelidir:
<odbc0003.tif>
Burada yapılan seçim sonucu elde edilen değer Server’a gönderilebilir; ve söz gelimi
ziyaretçinin seçtiği kişiye ait bilgiler kendisine ulaştırılabilir.
İşaretleme Alanları: INPUT-RADIO
INPUT etiketi türleri ziyaretçilerimizin önceden belirlenmiş bir çok unsurdan birini veya daha
fazlasını seçmelerine veya kendilerinin girdi yapmalarına imkan veren bir etikettir. INPUT
türlerinden Radio ve Checkbox (işaretleme kutusu) veritabanından çekilen değerlerle
doldurularak ziyaretçiye sunulabilir. Ziyaretçi, seçimini radyo düğmelerinden veya işaret
kutularından birini işaretleyerek yapar.
INPUT etiketinin radyo düğmesi türünün genel yazım kuralı şöyledir:
<FORM ACTION=”...” METHOD=POST|GET>
<INPUT TYPE=”Radio” NAME=metin1 VALUE=deger1>
<INPUT TYPE=”Radio” NAME=metin1 VALUE=deger2>
<INPUT TYPE=”Radio” NAME=metin1 VALUE=deger3>
</SELECT>
Bu Form’un gönder (Submit) düğmesi ile sağlanan hareket (ACTION), seçilen değeri Form’u
işleyecek ASP programına gönderir. Bir Form’daki bir grup oluşturan bütün radyo düğmeleri
aynı adı alırlar, ki böylece ASP programına bir değişken için değer gönderilmiş olur.
Diyelim ki ziyaretçimizden beğendiği rengi seçmesini isteyen bir grup radyo düğmesi sunan
bir Form yapacağız. Şu kodu radyo.asp adıyla kaydedelim:
<%@ LANGUAGE="VBSCRIPT" %><HTML>
<HEAD>
<TITLE>ASP OPTION-RADIO DOLDURMA</TITLE>
<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<META http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>
<%
' Değişkenleri tanımlayalım
Dim connVeriyolu, rsVeri, SQL
Set connVeriyolu = Server.CreateObject("ADODB.Connection")
SQL ="SELECT renk FROM renkler"
connVeriyolu.open "uyeler"
Set rsVeri=connVeriyolu.execute(SQL)
%>
<BODY>
<FORM><DIV ALIGN="center"><center><TABLE BORDER="0">
<TR>
<TD colspan="2" align="center"><h3>Renk</h3></TD>
</TR>
<% Do While Not rsVeri.eof %>
<TR><TD><INPUT TYPE="radio" VALUE="<%=rsVeri(0)%>" NAME="Radyo"></TD>
<TD><%=rsVeri(0)%></TD></TR>
<%rsVeri.movenext
loop%>
</TABLE></CENTER></DIV></FORM>
</BODY>
</HTML>
Burada “Radyo” isimli radyo düğmesine verdiğimiz değerleri, ODBC’nin “uyeler” adıyla
tanıdığı veritabanından alıyoruz; bir önceki örnekten farklı olarak bu kez aynı veritabanındaki
farklı tablodan, renkler tablosundan ve sadece bir alanın, renk alanının değerlerini çekiyoruz.
Bu örnek programda da ziyaretçinin seçtiği değerleri Server’a gönderecek bir Gönder düğmesi
yok. Ama içeriğini veritabanından aldığımız değerlerle doldurduktan sonra, ziyaretçinin radyo
düğmeleriyle yapacağı tercihler, tıpkı klasik HTML’deki gibi kullanılabilir; Server’a değişken
olarak gönderilebilir; veya ziyaretçinin bilgisayarında (client-side) herhangi bir Script
tarafından kullanılabilir.
İşaretleme Alanları: INPUT-CHECHBOX
INPUT etiketinin ziyaretçiye işaretleyerek tercih imkanı veren diğer aracı Checkbox
(işaretleme kutusu) türüdür. Tıpkı radyo düğmesinde olduğu gibi veritabanından çekilendeğerlerle doldurularak ziyaretçiye sunulabilir. Ziyaretçi, seçimini işaret kutularından birini
işaretleyerek yapar.
INPUT etiketinin Checkbox türünün genel yazım kuralı şöyledir:
<FORM ACTION=”...” METHOD=POST|GET>
<INPUT TYPE=”checkbox” NAME=metin1 VALUE=deger1>
<INPUT TYPE=”checkbox” NAME=metin1 VALUE=deger2>
<INPUT TYPE=”checkbox” NAME=metin1 VALUE=deger3>
</SELECT>
Bu Form’un gönder (Submit) düğmesi ile sağlanan hareket (ACTION) seçilen değeri Forma
gönderecektir. Radyo düğmesi ile Checkbox’ın arasındaki fark, ziyaretçinin aynı ismi taşıyan
radyo düğmelerinden birini işaretleyebilirken; istediği kadar Checkbox’a işaret koyabilmesidir.
Birden fazla Checkbox işaretlendiği taktirde Server’a “metin1=deger1, deger2..” şeklinde bilgi
gönderirler. (ASP programlama açısından, bu değişken Request.Form nesnesinde Checkbox’ın
adını taşıyan kolleksiyonun içinde dizi-değişken olarak yazılır.)
Yukarıdaki radyo düğmesi örneğimizin sadece Do döngüsüne ait kısmını
değiştirerek,Checkbox’a uyarlayalım, ve isaret.asp adıyla kaydedelim:
<% Do While Not rsVeri.eof %>
<TR><TD><INPUT TYPE="checkbox" VALUE="<%=rsVeri(0)%>" NAME="Isaret"></TD>
<TD><%=rsVeri(0)%></TD></TR>
<%rsVeri.movenext
loop%>
Ziyaretçi bu form ile birden fazla kutu işaretleyerek Gönder düğmesine basarsa, Server’a
gelecek bilgi örneğin, “Isaret=Kırmızı, Mavi” şeklinde olacaktır.
Yorum Gönder