SUPERBASE PROFESSIONAL

Merhaba... Geçen ay Process menü seçeneklerinin tanıtımına başlamış ve Update kaleminin anlatımını tamamlamıştık. Bu ay yine bu menünün "Superbase'in kalbi" diyebileceğimiz QUERY seçeneği ile devam ediyoruz.

QUERY:

Query, Superbase menü seçeneklerinin en karmaşığıdır. Bu seçenek, bir ya da birkaç dosyadan kayıtları seçip düzenleyerek istenen formatta çıktı üretir. Query, 5 ana uygulama alanı olan çok amaçlı bir seçenektir. Bu beş uygulama alanı şunlardır:

1. Karmaşık filtreler yaratılabilir. Birçok uygulamada aynı kayıt setini tekrar tekrar çağırarak düzenlemek isteyebilir ve aynı ya da benzer seçim kriterlerini kullanarak, düzenli temellerde kayıt gruplarını kontrol etmek gereksinimini duyabilirsiniz. Kontrol panelindeki filtreyi kullanırsanız, her seferinde istediğiniz koşulları bölüm içinde filtreleme şartları olarak yeniden girmeniz gerekir. Oysa Query ile hazırladığınız geniş bir modeli disketinize bir Query dosyası olarak kaydedebilirsiniz.

2. Çoklu dosya uygulamaları yapılabilir. Dosyalar, Query filtresinde karşılıklı bağlanarak birçok dosyadan aynı anda data seçimi yapılabilir.

3. Raporlama olanağı sağlar. Profesyonel kullanıcılar, çıktı alınacak rapor için Forms Editor'ün raporlama özelliklerini tercih edeceklerdir. Fakat rapor özellikleri, kayıtların sayımı ya da alan toplamları gibi arama ve hesaplama sonuçlarının ilave bilgiler olarak eklenmesini gerektirebilir.

4. Sıralama yapılabilir. Query, çıktıyı istenen bir sıralamaya uygun olarak verebilir. Mevcut index'i ile halihazırda sıralı olan dosya kayıtları, Query içinde belirlenecek küçükten büyüğe veya büyükten küçüğe doğru koşuluna uygun olarak yeniden sıralanabilir. Aynı zamanda farklı düzeylerde, her seviye için başka alan kullanarak birçok sıralama da yaptırabilirsiniz.

5. Çıktı için farklı cihazlar seçilebilir. Hazırlanan Query'ye uygun çıkış için dört hedef belirtilebilir: Ekran, printer, bir ASCII disket dosyası ya da yeni bir database dosyası. Son seçenek mevcut dosyalardaki muhtelif data kombinasyonları ile yeni bir database yaratmanıza izin verir.

Query, oldukça işinize yarayacak bir seçenek değil mi? Bu kadar tanımlamadan sonra, gelelim tüm bunları nasıl yapacağımıza.

Process menüdeki Query seçeneğinin 3 kalemlik alt menüsü bulunur: Edit, Load ve Save. Bu menü kalemlerinden Edit ve Save, ancak herhangi bir dosya açık olduğunda seçilebilirler. Herhangi bir dosya açmadan Query Load ile daha önce hazırlanmış bir query dosyasını yüklediğinizde, bu query ile ilişkili dosyalar otomatik olarak açılır. Query Edit ve Query Load ile ekrana, ana Query diyalog penceresi açılır. Tabii Query Load seçeneğinde, önce kaydedilmiş bir Query dosyasını seçebileceğiniz pencere açıldıktan ve dosya seçildikten sonra. Query Save ise bir Query hazırladıktan sonra, diskete saklamak için kullanılır.

QUERY KULLANIMI: Query penceresinde dört komut satırı vardır: Fields, Report, Filter ve Order. Her bir satır, Query çıktısının farklı bir alanını tanımlamak için kullanılır:

. Fields satırında, çıktıya hangi alanların dahil edileceği tespit edilir.

. Reports; aratoplamlar, kayıt sayımı gibi özelliklerin verilebileceği satırdır. Data çıktısının formatı da buradan kontrol edilir.

. Filter satırına dosyadan kayıt seçim koşulu yazılır. Çoklu dosya filtresi gibi buradan da dosyalar arasında bağlantı kurulabilir.

. Order satırında kayıtların hangi esasa göre sıralanacağı belirtilir.

QUERY TANIMLAMA DİYALOG PENCERESİ: Pencerede 3 bölüm vardır. En üstte Title Box (Başlık Kutusu), altında Query Command Panel (Query Komut Paneli), sol altta Query çıkış hedefi belirlenecek 3 kutu ve sağ altta pencereden çıkış için kullanılacak 3 kutu bulunur. Bizim elimizdeki versiyonda, bu üçerlik gruplar arasında bir de "Say" kutusu bulunuyor. Say seçeneği ile Amiga'nın konuşma özelliği kullanılmış. Query çıktısı için OK seçmeden önce, Say kliklenerek aktif hale getirilirse, döküm esnasında yazılanlar aynı zamanda Amiga'nın o tanıdık sesiyle okunacaktır.

BAŞLIK KUTUSU (TİTLE BOX)

Başlık kutusu üç bölümden oluşur: Tarih (Date), Yazı Giriş Satırı ve Sayfa Numarası (Page).

Yazı giriş satırına yazılan bir yazı, başlık olarak kabul edilecek ve query çıktısının her sayfasının başına bir boş satırla takip edilecek şekilde yerleştirilecektir. Bu bölüme herhangi bir şey yazılmazsa, Superbase çıktıyı her sayfanın başından dökmeye başlayacaktır. Başlık olarak girilecek olan bilgi, satır kliklendikten sonra maksimum 80 karakter uzunluğunda olmak üzere bu kısma yazılır.

Date kutusu kliklenerek aktif hale (siyah olur) getirilirse; başlık, sistem tarihini de tanımlı formatında (Set menü'deki Date Format seçeneğinde tanımlanmış şekliyle) içerecektir. Tarih genellikle tanımlı olarak sol marjine yapışık olarak yazılır.

Page olarak etiketlenmiş sayfa numarası kutusu kliklenerek başlık kısmına sayfa numaralarının da ilave edilmesini sağlayabilirsiniz. Sayfa numaraları birden başlayarak ve her sayfada bir artırılarak Query çıktısının sayfalarına, başlığın sağ tarafına basılır.

QUERY KOMUT PANELİ: Query komut panelinde bulunan dört satırın her biri query'nin elemanlarından birini tanımlar: çıkış alanları, rapor özellikleri, filtreleme koşulları ve sıralama esasları. Her bir alan 512 karakter uzunluğunda olabilir.

Daha önceden hazırlanarak kaydedilmiş bir query açılırsa, bu dört satır ayrıntıları olduğu gibi kopyalanır. Varolan bu query'yi OK kutusunu klikleyerek olduğu gibi kullanabilir ya da herhangi bir satırı doğrudan değiştirebilirsiniz.

Paneldeki dört satırın tamamını kullanmak zorunlu değil. Örneğin sadece o anki dosyanın açık alanlarının sıralı bir dökümünü isterseniz, yalnız Order satırını kullanarak sıralamaya esas olacak alanı belirtmeniz yeterli olacaktır.

Query Fields (Query Alanları): Sadece o an yüklü olan dosyanın açık alanlarını kullanacaksanız, bu satır boş bırakılır. Query çıktısı için açık dosyalardan bir alan seti oluşturulacaksa, Fields kutusu kliklendiğinde çıkan "Query fields" (Query alanları) penceresinden, istenen dosyaların istenen alanları seçilir. Query fields penceresi şimdiye kadar kullandığımız diğer pencerelere benzer. Penceredeki File etiketli dosya seçim satırını, Update fields penceresinden hatırlayacaksınız. Query fields penceresinde de File kutusunun yanındaki ok yardımıyla açık dosyalar arasında seçim yapma olanağınız var. Bu yüzden gereken dosyalar arasında query oluşturabilmeniz için, burada da öncelikle kullanılacak dosyalar açılmalı ki, istenen bağlantılar kurulabilsin. Alanların tamamı kullanılacaksa buradan tek tek seçmek yerine filtre komut satırına ALL yazma yoluna da gidilebilir. Dosyalardan belirli alanlar seçilecekse, dosyalar sırayla pencereye getirilip her dosyadan istenen alanlar seçilebilir. Bu seçim ilgili dosyanın alan listesinden tek tek kliklenerek yapılır. Her alandan sonra bir yenisi seçilirse, program tarafından otomatik olarak bir virgül konur. Konulan virgül sayesinde yazılan alan bilgileri arasında boşluk bırakılır. Virgül yerine noktalı virgül kullanılırsa, bilgiler boşluksuz basılır. Basit query'lerde alanlar bu şekilde seçilerek OK kutusu kliklenir ve kullanılacak alanlar tanımlanmış olur.

AS: Query alanları diyalog penceresi, diğer pencerelerden farklı birçok önemli özelliğe sahiptir. Alan panelinin yanındaki operatörler kullanılarak query'ye özellikler eklemek mümkün. Hesaplama, karşılaştırma gibi özellikler eklenmiş bu alanlara türemiş kolonlar denir. Türemiş kolonlar normalde dosya tanımında yoktur. Kolon deyimi, alan isimlerinin bulunduğu bölüm için kullanılır. Bir query çıktısındaki türemiş kolon, alan ya da alanların sayısal değerlerle bir ya da daha çok aritmetik operatör kullanılarak oluşturulan ve bir sonuç üreten bilgidir. Örnek vermek gerekirse:

Alanların çarpımı: MİKTAR*FİYAT %15'lik fiyat artışı: FİYAT*1.15 Stokta %8'lik fire: MİKTAR*0.92 Tarihi güncelleştirme: DATE+30 Kar durumu: SATIŞ-MALİYET Query alan formadan, sayısal alan olsun tarih alanı olsun, SET menüde belirlenmiş forma uygun olur.

Superbase, query çıktısında normal olarak her sayfada bilginin yazıldığı kolonun başına alan ismini yerleştirir. Yani sayfada bir tablo görüntüsü vardır ve bu, görüntü modlarından "Table View"'e benzer. Fakat yukarıda bahsettiğimiz türemiş kolonlarda bu olanak yok, çünkü dosya tanımında verilmedikleri için isimleri mevcut değil. Bu yüzden Superbase özel başlıklar girmenize izin verir. Ancak bu sadece türemiş kolonlar için geçerli değil, normal kolon isimleri de bu yolla değiştirilebilir. Peki, nedir bu yol? Operatörler arasında bulunan AS bu işlem için kullanılır. Alan ya da hesaplama formülü belirtildikten sonra AS kutusunu klikleyip Value olarak etiketlenmiş değer kutusuna yeni kolon ismi girilir:

MİKTAR*FİYAT AS "TUTAR" FİYAT AS "YENİ FİYAT" Query yeni bir database yaratmak için kullanılıyorsa, tüm türemiş kolonlara en çok 15 karakter uzunluğunda geçerli alan isimleri vermeye özen göstermelisiniz.

@POSITION: Bir yazının yerleştirileceği pozisyonu belirlemek için, "@ Position" işlemcisi kullanılır. Alan için kolon pozisyonlaması yapmazsanız, Superbase her satırda bir kayıt ve her alan bilgisi bir öncekinin sağında olmak üzere çıkış verecektir. Data yerleşimini belirtmek için, önce @Position kutusu kliklenerek değer kutusuna istenen kolon numarası girilir, sonra alan ismi seçilir. Diyelim ki, dosyadaki "Soyadı" alanının 12. kolondan yazılmasını istiyoruz. Yukarıdaki işlemi sırayla bu bilgiler için yaparsak, penceredeki komut satırının görüntüsü:

@ 12 Soyadı şeklinde olur. Kolon pozisyonlama çalışmalarını önce ekranda yapın ve genişlikleri görün. Zira üstüste binen alanlar problemlere sebep olur. Bu olay tipik olarak Superbase'e bir alan bilgisini yazmasını söylediğiniz kolonun bir önceki bilginin sonundaki boşluklar tarafından kullanılıyor olmasından dolayı ortaya çıkar ve Superbase bu durumda bilgiyi doğru kolondan başlatır ama bir alt satıra atlayarak. Maksimum kolon pozisyonu 255'tir. Printer boyutlarınıza uygun olarak doğru genişliği bulursanız, herhangi bir sorunla karşılaşmazsınız. &LENGTH: Kolon yerleştirme problemine satırdaki alan genişliklerine sınırlama koyarak çözüm getirebilirsiniz. Bu sınırlama için &Length operatörü kullanılır. Genişlik belirtme işlemi de tıpkı kolon tanımlama gibi yapılır. Yani önce &Length kutusu kliklenerek değer kutusuna istenen genişlik yazılıp RETURN tuşuna basılır ve sonra da bu genişliği kullanacak alan ismi seçilir. Örneğin Soyadı alanının genişliğini 10 yapmak istiyoruz: & 10 Soyadı

LINE: Çıktının, herhangi bir yerde yeni bir satırdan başlamasını belirtebilirsiniz. Bu işlem için operatörler bölümündeki "Line" seçeneği kullanılır. Çıktının belli yerlerinde aktif yazım pozisyonlarına bağlı olarak LINE kutusu iki kez kliklenerek boş bir satır atlanmasını sağlayabilirsiniz.

DİĞER FORMAT PARAMETRELERİ: Query çıktısı için format belirtmede kullanılabilecek bunlardan başka birçok parametre vardır. Bunlar Query Fields diyalog penceresinde gösterilmemiştir ve doğrudan komut satırına boşluk ya da noktalı virgül ayrılarak yazılırlar. Bu parametreler ve tanımlamaları aşağıdaki tabloda gösterilmiştir:

Parametre Fonksiyon FIELD Alan isimleri yazılmaz DOWN Çıktının her data kalemini yeni bir satıra yazar. BF[ON] Bold (kalın) yazı UL[ON] Underline (altçizgili) yazı IT[ON] İtalik yazı BF/UL/IT[OFF] Yazı özelliklerini iptal eder. FG Ön plan rengini set eder. BG Arka plan rengini set eder. Eject n n ile verilen sayı kadar satır atlar. Field: Bu parametre kullanılmadığı zaman, Superbase sayfa başlarında her alan ismini, o alan bilgilerinin listelendiği kolonunun başına yazar. Sayfa başlarına alan isimlerinin yazılması istenmiyorsa, komut satırındaki alan isimlerinin başına FIELD parametresi yazılır. Bu durumda kolon başlıkları yazılmaksızın bilgiler sayfa başından itibaren listelenmeye başlanır:

FIELD Adı,Soyadı,Adres,Şehir Alan isimlerinin bazılarının yazılmasını, bazılarının yazılmamasını isterseniz, FIELD parametresini sadece yazılmayacak alanların başına yerleştirmelisiniz:

Adı,Soyadı,Şehir,FIELDS Adres Ancak böyle bazı kolon isimlerini yazmama durumunda satırlarda kayma olacaktır. Bu nedenle satır ayarlamalarını yapmak gerekebilir.

Down: Komut satırının başına alan isimlerinden önce DOWN parametresi yerleştirilirse, çıktıda her alan bilgisi yeni bir satıra yazılır. Örneğin:

DOWN Adı,Soyadı,Şehir gibi bir tanımlama sonucu, bilgilerin dökümü şöyle olur:

Ahmet Durmaz Ankara Bilgiler Record View görüntü modunda olduğu gibi listelenir. Alan isimleri ters görüntü modunda listelenir, bilgiler alan isimleri yanındaki yerlerini alırlar; tıpkı kayıt giriş ekranı gibi. Bu modda alan isimlerinin görünmemesini isterseniz, FIELD ve DOWN parametrelerini birlikte kullanmalısınız:

FIELD DOWN Adı,Soyadı,Şehir Yazı Stili Parametreleri: Query'de kayıt bilgilerinin istediğiniz kısımlarını bold (kalın), underline (alt çizgili) ya da italik olarak yazdırabilirsiniz. ON parametresinin kullanımı opsiyoneldir. Tanımlanan stil parametreleri, ATTR OFF yapılarak tamamen kaldırılabileceği gibi, BF OFF, UL OFF ve IT OFF ile tek tek kapatılabilir:

BF IT Adı,Soyadı, IT OFF Şehir Renkler: FG ve BG parametrelerini kullanarak ön ve arka plan renkleri değiştirilebilir. Burada kullanılabilecek renkler 1'den 4'e kadar Preferences renkleridir: FG 3;BG 4 Adı,Soyadı,Şehir komutu ön zemin rengini siyah, arka planı turuncu yapar.

Eject: Bir kaydın içindeki tüm dataların aynı sayfaya yazılmasını sağlayarak kayıtları bölmemek için kullanılır. EJECT parametresini takip eden rakam kağıdın altında kalacak olan satır sayısını verir. Yani bir kayıt yazıldıktan sonra altta kalan satır sayısı parametrede verilen satır sayısı kadardır. Rapor sayfalarında aynı kaydın farklı alanlarını ayrı ayrı sayfalarda istemiyorsanız, kullanacağınız parametre budur. Komut satırına: Adı,Soyadı,NEWLINE Adres,Şehir EJECT 2 yazıldığında, kayıtlar ekrana ya da bir printer kağıdına sonunda 2 satır kalana kadar yazılacaktır.

Sadece EJECT ya da EJECT 0 yazmak, Superbase'in her sayfaya bir kayıt yazmasını sağlar.

ON File: Çıktı için kullanılacak dataların aynı dosyadan alınmayıp birden fazla dosyaya erişmek gerektiğinde, formatlama problemleri ile karşılaşılabilir. ON File seçeneği bu tür problemleri çözmek için düzenlenmiştir. Bu seçeneğin çalışması en güzel bir örnekle anlatılabilir. Diyelim ki, bir MEVDUATLAR ve bir de MÜŞTERİLER adlı iki database dosyanız var. MEVDUATLAR dosyanızda, MÜŞTERİLER dosyasındaki kişisel mevduatların ayrıntılarını tutuyorsunuz ve her kayıt bir mevduata ait. MÜŞTERİLER dosyasında adı ve soyadı, toplam mevduat, adres, telefon, hesap açılış tarihi gibi kişisel bilgiler, MEVDUATLAR dosyasında ise tek tek mevduat hesapları tutuluyor olsun. Yani burada mevduat sahibinin adı ve soyadı, mevduatın bulunduğu banka, mevduatın tipi ve tutarı, faiz oranı, yıllık faiz tutarı ve yatırılan tarih gibi bilgilerin bulunduğunu düşünün. Bu mantıkla MÜŞTERİLER dosyasındaki bir kaydın MEVDUATLAR dosyasında ayrı ayrı birçok hesabın sahibi olabileceği açık değil mi? Yani bir müşteri farklı farklı birçok bankada, hatta aynı bankada değişik hesaplarda birçok mevduata sahip olabilir.

Update uygulamasında olduğu gibi, query için de dosyaların birbirine bağlanabileceği bir ortak alan gerekecektir. Her iki dosyada da ADI ve SOYADI alanları bulunduğuna göre bu iki dosyanın ilişkisinin ADI ve SOYADI alanına göre kurulduğunu düşünelim. İlişkinin kurulabilmesi için her şeyden önce Query Filter satırına bağlantı filtresi yazılır:

ADI ve SOYADI.MÜŞTERİLER = ADI ve 
SOYADI.MEVDUATLAR

Hazırlayacağımız raporda, MÜŞTERİLER dosyasından müşterinin adı ve soyadı bilgileri alınsın. MEVDUATLAR dosyasından da bu müşterinin hangi bankalarda hangi tarihte yatırılmış ne kadar parası olduğu bulunsun. Bu işlem için Query Edit penceresinde Fields kutusu kliklenerek alana gereken açıklama yazılır:

ADI ve SOYADI, ON MÜŞTERİLER, BANKA, MİKTAR, TARİH

Gördüğünüz gibi yazılacak ilk bilgiyi MÜŞTERİLER dosyasından, sonraki üç bilgiyi de MEVDUATLAR dosyasından alıyoruz. OK'i seçerek ekrana liste aldığımızda, iki dosyada bulunan aynı kişiye ait bilgiler index sırasına göre yazılır. Aynı kişiye ait birden fazla mevduat kaydı varsa, isimler tekrarlanır:

ADI ve SOYADI BANKA MİKTAR TARİH

Ali Uslanmaz İşB. 1000000 10/07/1990 Ali Uslanmaz YKB. 550000 25/09/1990 Deniz Kara İşB. 350000 03/06/1990 Mehmet Güçlü Ziraat B. 2500000 01/05/1989 Mehmet Güçlü İşB. 468000 24/07/1990 Mehmet Güçlü İşB. 1550000 02/11/1989

Gördüğünüz gibi çok fazla data tekrarı oluyor. İşte bunu önlemek için gereken işlem, Superbase'in dosyalardan bilgi okumasını düzenlemektir. Bunun için de ON File kullanılır. Buradaki "File" ON kutusunu kliklediğinizde içinde bulunduğunuz dosyadır ve otomatik olarak dosya ismi komut satırına ON ile birlikte yerleşecektir.

Aynı isimlerin tekrarlanmadan sadece bir kez yazılarak MEVDUATLAR dosyasındaki bilgilerin karşısında sıralanmasını sağlamak için komut satırını:

ON "MÜŞTERİLER" ADI ve SOYA- 
DI.MÜŞTERİLER,ON 
"MEVDUAT- 
LAR" @27 BANKA,MİKTAR,TARİH

şeklinde değiştirirseniz, çıktı aşağıdaki hale gelecektir:

ADI ve SOYADI

BANKA MİKTAR TARİH

Ali Uslanmaz İşB. 1000000 10/07/1990 YKB. 550000 25/09/1990 Deniz Kara İşB. 350000 03/06/1990 Mehmet Güçlü Ziraat B. 2500000 01/05/1989 İşB. 468000 24/07/1990 İşB. 1550000 02/11/1989

Gördüğünüz gibi artık isimler tekrarlanmıyor.

İsterseniz bu örnekte Superbase'in neler yaptığını inceleyerek bu ayki anlatımlarımızı bitirelim. Zira bu konuyu örneklerle çalışarak daha iyi anlamanız gerekiyor. Query, OK ile başlatıldığında, Superbase önce MÜŞTERİLER dosyasına giderek bir kayıt okur, sonra da MEVDUATLAR dosyasındaki kayıtları okumaya başlar. İlk dosyadan okuduğu ADI ve SOYADI bilgisini ikinci dosyanın aynı alanındaki bilgi ile karşılaştırmaya başlar. Uyumlu ilk kaydı bulduğunda, Fields komut satırında belirlenen esaslara uygun olarak çıktıyı ekran ya da printer'a yazmaya başlar. ON "MÜŞTERİLER" komutuna geri dönmeden buradan okuduğu ilk kaydı MEVDUATLAR dosyasındaki kayıtlarla karşılaştırmaya devam eder ve bulduğu uyumlu kayıtlardaki bilgileri ismi tekrar yazmadan altına eklemeye başlar. İşte bu ON "MÜŞTERİLER" bildiriminin etkisi. ON "MEVDUATLAR" ise farklı bir etkiye sahip. Öncelikle ilk ON File komutunu iptal eder ve Superbase'e MEVDUATLAR dosyasındaki tüm uyumlu kayıtları bulmasını söyler. Fields komut satırından ON "MEVDUATLAR" komutunu çıkartırsanız, yalnız ilk bulunan uyumlu kayıt bilgilerinin yazıldığını göreceksiniz.

Gelecek ay, Query penceresindeki Report, Filter ve Order alanları ile konumuza devam edeceğiz. Hoşçakalın....