BilgiTeknoloji.net    
b i l g i   t e k n o l o j i   y a z ı l ı m

Ana Sayfa

Marjinal XML Access Pratik Uygulamalar Projeler Ekonometri Dilimiz Çetrefil İletişim
 

DAO Gitti ADO Geldi


DAO gideli, ADO geleli epey oldu. Birçokları için artık eskimiş ADO’yu evirip çeviriyoruz bu ay.


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


http://BilgiTeknoloji.net