|
DB1.MDB
Projenizin başından sonuna kadar nelere dikkat etmelisiniz? Bitmiş bir Access
projesini nasıl dağıtmalı? İşte yeni teknikler ve yeni ipuçları.
Bu sayfalarda Access projelerinizin başından sonuna dek dikkat etmeniz
gerekebilecek önemli bazı ayrıntıları, uygulayabileceğiniz ilginç teknikleri ve
önemli ipuçlarını bulacaksınız. İşte yeni teknikler ve yeni kotarılmış ipuçları!
...
BİR ACCESS PROJESİ
Access dosyasını düzenli tutmamak, masamızı
sürekli dağınık bırakmak gibi sonradan can sıkıcı olabilir. Bir projeye
başlamadan önce yapılması önerilen ilk işlerden biri, proje için anlaşılır ve
kullanışlı dosya ve nesne adları belirlemektir.
Dosya gruplarından oluşmuş projeler gibi Access
dosyaları da obje gruplarından oluşur. Formlar, raporlar, modüller görünür
objedirler. Bununla beraber Access kendi içinde görünen ve görünmeyen birçok
objeyi barındırır.
Container (Konteyner) küme nesneleri, içlerinde
bildiğimiz objeleri, yani formları, raporları, tabloları, indeksleri ve diğer
nesneleri taşıyabilirler (DAO.Database.Containers). Bunlar dışında bizim
bilmediğimiz birçok görünmeyen objenin de bu tip konteynerler içinde bulunması
muhtemel.
Gelgelelim, bu gibi zor işleri Access yapıyor ve
bize olabildiğince az iş bırakıyor. Çoğunlukla seçenekler arasında dolaşıp
fareyle işaretleyerek bir Access projesi üretebiliyoruz. İşte bu kolaylıklar
yüzündendir ki, Access’in programlama aracı olamayacağı yönünde bir görüş de var
nitekim. Access’i yapanlar da “yapsak bir türlü, yapmasak iki türlü” diye dert
yanmaktadırlar herhalde!
|
DOSYAYA KİMLİK
Bir Access dosyasını oluşturduğunuzda bu
dosyaya adınızın kaydedildiğini unutmayın.
File > Database Properties (Dosya >
Veritabanı Özellikleri) menüsünü açın. Gerekli gördüğünüz alanları
doldurabilirsiniz. Buraya yazacağınız bilgiler dosyanız için genel amaçlı
açıklamalar niteliğinde olmalıdır.
Siz hiçbir şey yazmış olmasanız dahi, dosyayı
ilk oluşturduğunuzda bigisayarınızda kayıtlı olan isminiz ve diğer bazı
bilgileriniz Office’in diğer üyelerinde olduğu gibi Access’te de dosya
özellikleri sayfasına kaydedilecektir. Bu özellik hemen her Office
bileşeninde olmasına rağmen pek bilinmiyor ya da kullanılmıyor.
File > Database Properties menüsünü açıp özet
bilgileri yazın. |
 |
Buraya kadar aslında bir Office bileşeni olarak
bu Access dosyası hakkında genel bilgiler yazmış oldunuz. Uygulama ile ilgili
bilgileri ise başka iki bölümde yazmanız gerekiyor.
Tools > Startup (Araçlar > Başlangıç) menüsünü
açarak Application Title (Uygulama Başlığı) kutusuna bu uygulamanın Windows’ta
görüntülenecek açık adını yazın. Başlat panelinde buraya yazdığınız isim
görüntülenecektir.

Son olarak Tools > Macro > Visual Basic Editor
(Araçlar > Makro > Visual Basic Düzenleyicisi – ALT+F11) menüsü ile Visual Basic
Editor’ü açın. Tools > DBBir Properties (Araçlar > DBBir Özellikleri) menüsü ile
proje adını yazabilirsiniz. Project Name (Proje Adı) kutusuna uygun bir isim
yazmanız gerekiyor.

EN KOLAY SIRALAMA
Bazı programlarda bir listenin başlığını
tıklatınca ilgili veri alanına göre sıralama yapılıyor. Windows Gezgini ya da
Outlook Express’te bu şekilde kolayca sıralama yapılabiliyor. Access’te bunun
aynısını yapmamız için bir engel yok tabii ki.

İş biraz uzun ama yaptığınıza değecek cinsten.
Önce resimdeki gibi bir form oluşturun. Aşağı ve yukarı ok işaretlerini Webdings
yazıtipinden alacağız. “5” ve “6” karakterleri bu ok işaretlerine karşılık
geliyor. İki Label (metin etiketi) oluşturup bunları yeşil olarak
renklendirdikten sonra adlarını labelYonASC ve labelYonDESC olarak ayarlayın.
Üst şeritteki altı çizili label (etiket)
nesnelerinin adları sıra ile labelID, labelKitapAdi, labelYazar, labelYayinci,
labelYil, labelCeviren, labelGrup, labelGirisTarihi olacak. Yine bu etiketlerin
Tag özelliklerini sıra ile ID, KitapAdi, Yazar, Yayinci, Yil, Ceviren, Grup,
GirisTarihi olarak ayarlayın.
Aynı şekilde bu Label nesnelerinin
HyperlinkAddress özelliklerini de “ “ (sadece bir adet boşluk) olarak ayarlayın.
Son olarak Tablo1’deki uzun kodu bu formun kod sayfasında en üstteki
Option Compare Database
Option Explicit
‘(Bu satır yoksa ekleyebilirsiniz.)
satırlarının altına ekleyin.
Nihayetinde listede üstteki altı çizili isimleri
fareyle tıklatarak kolaylıkla artan veya azalan sıralama yaptırabilirsiniz.
Doğruca azalan sıralama yapmak için tıklama anında Shift tuşunu basılı tutmak
yeterli.

Yazar alanına göre ters sıralı.
Form
üzerinde kolay sıralama için gerekli kod
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long)
As Integer
Private Const VK_SHIFT = &H10
Private Sub Sirala(labelx As Label)
On Error Resume Next
Dim fieldx As String
fieldx = labelx.Tag
If ((OrderBy = fieldx) Or (GetKeyState(VK_SHIFT) < 0)) Then
‘Shift tuşu basılı ise ters sırala.
OrderBy = fieldx & " DESC"
labelYonASC.Visible = False
labelYonDESC.Visible = True
labelYonDESC.Left = labelx.Left + labelx.Width - 60
labelYonDESC.Top = labelx.Top - 20
Else
OrderBy = fieldx
labelYonDESC.Visible = False
labelYonASC.Visible = True
labelYonASC.Left = labelx.Left + labelx.Width - 60
labelYonASC.Top = labelx.Top - 20
End If
OrderByOn = True
End Sub
Private Sub Form_Error(DataErr As Integer, Response As Integer)
Select Case DataErr
Case 7983: 'Hyperlink Hatası
Response = acDataErrContinue
End Select
End Sub
Private Sub labelCeviren_Click()
Sirala labelCeviren
End Sub
Private Sub labelGirisTarihi_Click()
Sirala labelGirisTarihi
End Sub
Private Sub labelGrup_Click()
Sirala labelGrup
End Sub
Private Sub labelID_Click()
Sirala labelID
End Sub
Private Sub labelKitapAdi_Click()
Sirala labelKitapAdi
End Sub
Private Sub labelYayinci_Click()
Sirala labelYayinci
End Sub
Private Sub labelYazar_Click()
Sirala labelYazar
End Sub
Private Sub labelYil_Click()
Sirala labelYil
End Sub
‘Her bir başlık etiketinin Click (Tıklatıldığında) olay
‘yordamını ve formun Error yordamını Özellikler
‘penceresinde bu yordamlarla ilişkilendirin. |
Formlarda sol tarafta bulunan kayıt seçicilerden
sıkıldıysanız aşağıdaki adımları takip ederek kendi kayıt seçicilerinizi
yapabilirsiniz. Öncelikle Otomatik Sayı (AutoNumber) benzeri bir veri alanı
kullanılması gerekiyor. Bu örnekte ID adlı bir AutoNumber alan olduğu
varsayılıyor.
Formunuzun sol tarafına bir metin kutusu
(Textbox) yerleştirin. Boyunu yeteri kadar kısaltın. Özellikler (Properties)
penceresinden, aşağıdaki değerleri ayarlayın:
Ad (Name) = Secici
Enabled (Seçili?) = No (Hayır)
Locked (Kilitli) = Yes (Evet)
BackStyle (Arkaplan Biçimi) = Transparent (Saydam)
BorderStyle (Kenarlık Biçimi) = Transparent (Saydam)
FontName (Yazıtipi) = Webdings
Bu değerleri atadıktan sonra formun Current olay yordamını aşağıdaki gibi
düzenleyin:
Private Sub Form_Current()
Secici.ControlSource = "=IIf([ID]=" & _
Nz(Me!ID, 0) & ",'8','4')"
End Sub

Sol tarafta kendi kayıt seçicimiz duruyor.
Resimdeki gibi kayıt seçicimiz sol tarafta
duruyor. Metin kutusunun üzerindeki resmin görüntülenmesi için Webdings yazıtipi
sistemde yüklü olmalı.
LİSTEYİ SÜZ
Kayıtlarınızı belli gruplara göre ayırmak
istiyorsanız Access’in süzme özelliğini kolaylıkla kullanabilirsiniz. Bizim
yöntemimiz için bir Combobox (Açılan Liste Kutusu) nesnesi gerekiyor. Adı
cmbFiltre. Açılışta ilk değeri görüntülemek için listenin Default Value (Geçerli
Değer) özelliğini “(Tümü)” olarak atayın. RowSource (Kayıt Kaynağı) özelliğini
de alttaki şekilde ayarlayın:
(
SELECT Grup as GrupAdi,
COUNT(Grup) AS Adet
FROM Kitaplar
GROUP BY Grup
)
UNION
(
SELECT "(Tümü)" as GrupAdi,
COUNT(ID) as Adet
FROM Kitaplar
);
Sonra bu listenin AfterUpdate (Güncelleştirme Sonrası) olay yordamını şu şekilde
düzenleyin:
Private Sub cmbFiltre_AfterUpdate()
If IsNull(cmbFiltre) Then Exit Sub
Dim orderbyx As String, orderbyonx As Boolean
‘Eski sıralama korunacak.
orderbyx = OrderBy
orderbyonx = OrderByOn
If cmbFiltre = "(Tümü)" Then
Me.RecordSource = "Kitaplar"
Else
Me.RecordSource = "SELECT * FROM Kitaplar " & _
"WHERE Grup='" & cmbFiltre & "'"
End If
OrderBy = orderbyx
OrderByOn = orderbyonx
End Sub

KAYDA GİT
DBBir programımıza şimdi de kayda gitme özelliği eklememiz gerekiyor. Önce txGit
adlı bir metin kutusu (Textbox) oluşturun. Buna yazdığınız metni Kitap adları
arasında bulmak için şu kodu kullanın:
txKitapAdi.SetFocus
DoCmd.FindRecord txGit, acAnywhere, , acDown, , , False
Kolaylık olması için F5 tuşuna basınca bu metin kutusuna odaklanmayı sağlayalım.
Formun KeyPreview adlı özelliğini True, formdaki KeyDown (Tuşa Basarken)
yordamını da alttaki gibi yapın:
Private Sub Form_KeyDown(KeyCode
As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyF5: txGit.SetFocus
End Select
End Sub
Bu örnek görüntülenen kayıt kümesi üzerinde aranan değeri bulup getirmeyle
ilgiliydi. Peki görünen kaydın ayrıntılı bilgilerini başka bir formda göstermek
için ne yapmalıyız?
Bunun birkaç yolu var. Bizim yöntemimizde önce ayrıntılı bilgilerin yer aldığı
detay formu oluşturulmalı. Ardından bu detay formunun RecordSource (Kayıt
kaynağı) özelliğini şu şekilde ayarlayın:
SELECT Kitaplar.* FROM Kitaplar
WHERE ((ID=[Forms]![Kitaplar_Liste]![ID]));
Ana formumuzun adını Kitaplar_Liste olarak belirlediğim için bu kodda da aynı
adı kullandım. Tabii detay formunu açmadan önce bu liste formunun açık olması
gerekiyor. Bu formu açtığınızda liste formunda görünen kaydın ayrıntısı
açılacaktır.
ODE TOOLS İLE PROJENİZİ DAĞITIN
Geldik DBBir projesinin dağıtım paketinin hazırlanmasına. Amacımız DBBir
projesinin kod ve tasarım bilgilerini tamamen gizlemek ve programın Access
kurulu olmayan bilgisayarlarda çalıştırılmasını sağlamak.
Tasarım bilgilerini gizlemek için Tools > Database Utilities > Make MDE File
(Araçlar > Veritabanı Seçenekleri > MDE Dosyası Yap) menüsü ile MDE dosyasını
oluşturun. Bunu yaptığınızda derlenmiş yeni MDE dosyasında tasarım ve kod
bilgileriniz tamamen gizlenmiş olacaktır.
Dağıtım işini ise ODE Tools ile yapacağız. Öncelikle ODE Tools’un
bilgisayarınızda kurulu olması gerekiyor (Bilgi için Nisan 2001 tarihli PC
Magazine’deki Access yazısı).
Öncelikle birkaç ayrıntının aklınızın bir köşesinde bulunmasında fayda var.
Kurulumu hazırladığınız bilgisayarda Access’in hangi dilde olduğuna dikkat edin.
Programınız hep o dili kullanacaktır.
ODE Tools ile hazırladığınız kurulum programı iki temel bileşenden oluşur. Sizin
program dosyalarınız ve Access Runtime.
Access Runtime programınızı çalıştıracak modüldür ve her bilgisayara sadece bir
kez kurulması yeterlidir. Zaten bu modül disk üzerinde tek başına 70 MB. yer
kaplıyor. Bu durumda hazırladığınız paket ortalama 75 MB. büyüklüğünde
olacaktır. İsterseniz kurulum hazırlarken Access Runtime modülünü
eklemiyorsunuz. Bu durumda 3 MB. civarında bir paket çıkıyor ortaya.
Bir kereye mahsus olarak 75 MB. büyüklüğünde bir paket hazırlayıp sonraki
paketlerinize Access Runtime eklemeyebilirsiniz.
KURULUM PAKETİ HAZIRLAMA
ODE Tool’un bir önceki sürümü kurulumdan sonra kendisini Programlar menüsüne
yerleştiriyordu. ODE Tools 2000 kurulduğunda ise kendisini bulabilmek için biraz
çaba sarfetmek gerekiyor.
ALT+F11 ile Visual Basic Editor’ü açıp Add-Ins > Add-In Manager menüsü ile VBA
package And Deployment Wizard’ı yüklemek gerekiyor. Bu haliyle Add-Ins menüsü
altında Package And Deployment Wizard menüsü belirecektir. Bunu çalıştırmadan
önce Access dosyasının Exclusive (tek kullanıcı oturumu) modda açılması gerekli.

Dosyayı kapatın ve dosya açma penceresinde dosyayı seçip sağ alttaki düğmeyi
Open (Aç) durumundan Exclusive Open haline getirin. Exclusive olarak açtıktan
sonra Visual Basic Editor’e geçip ilgili menüyü çalıştırın. Açılan formdan
Package’yi tıklatın.

Devam eden sayfalarda önerilen komutları seçin. Gerekli görmüyorsanız ilerleyen
sayfalardaki seçeneklerin biri ile Access Runtime’i kurulum paketinize dahil
etmeyebilirsiniz.

Zira ilk seferde onlarca megebayt büyüklüğünde bir paketle karşı karşıya
kalabilirsiniz. Öncelikle Microsoft.com sitesinde önerilen bazı güncellemeleri
yapmanız gerekebilir.
MOD2000: Access 2000 Run-Time Minimum Now Available for Download
http://support.microsoft.com/support/kb/articles/Q243/9/57.ASP
Kurulum hazırlama anında hatalarla karşılaşırsanız dosyanızda gereksiz yüklenmiş
olan bazı başvuruları kaldırmayı deneyin. Visual Basic Editor > Tools >
References.
Aynı şekilde hazırlama işlemi çok uzun sürüyorsa paketinize yüzlerce dosyanın
ekleniyor olması muhtemeldir. Hazırlık aşamasında “Include Access Runtime”
seçeneğini işaretlerseniz “C:\Program Files\Microsoft
Office\ODETools\V9\Runtime” klasörünün tamamı paketinize dahil edilir. Ben bu
klasörün yedeğini aldıktan sonra içindeki gereksiz olduğunu düşündüğüm bazı
dosya ve klasörleri sildim.
Herşey olması gerektiği gibi ise ODE Tools ile, nasıl yapıldığını anlatmama
gerek kalmayacak kadar kolay bir şekilde dağıtım paketinizi (setup)
hazırlayabilirsiniz.
|
HERKES İÇİN SORGULAR |
GRUPLAYARAK TOPLAMLAR ALMAK
Sorgularla ilgili en çok sorulan sorulardan biri gruplamalar hakkında.
- Her ürün ana grubunun içinde kaç adet ürün var?
- Her güne ait toplam satış tutarını nasıl hesaplayacağım?
Yukarıdakiler gibi sorularınız varsa GROUP BY deyimini kullanmanız gerekiyor
demektir. Bunu en kolay yapabileceğimiz yer Access’teki Query Builder.
Yeni bir Query (Sorgu) oluşturup içine Kitaplar tablosunu ekleyin. Veri
alanlarını alttaki sütunlara yerleştirip View > Totals (Görünüm > Toplamlar)
menüsünü seçin ve Query1 resmindeki gibi sorguyu düzenleyin.
Bu haliyle sadece grup adını ve o grupta kaç kitap olduğunu bulmuş oluyoruz.
Geçen aylarda bahsettiğimiz UNION sorgu türü ile toplam kitap adedini de bu
sorguya dahil edelim.
SELECT GrupAdi, Adet
FROM
(
SELECT Grup as GrupAdi,
COUNT(Grup) AS Adet, 0 AS Sira
FROM Kitaplar
GROUP BY Grup
UNION
SELECT "(TOPLAM)" as GrupAdi,
COUNT(ID) as Adet, 1 AS Sira
FROM Kitaplar
)
AS Liste
ORDER BY Sira, Adet DESC;

Query2 resminde gördüğünüz gibi her bir grup adını ve içinde kaç adet kitap
olduğunu listelemekle beraber en altta da toplam kitap adedini göstermiş
oluyoruz.
Sorguda kullandığımız Sira adlı alan UNION sorgu içindeki farklı iki kümeyi
birbirinden ayırmak içindi. İlk kümeyi 0, ikincisini de 1 yapıp bu alanı en
altta ORDER BY içine yerleştirmek yeterli oluyor.
Genel olarak adet bulma işlemleri için COUNT deyimini kullanmalısınız.
Toplam hesaplamak için ise SUM deyimi kullanılıyor. AVG, MIN, MAX, STDEV,
FIST, LAST gibi deyimlerle de ortalama, en küçük, en büyük, standart sapma,
ilk, son gibi değerleri elde edebilirsiniz. |
AÇILIŞTA TAM EKRAN OLSUN
Üzerinde uzun süredir çalıştığınız projenizin hep aynı şekilde açılması kolaylık
getirecektir. Ben veritabanı penceresinin hep tam ekran açılmasını tercih
ederim. Bunun için Makrolar (Macros) sayfasında AutoExec adlı yeni bir makro
oluşturmak yeterli.
Access açıldığında her zaman AutoExec adlı bir makro arar ve bulursa onu
çalıştırır. Windows’taki Autoexec.bat dosyası gibi. Bu makroyu oluşturduktan
sonra ilk satırda Action sütununa gelip listeden “Maximize”yi seçin ve makroyu
kaydedip kapatın. Bundan sonraki her açılışta veritabanı penceresi tam ekran
açılacaktır.
Aynı şekilde Tools > Startup (Araçlar > Başlangıç) menüsündeki seçenekleri
kullanarak projenizin başlığını, başlangıçta açılmasını istediğiniz formları
burada belirleyebilirsiniz. Gerekiyorsa veritabanı pencerenizi gizlemeniz,
kısayol tuşlarını kısıtlamanız mümkün. Böylece gizlediğiniz veritabanı
penceresini kimsenin görmemesini sağlamış oluyorsunuz.
DOSYANIN İÇİNİ KİMSE GÖRMESİN
AutoExec makrosu ve diğer başlangıç seçeneklerini bir şekilde es geçme şansımız
vardır. Bir Access dosyasını açarken klavyede Shift tuşunu basılı tutarsanız
AutoExec makrosu çalıştırılmaz. Aynı şekilde diğer başlangıç seçenekleri de
geçerli olmayacaktır. Buna Tools > Startup menüsündeki Application Title
(Uygulama Başlığı) özelliği ve veritabanı penceresinin görüntülenmeme seçeneği
de dahil.
Fakat bunu da gidermenin yolu var. Aşağıdaki kodu kullanarak dosyanızın Shift
tuşu ile açılıp içindeki tabloların, sorguların ve diğer nesnelerin
görüntülenmesini engelleyebilirsiniz. Öncelikle Başvurular (References)
listesinden DAO’yu yüklemiş olmanız gerekiyor.
Dim db As Database
Set db = OpenDatabase("c:\db1.mdb")
Dim prop
Set prop = db.CreateProperty("AllowByPassKey", DB_BOOLEAN, False)
db.Properties.Append prop
db.Close
Bu şekilde Access dosyasının içinde, geçerli olarak False değerli AllowByPassKey
adlı bir Property oluşturuluyor. Böylelikle Shift tuşu basılı olarak açılsa da
başlangıç seçeneklerinde belirlediğiniz veya gizlediğiniz özellikleri kimse
göremeyecektir.
DOSYANIN İÇİNİ KİMSE GÖRSÜN!
Üstteki kodu kullanarak Shift ile dosyanızın açılmasını engellediğinizi
kesinlikle sağlayabileceğinizi mi düşünüyorsunuz? Maalesef bunu da aşmanın yolu
yok değil. Dosyanız MDE dosyası olsa da.
Dim db As Database
Set db = OpenDatabase("c:\db1.mdb")
db.Properties("AllowByPassKey") = True
db.Close
Ama unutmayın ki, bunu ancak Access’te kod yazmayı bilen bir kişi yapabilir.
Kullanıcılarınız Access’te kod yazmayı bilmiyorsa üstteki örneği de denemeye
uğraşmazlar herhalde.
Programınızı güvenli dağıtmak istiyorsanız tek önerim MDE dosyası olarak
derlemeniz. Ne kadar kısıtlasanız ya da parola koysanız da, bunu çözen
programlar Internet’te mevcut.
ETİKET DEDİĞİN YAPIŞKAN OLMALI
Form üzerine yeni bir metin kutusu (Textbox) yerleştirdiğimizde geçerli olarak
yanına bir de metin etiketi (Label) iliştiriliyor. Kutuyu taşısanız da bu
yapışkan etiket onunla hareket ediyor. Buna gerek olmadığı durumlarda etiketi
seçip silebiliyoruz. Fakat bazan buna tekrar ihtiyacımız olabiliyor.
Forma yeni bir metin etiketi (Label) yerleştirin. Bunu seçip klavyede CTRL+C
tuşlarına basarak hafızaya alın. Sonra yapıştırmak istediğiniz metin kutusunu
seçerek CTRL+V ile etiketi kutuya yapıştırın.
Yazıdaki örnekleri PC Magazine Online sitesinde Dergide Adı Geçen Dosyalar
bölümündeki dosyada bulabilirsiniz.
Güneşli güzel günler...
DOSYA:
accessdb1.rar
Serkan Şahinoğlu
PC Magazine,
Haziran 2001
|