İLERİ ACCESS

İki dosya bloğu Frontend ve Backend etiketli arası çift yönlü kalın ok üstte koyu kırmızı Access A logosu

"Access'i biliyorum — tablo açar, form çekerim." Bu cümle çoğu kullanıcı için temel seviyenin doğru bir özetidir. Ama gerçek üretim ortamı sorunlara dönüştüğünde — 50 bin kayıtlık sorgu 12 saniyede çalışıyorsa, fatura formu her açılışta donuyorsa, üç kişi aynı anda kaydet'e bastığında veri çakışıyorsa — temel seviye biter, ileri Access başlar.

İleri Access Nedir?

İleri Access; karmaşık sorgu yapıları, makro ve VBA ile otomasyon, olay tabanlı form/rapor mantığı, çok kullanıcılı senaryolar ve performans optimizasyonunu kapsayan üst seviye Access pratiğidir. Wizard'la üretilen uygulamayı bırakıp, kod yazılı denetimli bir uygulama kurma sürecidir.

Karmaşık Sorgular

Sorgu motorunun gücünü kullanmadan Access'ten verim almak zordur. İleri seviyede karşılaşılan tipik sorgu yapıları:

  • Alt sorgular (subqueries): WHERE veya SELECT içinde başka SELECT çalıştırma. Örneğin "ortalamadan yüksek satış yapan müşteriler" tek sorguda çıkar.
  • UNION sorguları: Birden fazla tablodan veya sorgudan gelen sonuçları tek listede birleştirme. Eski ve yeni müşteri tablolarını birlikte raporlamak için ideal.
  • Crosstab (Çapraz): Satır-sütun pivot yapısı. Ay/şube kırılımında satış tablosu için pratik.
  • Pass-through: SQL Server'a ham SQL gönderir. Access motorundan çıkar, sunucuda çalışır — büyük veri için zorunludur.
  • Action queries: INSERT, UPDATE, DELETE ile toplu veri işleme. Yıl sonu kapanışta 200 bin kaydı tek tıkta arşivlemek için.

Bir pratik örnek: "Son 30 günde sipariş vermemiş ama geçen yıl en az 5 sipariş veren müşterileri bul" ihtiyacı. Bu, alt sorgu içeren bir SELECT ile çözülür:

SELECT MusteriID, MusteriAdi FROM tblMusteri WHERE MusteriID NOT IN (SELECT MusteriID FROM tblSiparis WHERE SiparisTarihi >= Date()-30) AND MusteriID IN (SELECT MusteriID FROM tblSiparis WHERE Year(SiparisTarihi) = Year(Date())-1 GROUP BY MusteriID HAVING Count(*) >= 5);

Makro ve VBA

Access'te otomasyonun iki yolu vardır: Makrolar ve VBA. Genel kural: küçük basit işler için makro, karmaşık iş mantığı için VBA. Makrolar son sürümlerde güçlendirilmiş olsa da hata yönetimi, döngü ve veri manipülasyonunda VBA hâlâ baskın çözümdür.

Tipik VBA Görevleri

  • Form üzerindeki butona basıldığında kayıt kontrol etmek, eksikse uyarı vermek
  • Toplu veri içe aktarmak, hatalı satırları ayrı tabloya yazmak
  • Outlook üzerinden otomatik e-posta gönderim raporu hazırlamak
  • Excel'e biçimlendirilmiş çıktı üretmek (özet tablo, koşullu renklendirme)
  • Açılışta kullanıcı adına göre menü göstermek

Basit bir form öncesi doğrulama kodu:

Private Sub Form_BeforeUpdate(Cancel As Integer)
  If IsNull(Me.MusteriAdi) Or Len(Trim(Me.MusteriAdi)) < 3 Then
    MsgBox "Müşteri adı en az 3 karakter olmalı."
    Cancel = True
    Me.MusteriAdi.SetFocus
  End If
End Sub

VBA editör penceresinde Form_BeforeUpdate olay prosedürü kod satırları kayıt doğrulama Türkçe mesaj

Form ve Rapor Olay Yönetimi

Olay (event), form veya rapor üzerinde gerçekleşen anlardır: Form açıldığında (OnOpen), kayıt değiştiğinde (OnCurrent), buton tıklandığında (OnClick), kayıt güncellenmeden önce (BeforeUpdate). Güncel özellikler ve seçenekler Microsoft'un Access destek sayfasında listelenir. İleri Access uygulamalarında iş mantığının çoğu doğru olay üzerine yerleştirilmesinden geçer.

Yaygın hata: Tüm doğrulama kodunu butonun OnClick'ine yazmak. Doğru yaklaşım, BeforeUpdate olayında doğrulama yapmaktır — kullanıcı butonu tıklamasa da Ctrl+S veya başka kayıt atlamayla veri kaydedilebilir.

Sürekli Form ve Koşullu Biçimlendirme

Continuous Form (sürekli form), kayıt listesini Excel benzeri tek ekranda gösterir. Koşullu biçimlendirme ile geciken siparişler kırmızıya, biten projeler yeşile boyanır. Form üzerinde Conditional Formatting menüsü ile veya VBA'da Format olayında ayar yapılır.

Çok Kullanıcılı Çalışma

Tek kullanıcılı Access kolaydır; üç kullanıcı eklendiğinde işin doğası değişir. Kritik konular:

  • Kilit stratejisi: Record-Level Locking varsayılan açıktır. Edited Record (kaydı sadece düzenleyen kilitler) çoğu senaryoda doğru tercihtir. "No Locks" optimistik kilit demektir ve son güncellemenin kazanmasına yol açar.
  • Frontend/Backend ayrımı: Tek dosyada çok kullanıcı çalışmaz. Tablolar ayrı bir backend'de tutulur, frontend her kullanıcının bilgisayarında bulunur.
  • ldb/laccdb dosyası: Backend'in yanında oluşur, kim bağlı olduğunu gösterir. Sıfır byte boyutu sorun değildir; bir kullanıcı bağlıyken silinmemelidir.
  • Çakışma yönetimi: İki kullanıcı aynı kaydı düzenlerse ikinci kaydedene Access uyarı verir. Bu uyarıyı sessizce geçmek yerine kullanıcıya anlamlı mesajla göstermek üretim deneyimini iyileştirir.

Performans Optimizasyonu

İleri Access'te performans çoğu zaman sorgu seviyesinde kaybedilir. Pratik kontroller:

  1. İndeks ekleyin: WHERE veya JOIN'de kullanılan alanlara indeks tanımlayın. Tek başına çoğu zaman 10 kata yakın hızlanma sağlar.
  2. SELECT * kullanmayın: Yalnızca gerekli alanları seçin, özellikle ağ üzerindeki backend'de fark büyük.
  3. Subform recordsource'unu daraltın: 50 bin satırdan oluşan kayıt kaynağına bağlı subform yavaş açılır. WHERE filtresiyle ihtiyaç kadar veri çekin.
  4. DAO yerine DAO recordset.MoveLast: Bazı sayım işlemleri için doğru olan DCount, döngüde recordset açıp saymaktan kat kat hızlı.
  5. Backend'i compact edin: Ayda bir, sorgu süreleri uzamaya başladığında derhal.

İleri seviye konuları sistematik öğrenmek için ileri Access eğitim programı sayfası kapsamlı bir yol haritası sunar. Temellerden başlamak gerekiyorsa kapsamlı Access eğitimi tablodan rapora kadar tüm bileşenleri tek programda işliyor.

İleri Access'e Geçiş Eşiği

Çoğu kullanıcı için ileri Access'e geçiş, ihtiyacın baskısıyla olur. Form üzerinde wizard yetmediği, sorgu wizard'la kurulmadığı, üç kişi aynı anda bir kayda baktığında çakışmalar başladığı anda eşik aşılır. Bu eşikten sonra geri dönüş yoktur; Access bir veritabanı geliştirme platformu olarak deneyimlenir, sadece bir form tasarımcısı olarak değil.

Sıkça Sorulan Sorular

Access'te makro mu VBA mı kullanmalıyım?

Basit otomasyonlar için (form açma, rapor yazdırma, kayıt arama) makro yeterli ve daha güvenli. <strong>Karmaşık iş mantığı için VBA gerekir</strong>; hata yönetimi, döngü, koşullu işlem, dış sistem entegrasyonu bu kapsama girer. Üretim ortamındaki ciddi uygulamalar büyük oranda VBA'ya dayanır.

Pass-through sorgu ne zaman kullanılır?

Backend SQL Server veya başka bir RDBMS olduğunda kullanılır. <strong>Access motorunu devre dışı bırakır</strong>, SQL ifadesini doğrudan sunucuya gönderir. Büyük tablolarda, sunucu tarafı stored procedure çağrılarında ve karmaşık SQL fonksiyonlarında Access çok daha hızlıdır.

VBA hatalarını nasıl yönetmeliyim?

Her prosedürün başında On Error GoTo etiketi tanımlanır, sonunda hata yakalama bloğu yer alır. Err.Number ve Err.Description ile hata detayı alınır, kullanıcıya anlamlı mesaj gösterilir ve hata log tablosuna yazılır. Boş Resume Next kullanımı tehlikelidir, sessizce hatayı saklar.

Continuous Form ile DataSheet View arasındaki fark nedir?

DataSheet View Excel benzeri sade tablo görünümüdür, tasarımı sınırlıdır. Continuous Form ise her satırı küçük bir form gibi gösterir; alt-üst boşluk, <strong>koşullu biçimlendirme</strong>, butonlar ve farklı kontroller eklenebilir. Tasarım esnekliği gerekiyorsa Continuous Form tercih edilir.

Access'te 100 binin üzerinde kayıt sorun olur mu?

Doğrudan tablo olarak çok büyük rakam değil; tablo başına 2 GB sınırı vardır. Asıl sorun ağ üzerinde sorgu performansıdır. 100 bin kayıt üzerinde <strong>indeksli sorgular hızlı çalışır</strong>, indeksiz tarama yavaştır. Çok büyük tablolarda backend'i SQL Server'a taşımak doğru karardır.

Aynı anda kaç kişi VBA içeren bir Access uygulamasını kullanabilir?

Frontend/backend ayrımı yapılmış ve doğru kilit stratejisi seçilmişse 15-25 eşzamanlı kullanıcı sorunsuz çalışır. VBA kodu frontend'de olduğu için her kullanıcının kendi kopyası vardır, kod çakışması olmaz. Veri çakışmaları kilit ayarlarıyla ve uygulama içi mantıkla yönetilir.

VBA modülünü başka bir veritabanına nasıl taşırım?

VBA editöründe modül üzerine sağ tık, Export File ile .bas dosyası olarak dışa aktarılır. Hedef veritabanında VBA editöründe File &gt; Import File ile içe alınır. Form ve rapor için Application.SaveAsText ve LoadFromText komutları aynı işi yapar; metin dosyası Git ile versiyon kontrolüne uygundur.