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
 

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.

 
KAYIT SEÇİCİLERDEN SIKILDIYSANIZ

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


http://BilgiTeknoloji.net