|
Access'teki başvurular listesinde varsayılan olarak ADO seçili. Emektar DAO’nun yerinde yeller esiyor gördüğünüz gibi. Zaten Microsoft’un
artık DAO’nun geliştirilmeyeceğini duyurduğunu biliyoruz. Madem öyle, işte
ADO’nun bir kısım marifetleri.

Bir Access 2000 dosyasını ilk oluşturduğunuzda başvurular listesinde geçerli
olarak ADO (Microsoft Activex Data Objects 2.x Library) seçili geliyor. Office
2000 ilk kurulduğunda 2.1 sürümü görünüyor. Bu yazının yazıldığı sıralarda
ADO’nun 2.5 sürümü epey yaygındı.
ADO, Microsoft’un sitesinden ücretsiz yüklenebiliyor. Veyahut MS’nin bazı
kurulum paketlerinin içinde ADO’nun kurulum dosyası çıkabiliyor. Visual Studio
6.0 Service Pack 4 kurulum dosyaları arasında yer alıyor bu dosya. (PC Magazine
Offline Ekim 2000 CD’sinde Visual Studio 6 SP4’ü bulabilirsiniz.)
ADO’nun kurulum dosyasının adı MDAC_TYP.EXE ve dosyanın büyüklüğü 8 mb.
civarında. ADO kullandığınız projenizi dağıtmak istediğinizde bu kurulum
dosyasını da vermeniz gerekebileceğini unutmayın. Tabii ki sınırsız
dağıtılabilir.
ADO’nun en büyük yeteneklerinden biri Internet veya yerel ağ ortamında bile
SQL Server sunucusuna kolaylıkla bağlanabilmesi.
ADO İLE BAŞLANGIÇ
DAO’nun kolay nesnelerine yeterince alışmıştık.
Dim DB as Database
Dim Rs as Recordset
Set DB= CurrentDB()
Rs.FindFirst
Rs.FindNext
...
şeklindeki deyimler neredeyse tamamen değişti. Access’te, ASP’de ya da
herhangi bir VBA platformunda ADO’yu aşağıda anlatıldığına benzer şekillerde
kullanabilirsiniz.
ADO ile bir tabloyu kullanmak için aktif proje dosyasının Connection
nesnesine bir başvuru yapılıyor.
Dim rs As New ADODB.Recordset
rs.Open "Table1", CurrentProject.Connection
Bir tabloyu ya da veri kümesini açmak ve kullanmak için eskiden olduğu gibi
birçok alternatif var. Ama ADO’da bu alternatifleri biraz daha iyi bilmemiz
gerekiyor.
Bir tabloyu sadece okunabilir olarak açmak:
rs.Open "Table1", CurrentProject.Connection, adOpenKeyset, adLockReadOnly
Bir tabloyu kayıt ekleme, silme ya da değiştirme için açmak:
rs.Open "Table1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Sadece okunabilir bir SQL kodu açmak:
rs.Open "SELECT * FROM Table1 WHERE ...", CurrentProject.Connection,
adOpenKeyset, adLockReadOnly
Kayıt eklenebilecek, silinebilecek ya da değiştirilebilecek şekilde bir SQL kodu
açmak:
rs.Open "SELECT * FROM Table1 WHERE ...", CurrentProject.Connection,
adOpenKeyset, adLockOptimistic
KAYIT DEĞİŞİKLİKLERİ
Kayıt ekleme yapılabilmesi için tablo açılırken adLockOptimistic parametresi
kullanılmalı.
rs.Open "Table1", CurrentProject.Connection, _
adOpenKeyset, adLockOptimistic
rs.AddNew
rs("Field1") = "Test"
rs("Field2") = 1234
rs.Update
Kayıt silme eskisi gibi:
rs.Delete
Kayıt değiştirmek için ise ADO'nun DAO'ya göre bir farkı var. Değişikliği
yapmadan önce artık Edit metodu kullanılmıyor ve doğrudan değişikliğe geçiliyor.
rs.Open ...
rs("Field1") = "Test"
rs("Field2") = 1234
rs.Update
ADO İLE SQL KODU ÇALIŞTIRMAK
Artık Database nesnesi yerine Connection nesnesi kullanılıyor. CurrentProject.Connection deyimini kullanarak bir SQL kodunu
çalıştırmayı (Execute) deneyin.
Dim conn As ADODB.Connection
Set conn = CurrentProject.Connection
conn.Execute "UPDATE Table1 SET ad = 'deneme' WHERE (ID='1');"
ya da
CurrentProject.Connection.Execute "UPDATE Table1 SET ad = 'deneme' WHERE
(ID='1');"
SQL İLE ARAMA YAPMAK
SQL kodu içinde arama yapmak için WHERE dışında LIKE deyiminin de
kullanılabileceğini biliyorsunuzdur. Eskiden LIKE deyiminde metin alanlarında
ayrıntılı arama için * işareti kullanılırdı. Şimdiyse bunun yerine % işareti
kullanılıyor. (SELECT deyiminin yanında * işareti kullanılır. Bu değişiklik
sadece LIKE deyimi için geçerli.)
Şu deyim ile bir SQL kodunu kayıt değişiklikleri yapılabilecek şekilde
açabilirsiniz:
rs.Open "SELECT * FROM Table1 WHERE (AdiSoyadi Like 'A%'));",
CurrentProject.Connection, adOpenKeyset, adLockOptimistic
En sondaki adLockOptimistic deyimini adLockReadOnly yaparsanız kayıt kümesi
sadece okunur olacaktır.
LIKE deyiminin yanındaki ‘A%’ ifadesi ile AdiSoyadi alanında ‘A’ ile başlayan
kayıtlar seçiliyor. Değiştirip ‘[A-K,U-Z]%’ şeklinde kullanmanız da mümkün. Yani
hem A-K arası, hem de U-Z arası değerlerin olduğu kayıtlar elde ediliyor.
LIKE deyiminden sonra bir de şunu yazmayı deneyin:
‘%A_[M,T]%’
Bu şekilde yapıldığında herhangi bir yerinde ‘A’ ve yanında herhangi bir
karakter olup onun yanında da ‘M’ veya ‘T’ olan değerlerin bulunduğu kayıtlar
listelenecektir. Mütevazi LIKE deyiminin eskiden kalma daha birçok yeteneği var.
Buna ilk olarak Word6.0’da şahit olmuştum. LIKE ile ilgili arama yeteneklerini
Word’ün bul/değiştir sayfasında görmelisiniz.
TABLO YA DA KAYIT KÜMESİ ÜZERİNDE ARAMA YAPMAK
Kayıt kümesinde arama yapmaktan kasıt, SQL kodu kullanmadan, elde ettiğimiz
kayıt kümesi (RecordSet) açıldıktan sonra arama yapılması. Eskiden FindFirst,
FindNext gibi komutlar kullanıyorduk. Bu komutların tümü Find adlı yeni komut
altında toplanmış. Find komutu değişik parametreler alarak eski komutların işini
yapabiliyor.
Arama işlemini başlatmadan önce tabloda kayıt olup olmadığı kontrol ediliyor.
Zira kayıt yoksa MOVEFIRST komutu hata verir. Zaten herhangi bir anda ilk kaydı
bulmak için tablonun başına gidilmesi gerekli.
Dim rs as New ADODB.Recordset
rs.Open "Kisiler", CurrentProject.Connection, _
adOpenKeyset, adLockOptimistic
If rs.EOF = True Then
MsgBox "Tabloda kayıt yok."
Else
rs.MoveFirst
rs.Find Kriter, 0
'Eski FindFirst ile aynı.
If rs.EOF = True Then
MsgBox "Kayıt bulunamadı."
Else
'Tüm kayıtları sırayla bul ve mesaj göster.
Do While Not rs.EOF
MsgBox "Kayıt bulundu." & vbCr & vbCr & _
rs("ID") & " " & rs("Ad") & " " & rs("Soyad")
'Sonraki kayıttan itibaren tekrar ara.
rs.Find Kriter, 1
Loop
End If
End If
rs.Close
Set rs = Nothing |
İlk kaydı bul (FindFirst):
rs.MoveFirst
rs.Find “Kriter”, 0, adSearchForward
Sonrakini bul (FindNext):
rs.Find “Kriter”, 1, adSearchForward
Öncekini bul (FindPrevious):
rs.Find “Kriter”, 1, adSearchBackward
Son kaydı bul (FindLast):
rs.MoveLast
rs.Find “Kriter”, 0, adSearchBackward
DAO'da kayıt bulunamadığında RecordSet nesnesine ait NoMatch özelliği
kullanılabilirken ADO'da böyle bir özellik yok. Aradığınız kaydın bulunup
bulunamadığını anlamak için, eğer ileri doğru arama yapıyorsanız kümenin sonunda
(rs.EOF=True ? ) olup olmadığınızı, geri doğru arama yapıyorsanız kümenin
başında (rs.BOF=True ? ) olup olmadığınızı kontrol etmelisiniz.
BOŞ KAYITLAR GELSİN
NULL deyimi boş değerleri yani ‘hiçbirşey’i ifade ediyor. Eskiden bir veri
alanının değerinin boş olup olmadığını bulmak için ‘VeriAlani1 IS NULL’
yazılıyordu. Ya da boş olmayan kayıtlar ‘VeriAlani1 IS NOT NULL’ ile
listelenebiliyordu. ADO’nun SQL kodlarında ise bu deyimle beraber eşitlik
işaretleri kullanılıyor.
‘VeriAlani1 = NULL’
‘VeriAlani1 <> NULL’
Son olarak NEW ya da CREATEOBJECT deyimi ile oluşturduğunuz Connection ve
Recordset nesnelerini NOTHING ile silmeyi unutmayın.
Set rs = Nothing
Set conn = Nothing
ADO o kadar ayrıntılı ki tam olarak anlatana kadar neredeyse bir dergi dolusu
yazı çıkar.
BİR YILIN TÜM GÜNLERİNİ LİSTELEMEK
Bir yılın tüm günlerini bulmak için yerine göre birkaç yöntem önerilebilir. Bu
yöntemi kullanmak için iki küçük tablo hazırlamak gerekiyor.
Aylar ve Gunler adlı iki tablo oluşturun. Aylar tablosunda Ay adlı yeni bir sayı
alanı oluşturup, tabloya sırayla 1-12 arası sayıları girin. Gunler tablosunda da
Gun adlı aynı özellikte bir alan oluşturup bu tabloya 1-31 arası sayıları girin.
Yeni bir sorgu açıp menüden Görünüm / SQL Görünümü (View / SQL View) komutunu
seçin. Varsa yazılı olan şeyleri silip şu kodu ekleyin:
SELECT Tarih FROM
(
SELECT DateSerial([HANGİ YIL?],[ay],[gun]) AS Tarih
FROM Aylar, Gunler
) as Tarihler
GROUP BY Tarih
ORDER BY Tarih;

2001 yılının tüm günleri.
Sorguyu bir adla kaydedip kapadıktan sonra veri görünümünde açıp bir yıla ait
tüm günleri listeleyebilirsiniz. Alttaki SQL metnini ise bir yıla ait çalışma
günlerini (haftaiçi olan günleri) bulmak için aynı şekilde kullanabilirsiniz.
SELECT Tarih FROM
(
SELECT DateSerial([HANGİ YIL?],[ay],[gun]) AS Tarih
FROM Aylar, Gunler
) AS Tarihler
WHERE NOT Weekday([Tarih]) IN (1,7)
GROUP BY Tarih
ORDER BY Tarih;

2001 yılında haftaiçi olan günler.
WEB SAYFASINI KAYDET
Internet Explorer’da gezinirken beğendiğiniz bir sayfayı tüm bileşenleri ile
kaydedebiliyorsunuz. Ama bu özelliği çokça kullanıyorsanız etrafta bir sürü
dosya ve aynı adı taşıyan klasörler birikmiş olabilir. Çünkü geçerli olarak
sayfa içindeki resimler ve diğer ekler bir klasör içine yerleştiriyor.
Gelgelelim sayfayı kaydederken değiştireceğiniz bir seçenekle herşeyi tek bir
dosyada toplayabilirsiniz.
Dosya menüsünde sayfayı kaydetme komutunu çalıştırın ve açılan sayfanın alt
kısmında, kayıt türü seçeneği olarak MHT uzantısını seçin. Böylelikle sayfadaki
yazı ve resimlerin tamamı tek dosya içinde tutulacak ve kalabalıktan
kurtulacaksınız. Tabii ki Internet Explorer bu dosyaları tekrar
görüntüleyebiliyor. Üzerlerine çift tıklamanız yeterli.

Bu yazıdaki bazı örnekleri PC Magazine Online sitesinde Dergide Adı Geçen
Dosyalar bölümünde bulabilirsiniz.
ACCESS HİKAYELERİ
Bir sektörün büyüklüğünün bir kanıtını literatürü etkileyebilmiş olmasında
ararım. İyi veya kötü yönde olsun, dilimizi büyük ölçüde etkilediğini düşündüğüm
bir yazılım sektörü bu.
ADINIZI GİRMEYİ UNUTTUNUZ
Yaptığınız programı sevdirmenin yollarından biri belki kullanıcıya hitap
şeklindeki incelikler olsa gerek.
Kullanıcı etkileşimli programlar yapıyorsanız gösterilecek mesajları, komut
metinlerini öncelikle kendinize yönlendirerek ufak denemeler yapabilirsiniz.
“Adınızı girmeyi unuttunuz. Lütfen girin.”
(Benim adımdan sana ne? Hem unuttuğumu da nereden çıkardın?!!)
Unutmayın ki programınız bir gün paranoid bir kullanıcının eline geçebilir.
Programın karşısındaki kişiye kendisinin birşeyi unuttuğunu söylediğinizde
programınız parantez içindekinden farklı sözlerle de muhatap olabilir.

Sizce gerçekten unutmuş olabilir miyim?!!
Resimdeki unutma hadisesi Windows 95’in eski bazı sürümlerinde var. Güncel
sürümlerde buna rastlamadım.
ŞİFRE Mİ PAROLA MI
Dikkat ettiyseniz Windows’ta kullanıcı hesaplarının olduğu yerlerin neredeyse
hiçbir yerinde Şifre kelimesi kullanılmıyor. Kullanıcı adı ile birlikte Parola
sözcüğü yer alıyor. Şifre kelimesi ise güvenlik amacıyla değiştirilmiş olan
şeyler sözkonusu olduğunda kullanılıyor.
Baktığım sözlükte bu iki sözcük şöyle açıklanmış:
ŞİFRE = [Kökeni: Fransızca] [Türü: İsim] Gizli haberleşmeye yarayan
işaretlerin tümü.
"Kumandan şifreyi söyledi" İstanbul mümessilliği şifresiyle Mustafa Kemal
Paşa'ya bekledikleri malûmatı iletmiştim." (Y. K. Karaosmanoğlu)
*şifre anahtarı= şifrede kullanılan işaretleri gösteren liste
*şifreyi çözmek= bir şifrede kullanılan işaretlerin anlamını bulmak
PAROLA = [Kökeni: İtalyanca]
1. [Türü: İsim] Askerlerin veya gizli derneklerin toplantılarına katılan
kimselerin birbirlerini tanımalarını sağlayan ve kendi aralarında önceden
kararlaştırdıkları kelime veya söz.
"Bir asker uzaktan, görünmeyen bir yerden parola soruyordu." (M. Ş. Esendal)
"Korkulu mıntakalara geldiğimiz vakit, dağıldık, uzaktan ses parolamız Bağdad,
cevabı Şam kelimesiydi." (F. R. Atay)
2. [Kullanım alanı: Askerlik] Varılmak istenen amacı özetleyen söz.
3. Gizlilik ortamında insanların birbirini tanımalarını ve anlaşmalarını
sağlayan işaret.
"Eşinin balkona asacağı çamaşırların parolasından İngiliz polisinin o gün
kendini evde arayıp aramadığını ve civarda nöbet.." (H. Taner)
Buradan anladığım kadarıyla “Şifre” kelimesi çözülmesi gereken gizli bir şeyi
(kilit), varılmak istenen amacı ifade ediyor. Parola ise şifreyi çözen bir
anahtar anlamı üstleniyor.
DİKKATSİZ MESAJLAR
Windows’ta olduğu gibi farklı dillerde piyasaya sürülecek bir program
yazıyorsanız ya da tüm mesaj metinlerini bir yerden yönetiyorsanız biraz daha
kontrollü davranmanız gereklidir. Şu mesaj Windows 95’in güncelleştirilmemiş
bazı eski sürümlerinde var:
“Bu klasörü silmek ve Tüm içeriği Geri Dönüşüm Kutusu’na taşınsın mı?
istediğinizden emin misiniz?”

Belli ki mesaj içine bazı parametreler yerleştirilmiş ama
metnin parçaları doğru yerlerde değil.

Delphi kodlarının kağıda dökülmüş hali. İşte dört sayfanın beşinci sayfası!)
TIKLASIN FARELER
İlkokul yıllarında dillerin nasıl geliştiğini araştırırken doğadaki seslerin
dilimizi ve yazımızı etkilediğini öğrenmiştik. Bakınız bu bilgisayar faresi
dilimize ne kadar da kolay adapte olmuş! Artık bilgisayar ya da Internet dediniz
mi akla ‘tık’ geliyor, farenin iyisi ‘tık’ının şahaneliğinden, Internet
bağlantısının iyisi, reklamındaki ‘tık’ların o yana bu yana ahenkli uçuşmasından
anlaşılıyor.
Microsoft da Türkçe programlarındaki metinlerde ‘tıklama’ eylemini ‘tıklatın’
şeklinde kullanıyor.
“Lütfen buraya tıklayın.”
“Denetim Masası simgesine çift tıklayın.”
Gördüğüm kadarıyla üstteki iki cümlenin Microsoftçası şöyle:
“Lütfen burayı tıklatın.”
“Denetim Masası simgesini çift tıklatın.”
Microsoft bu mesajları yorumlarken tıklayan şeyin biz değil, fare olduğunu
düşünmüş olabilir. Yani ‘siz tıklama işini fareye yaptırın’ demek isteniyor. Biz
de diyoruz ki, ‘Sayın kullanıcı. Fareyi eline al ama onu kullanma, koş burayı
sen tıkla!’. Acaba gerçekten öyle mi?
KULLANICI HATA YAPMAZ – MI ACABA
Kimilerince programı kullanan kişi hata yapmaz. Hatayı programı üreten kişi
yaptırır. Kullanıcı ancak bir işlem yaparken o işlemin yetki dahilinde
geçerliliği konusunda hata yapmış olabilir bu görüşe göre.
Geçen yıllarda bu şekilde bazı tartışmalar yapılıyordu. Sonrasında yazılım
firmaları kullandıkları dilde bazı iyileştirmeler yapmışlardı. Aynı tartışmalar
Macintosh için de geçerliydi.
YARDIM DOSYALARI AMA NASIL
Türkiye’de üretilmiş yazılım programlarının hemen hepsindeki yardım
dokümanlarında dikkatimi çeken birşey var. Aynı şey birçok web sayfası için de
geçerli. Yardım dokümanları hazırlanırken aklımıza ilk gelen şey ekranlarda
görünen nesnelerin ne işe yaradığını anlatmaktır.
Microsoft gibi büyük şirketlerin dokümanlarında dikkat ettiyseniz görünür
işlevlerin ne işe yaradığı değil, ihtiyaçların o ürün ile nasıl karşılanacağı
konusu ön plandadır.
Bizim yardım dokümanlarımızda ise ekrandaki komutların ne işe yaradığından
başlanıp küçük ipuçlarıyla yardım belgeleri tamamlanmış olur genelde.
Bu yazıyı yazdığım Word programının yardım belgelerinde önce Word’ün ne işe
yaradığından, önceki sürümlere göre farklılıklarından başlanıp Word’ün önemli
yetenekleri ile devam edilmiş.
Çok kapsamlı bir program olduğu için bunun böyle yapılmış olduğu söylenebilir.
Öyleyse Windows’taki küçük Ses Kaydedicisi’nin yardım dosyasına bir gözatalım.

Şu dört konu başlığına bakın:
- Ses Kaydetme ve Çalma
- Ses Dosyalarını Değiştirme
- Diğer Ses Dosyalarına Ses Ekleme
- Bir Belgenin İçinde Bir Ses Dosyası Yerleştirme
Gördüğünüz gibi son konu olarak başka uygulamalara nasıl ses eklenebileceğini
anlatmayı ihmal etmemişler. Yani konular sadece görünen işlevlerle ve menülerin
ve komutların nasıl kullanıldığıyla sınırlı değil.
Bir muhasebe programında ‘FATURA MENÜSÜ NASIL KULLANILIR’ konusunu değil de
‘FATURA NASIL HAZIRLANIR’ konusunu öncelikle işleyen yardım belgelerinin
olmasını daha doğru buluyorum. Tabii programınızla beraber yardım belgeleri
vermiyorsanız böyle bir sorununuz da yoktur haliyle.

Az da olsa birşeyler çağrıştırıyor.

Mesaj metninin dikkatli bir şekilde yazıldığı belli oluyor.

Virgül gereksiz gibi duruyor ama mesaj olması gerektiği gibi.

Hangi dili kullanacağına karar veremeyen bir işletim sisteminden.
DOSYA:
AccessSubat2001.rar
Serkan Şahinoğlu
PC Magazine,
Şubat 2001
|