SUPERBASE PROFESSIONAL

Merhaba.... Bir aylık aradan sonra köşemizde yine sizlerle birlikteyiz. Geçen ay Superbase'in kalbi diye nitelediğimiz Query konusuna başlamıştık. Siz de örneklerle incelediyseniz, önemini kavramışsınızdır. Anlayamadığınız kısımlar olursa, yazın cevaplayalım. Bu arada geçen ayki yazıda pikaj hatasından dolayı Query konusu resimleri dışında gelecek konuların resimleri girmiş. Aslına bakarsanız görsel olarak yazıdan daha hızlı ilerlemişiz. Şaka bir yana, bu hatadan dolayı özür dilerken, resimlerle ilgili konuların atlanmış olmadığını belirtmek isteriz. Sırası geldikçe her konu tek tek açıklanacaktır.

Query Report: Bazı raporlarda, alan bilgilerinin ara toplamlarını ya da tamamının toplamını almak isteyebilirsiniz. Superbase, bir query içinde bu tür özellikleri belirtmenize olanak sağlar. Query penceresinde bu tanımlamaları yapacağınız kısım, Report olarak etiketlenmiş satırdır. Bu tür herhangi bir tanımlama yapmayacaksanız, bu satırı boş bırakırsınız.

Tıpkı Labels gibi, Report kutusu tıklandığında Query Report diyalog penceresi açılır. Kullanımı operatör kutuları dışında diğer pencereler gibidir.

Query Report diyalog penceresi, 4 ana bölümden oluşur: Üzerinde dosya isimleri kutusu ile solda Alan ismi paneli, sağında seçimler için kullanılacak düğmeler ve değer kutusu, altta komut satırı ve en altta da pencereden çıkış için kullanılacak düğmeler.

Dosya seçimi ve alan seçimi işlemlerini artık biliyoruz. İsterseniz verilecek özellikler için kullanılacak düğmeleri kısaca açıklayarak devam edelim ve bir örnekle pekiştirelim:

SUMMARIZE (Özetleme): Rapor tüm dataları saklayacak, sadece SUM'ı takip eden fonksiyondan çıkan sonuç bilgilerini gösterecektir.

REPORT (Rapor): Bu düğme seçili ise, yapılan seçimler rapor içindeki bir gruba bağlı olmaksızın raporun tamamına uygulanır.

GROUP (Grup): Bu düğme seçili ise, yapılan tanımlamalar sadece rapor içindeki bir Alan Grubuna uygulanacaktır.

SUM (Toplama): Bu sözcüğü takip eden alanların, Report ya da Group seçimine bağlı olarak ara toplamları ya da genel toplamları alınır.

MEAN (Ortalama): Bu sözcüğü takip eden alanların, Report ya da Group seçimine bağlı olarak ara ya da genel ortalamaları bulunur.

COUNT (Sayma): Report ya da Group seçimine bağlı olarak, tüm raporun ya da bir grubun kayıtları sayılır.

Superbase, toplam ve ortalama bilgilerini belirtilen alana, o alanın nümerik formatı ile yazar. Sayma sonucu ise, her grubun en sol kolonuna yazılır.

Tanımlamalarda sürekli grup, grup deyip durduk. "Peki nedir bu grup?" diye sorduğunuzu duyar gibiyiz. Grup, bir raporun içerdiği belli kıstaslara göre sınıflanabilen kayıt serileridir. Mesela alacaklarınızı tuttuğunuz bir müşteri dosyasındaki kayıtları, şehirler hatta semtlere göre gruplar halinde sınıflanmış olarak raporlayabilirsiniz.

BİR RAPOR HAZIRLAYALIM: Raporlama konusunu daha iyi açıklayabilmek için, bir örnek üzerinde açıklama yapmak daha doğru olacak. Yine bir takım dosyaların var olduğunu düşünerek örneğimizi açıklayacağız. Sizler ya gerçekten var olan dosyalarınız üzerinde çalışırsınız ya da kullanımınıza uygun dosyalarınızı oluşturursunuz.

Örneğimizde, alacak hesaplarımızı tuttuğumuz bir ALACAKLAR dosyamızın olduğunu varsayacağız. Dosyada müşterinin adı ve adresi dışında toplam borç miktarları ile borç bakiyeleri tutuluyor. Belirli dönemlerde aldığımız raporlar ile tahsilat planı çıkartıyoruz.

Müşterilerin, bulunduğumuz şehir dışında da bulunduğunu düşünürseniz, tahsilat planı için belirli yerleşim yerlerinin sınıflanarak raporlanması gerekir. Bu tür bir rapor için, öncelikle coğrafi bir gruplama söz konusu. Dosyadaki tüm bilgiler, şehirlere ve semtlere göre gruplanarak borç bakiyeleri ile birlikte dökülecek ve hem ara hem de genel toplamlar alınarak her gruptaki kayıt miktarı da sayılacak. İsterseniz şimdi tüm bu işlemleri adım adım birlikte yapalım:

Query Edit seçeneği ile açılan query tanımlama penceresinde, Report kutusunu klikleyerek Query Report penceresini açalım ve devam edelim:

1. Penceredeki Report düğmesini klikleyerek yapılacak tüm seçimlerin raporun tamamına uygulanmasını sağlayalım.

2. SUM düğmesini klikleyerek seçilen nümerik alanların toplanacağını belirte-

3. Alan ismi panelinden toplanacak sayısal alanların seçimini yapalım: Toplam Borç, Bakiye. Superbase, bu adımlarda yapılan tüm seçimleri ana komut satırına aktarır. Buralarda her şeyi uygun olarak yaptıysanız, komut satırı aşağıdaki gibi görünecektir:

REPORT SUM Toplam Borç.Bakiye

4. Gruplayarak topladığı kayıtları saymasını ve toplamı raporun sonuna yazmasını da istiyoruz. Bu işlem için kullanılacak seçenek düğmesi, COUNT.

Bu düğmeye de klik yaptığınızda, satırın son durumu:

REPORT SUM Toplam Borç,Bakiye COUNT

olur. Burada en önemli konu, yapılacak sırasının doğru olarak verilmesidir. Alan ve operatörlere rastgele basılırsa, anlamsız raporlar, hatta uyumsuz data alanı ve operatörler kullanmanız sebebiyle "Can't do this" (Yapılamaz) mesajı alabilirsiniz.

Şimdi sıra rapordaki farklı gruplar için farklı özellikleri tanımlamaya geldi. Bu prosedür de tıpkı raporun tamamı için olduğu gibidir:

1. Gruplama için GROUP operatörünü kullanacağımızdan bahsetmiştik. Group düğmesi kliklenerek ana komut satırına aktarıldıktan sonra, gruplamada kullanılacak alan ismi seçilir. Her GROUP sözcüğünü bir alan ismi takip eder.

Örneğimizde gruplamada kullanacağımız ilk alan, Şehir. Bu kıstasla, Superbase'in yapacağımız belirlemeleri verilen isimdeki gruplara uygulamasını sağlayacağız:

GROUP Şehir

Burada tanımlanan grup alanı, Query Order komut satırında da kullanılmış olabilir. Gruplama alanının text alanı olması en iyisidir, ancak kullanım amacına göre tarih ve sayı alanları da kullanılabilir.

2. Rapor sonunda alacağımız genel toplamdan başka, şehir şehir grupların toplamlarını da almak istediğimize göre yine SUM operatörünü toplanacak alanları belirterek ekliyoruz:

GROUP Şehir SUM Toplam Borç.Bakiye

3. Her gruba giren kayıt miktarının sayılmasını istiyoruz:

GROUP Şehir SUM Toplam Borç, Bakiye COUNT

Bu komutla aynı şehirde kaç kayıt olduğunu saydırıyoruz.

Evet... Sıra geldi şehirler içindeki semtlerin ve bu şehirlere bağlı kasabaların gruplanmasına. Semt veya ilçe bilgisinin dosya tanımında Adres2 diye bir alanda tanımlandığını düşünün. Bu durumda, yeni gruplama alanımız Adres2. Adres2 alanını da grup olarak belirtip, aynı genel rapor özellikleri ve şehir gruplamasında olduğu gibi, grup aratoplamı ve kayıt sayısını istiyoruz:

GROUP Adres2 SUM Toplam Borç.Baki- 
ye COUNT

Query Report penceresi ana komut satırına bu tanımlamayı da eklediğimizde, komutun son durumu şöyle olur:

REPORT SUM Toplam Borç.Bakiye 
COUNT GROUP Şehir SUM Toplam 
Borç.Bakiye GROUP Adres2 SUM Top- 
lam Borç.Bakiye COUNT

Bu komutu verip ekrana döküm aldığınızda, yaptıklarımızın anlamını daha iyi kavrayacağınızdan şüphemiz yok.

Adres2 grubu, şehir grubundan sonra tanımlandığı için, komutta şehir grubu dış grup olarak kabul edilir. Bu sıralamada tek bir kural mevcut: Alan grupları en dış seviyeden içe doğru verilir.

TOPLAM BORÇ

25000000.00 3000000.00

BAKİYE 12.400.000,00 288.000,00

28000000.00 15280000.00

1250000.00 200000.00

1250000.00 200000.00

300000.00 150000.00

300000.00 150000.00

29550000.00 15630000.00

ADI VE SOYADI DENİZ KARA ALİ SAPMAZ

Group Count 2 KADIKÖY

MEHMET ALDATMAZ

Group Count 1 KARAKÖY

VELİ DURGUN

Group Count 1 NİŞANTAŞ

Group Count 4 İSTANBUL

Report Count: 9

ADRES2 KADIKÖY KADIKÖY

KARAKÖY

NİŞANTAŞI

ŞEHİR İSTANBUL İSTANBUL

İSTANBUL

İSTANBUL

92930000.00 50640000.00

TABLO 1

Raporda istenen alanların bulunması için ayarlamaların Fields kutusundan yapılması gerektiğini zaten geçen aydan biliyoruz. Alan seçimini Adı ve Soyadı, Adres2, Şehir, Toplam Borç ve Bakiye olarak yaptıktan sonra, OK kutusunu kliklediğimizde, örneğimizin çıktısı TABLO 1'deki gibi olacaktır: Gördüğünüz gibi Superbase, ilk kayıttaki Şehir (İstanbul) bilgisini aldı, Adres-2'de bulunan bilgiyi okuyarak Şehir İstanbul olan tüm kayıtlarda Adres2 alanını tarayarak aynı bilgilere (Kadıköy) sahip olanları grupladı. Her kayıt için Toplam Borç ve Bakiye bilgilerini listeledi ve aynı şehirdeki yeni bir ilçe gruplamasına geçmeden o gruptaki kayıt sayısı (Group Count 2 KADIKÖY) ile grup kayıtlarının Toplam Borç ve Bakiye ara toplamlarını verdi. Sonra yine Şehir bilgisi İstanbul olan farklı Adres2 bilgisine sahip kayıtları aradı. Bulduğunda yeni bilgiye sahip kayıt olup olmadığına bakıp varsa gruba dahil etti, yoksa grup toplamını alıp kayıt sayısını vererek Şehir bilgisi İstanbul olan kayıt kalmayana kadar devam etti. Son İstanbul grubunun dökümü tamamlanınca, toplam İstanbul kayıtları sayısı ile İstanbul için Toplam Borç, Bakiye ara toplamlarını verdi ve bir sonraki Şehir için aynı işlemleri yaptı. Son kayıt gruplarını verdikten sonra da genel toplam aldı ve dosyadaki tüm kayıtların sayını verdi.

Rapor ayrıntılarını istemez de özet bir döküm isterseniz, komutun başlangıcına "Summarize" operatörü eklenir:

SUMMARIZE REPORT SUM Toplam 
Borç,Bakiye COUNT GROUP Şehir 
SUM 
Toplam 
Borç.Bakiye 
GROUP 
Adres2 
SUM 
Toplam 
Borç,Bakiye 
COUNT

Komutu bu şekilde değiştirdiğinizde, gruptaki bilgiler tek tek dökülmeyecek, sadece gruptaki kayıtların sayısı ve grup toplamı verilecektir. Deneyin....

Raporda toplam ve aratoplam alanlarında çıkan sonuç alanın tanımlanan formatından büyükse, taşma olur. Örneğin nümerik alan tanımı 999.00 olarak tanımlanmışsa, değer 999'u aşamaz. Sonuç bu sayıdan büyükse, alana ###.## yazılır. Bu hata oluştuğunda, Dosya tanımındaki alan formatını (Project Edit) değiştirmeniz gerekir.

Query Filter: Query Tanımlama Diyalog penceresinde Report satırının altındaki "FILTER" düğmesi, normal filtre kullanımı gibidir. Dosya kayıtları arasında sadece belirli bir şarta uyanları rapora dahil etmek için kullanılır. Bu satıra herhangi bir koşul girilmezse, dosyadaki tüm kayıtlar rapora dahil edilir.

Raporunuza bir filtre yerleştirmek için Filter kutusunu kliklediğinizde, ekrana filtreleme diyalog penceresi (Query Filter) açılır. Bu pencereyi komut panelinde kullandığımız pencereden hatırlayacaksınız.

İki pencere arasındaki fark, alan isimleri panelinin üstündeki dosya ismi kutusudur. Aslında bu fark query'de kullanılan tüm pencereler için geçerli, zira biliyorsunuz query'de bir sürü dosya arasında ilişki kurabiliyoruz. Bunun dışında Query Filter da diğer filtreler gibi çalışır; alan ismi kliklenir, operatör seçilir ve sonra şart değer kutusuna yazılır veya başka bir alan seçilir. Birden fazla dosya ile çalışma yapılıyorsa, filtre komut satırında farklı dosya alanları kullanılarak da filtre oluşturulabilir. Her zamanki kuralımız yine geçerli: Kullanılacak dosyalar açık olmalı. İstenen filtre bu pencerede belirtildikten sonra, OK ile pencereden çıkıldığında query tanımlama penceresindeki Filter satırına otomatik olarak aktarılır. Query Filter Komut Satırı Kuralları: KURAL 1: Herhangi iki dosyayı birbirine bağlarken kullanılan alanların dosyalardaki kayıt tanımlamalarında uyumluluk olmalıdır. Alan isimlerinin aynı olması gerekmez. Alan isimlerinin de aynı olduğu durumlarda da herhangi bir sorun çıkmaz; zira Superbase seçilen alanın sonuna alanın seçildiği dosya ismini otomatik olarak ekler. Alanlara girilen bilgiler dosyalarda aynı olmalıdır ki anlamlı çıktılar alınabilsin. Örneğin iki dosya arasında numara sırasına göre bir bağlantı kuruluyorsa, her iki dosyada aynı numarada adres ise aynı kişi, stok ise aynı mal vs. bulunmalıdır.

MÜŞTERİ NO.ALACAKLAR = MÜŞ- 
TERİ NO.ADRESLER

KURAL 2: Dosyaları bağlarken OR operatörü kesinlikle kullanılmaz.

SIRA NO.Adresler = MÜŞTERİ NO.- MÜŞTERİLER OR SIRA NO.Adresler = REFERANS.MÜŞTERİLER

Böyle bir filtre satırı mümkün değildir.

KURAL 3: Dosyaları bağlamada kullanılacak alanlar arasına EŞİTTİR işareti konularak belirtilir.

KURAL 4: Bağlanacak dosya ifadelerinin tamamı filtre komut satırının başlangıcına yerleştirilir.

KURAL 5: Komut satırında bir OR ifadesi kullanmak istiyorsanız, parantezler içine almalısınız:

(STOK KODU = "Kalem 001" OR STOK 
KODU = "Kalem 01")

KURAL 6: Filtre ifadeleri öncelik derecesine göre yüksekten alçağa doğru sıralanmalıdırlar.

SIRA NO.Adresler = REF NO.Stoklar 
AND Şehir LIKE "İstanbul" AND Miktar 
= 1000 And (Bakiye => 500000 OR Baki- 
ye <= 10000000)

Query Order:

Diğer bir Query seçeneği olan ORDER, query çıktısının sıralanış koşulunu tespit etmek için kullanılır. Herhangi bir düzen verilmezse, Superbase kayıtları disketten okuduğu sıraya göre dökecektir ve bu durumda çıkışta alfabetik veya indexli sıra olmaması problemi olacaktır. Bunu çözmenin en kolay yolu da query order ile sıralanış kuralını koymaktır. Hatta bu yolla yaratılan yeni bir database dosyası işlem hızını oldukça artırır.

Dosya için herhangi bir index tanımlanmayacaksa, Order satırı boş bırakılır. Yeni bir index tanımlanacağı zaman ise, Order kutusu kliklenerek Query Order diyalog penceresinden istenen sıralama alanları burada belirtilir.

Query Order diyalog penceresi, sıralanacak bir dosyadan alanlar seçmenize ve bu alan bilgilerinin büyükten küçüğe mi, yoksa küçükten büyüğe mi sıralanacağını belirlemenize izin verir.

Query Order penceresinde, açık olan dosyaların herhangi birinden sıralama alanını seçebilirsiniz. İsterseniz işlem adımlarını sıralayalım:

1. Alan ismini klikleyin. 2. Büyükten küçüğe sıralama için "Descending", küçükten büyüğe sıralama için

"Ascending" kutularından birini seçin.

3. Gerekiyorsa diğer alanlar için tekrarlayın.

Sıralama için tanımlı uzunluk her alan için 15 karakterdir. Harfin büyük ya da küçük olması arasında bir değişiklik yoktur. Penceredeki Length kutusu ile tanımlı uzunluğu değiştirebilirsiniz.

Query order için boş belleğe sahip olmanız gerekir. Çünkü Superbase kayıtları okuyarak istenen tanıma uygun olarak sıralayacak belleğe ihtiyaç duyacaktır.

Sıralama alanını tek dosyadan seçtiyseniz işiniz kolay, Superbase dosyanın kendisini etkilemeden işlemi yapacaktır. Sıralama için sadece bir tek index belirttiyseniz, Superbase datayı bulduğu anda listeler. Ancak birçok dosya içeren bir Order belirlediyseniz, Superbase'in query çıktısı üretmeden önce geçici bir dosya yaratması için beklemeniz gerekebilir. Geçici dosyalar "sb.tmp" ve "sb.srt" isimleri ile belirtilir. Bu nedenle program bir süre kendi işi için çalışır ve tanımlamalara uygun olarak dataları yeni dosya içine yerleştirir. Sonra da ürettiği çıktıyı listeler.

Query Order ayarlaması bittikten sonra, OK düğmesi kliklenerek çıkıldığında, komut satırı query tanımlama penceresindeki Order satırına yazılacaktır.

QUERY ÇIKTISININ

HEDEFLERİ

Query tanımlama diyalog penceresinin altında bulunan 3 çıkış hedefi kutusundan söz etmiştik. Diğer taraftaki üç çıkış kutusundan OK hedefi doğrudan ekran olarak seçer ve kayıtları ekrana listeler. Diğer kutular ise şunlar:

Print: Çıkışı doğrudan printer'a gönderir.

Disk: Query çıktısını içeren bir ASCII disket dosyası yaratır, bu dosya herhangi bir text programından yüklenebilir, editlenebilir ve yazıcıdan döktürülebilir. Disk'i seçtiğinizde, Superbase dosyayı kaydetmek için sizden isim sorar.

File: Query Fields satırında belirtilen alanlar ve/veya formüllerden meydana gelen bir dosya tanımı ile ".sbf" uzantılı yeni bir Superbase dosyası yaratır. Yeni dosya, orijinal dosyanın ilk alan bilgisine göre indexlenir. Çıkış için bir index alanı seçilmemişse, çıkıştaki ilk alan seçilir. Superbase query'deki hiçbir format ve rapor elemanını dikkate almaz. Türemiş kolonlara yeni alanlar olarak bakılır, ancak mutlaka Heading ile geçerli alan isimleri vermelisiniz. File kutusuna kliklediğinizde, Superbase size yeni dosya ismini sorar.

Bu aylık da bu kadar. Gelecek ay görüşmek üzere, hoşçakalın.....