  Ŀ
  Ŀ
                                                                          
                         dBASE Yaz Dizisi 5                              
                                                                          
  ٳ
                                                    Memik Yank             
  




                          VER TABANI DOSYASI OLUTURMA
                         

  Klavyeden deikenlere aktarlan bilgileri, dolaysyla makinann belleinde
  tutulan bilgileri ileride kullanmak istiyorsak bu bilgilerin manyetik bir
  ortama kayt edilip saklanmas gerekir. Yani bilgileri disketler veya hard
  disklere yazp saklamak gerekir.

  Btn programlama dillerinde olmak zere programclar ncelikle program
  dahilinde kullanlacak bilgilerin aktarlaca deikenleri tanmlarlar.
  Sonra bu bilgilerden ileri tarihlerde kullanlma ihtiyac duyulacak olanlar
  tespit ederler. te ileri bir tarih veya saatte kullanlma ihtimali olan
  bilgileri disk veya diskette saklamak zere disket veya diskte hazrlklar
  yaplr. Bu ilemin teknik ad dosya hazrlama veya oluturmadr.

  imdi size dBASE'de manyetik ortamlarda bilgi saklamak zere nasl hazrlk
  yapldn veya nasl dosya oluturulduunu aklayacam. Bunu da basit
  bir uygulama olan adres program zerinde yapacaz. Bir adres program iin
  disket-diskte saklanma ihtimali olan bilgileri ve bu bilgilerin tip ve
  uzunluklarn her eyden nce tespit etmemiz, karar vermemiz gerekiyor.

  rnekte diskette saklayacamz bilgiler unlar:


             Deiken Ad    Tr            Uzunluu
                   
             AD              Karaktersel     10 Karakter
             SOYAD           Karaktersel     15 Karakter
             ADRES1          Karaktersel     25 Karakter
             ADRES2          Karaktersel     25 Karakter
             TELEFON         Karaktersel      7 Karakter
             DTARIH          Tarih Bilgisi    8 Karakter


  Her biri bu bilgilerden meydana gelen saysz kayt ierecek disk
  dosyasnn bir defaya mahsus olmak zere oluturulmas gerekiyor.
  Bir kez oluturulduktan sonra szkonusu disk dosyas istenildiinde
  tekrar alp, bilgi kayd yaplabilinir veya daha nce kayd yaplan
  bilgiler okunabilinir, silinebilinir.

  Dosyay (veri taban dosyas) yukarda verilen bilgiler nda nasl
  oluturulaca konusunda bilgi vermeden nce baz ek bilgileri
  vermek gerekiyor. yle ki; zerine kayt yaplacak, adres bilgilerini
  saklayacak veri taban dosyas diskte yoksa oluturulacak, diskte varsa
  veya daha nce oluturulmusa programn dosyay oluturan ksm
  atlanacak. Daha nce oluturulup zerine bilgi kayt edilen dosyann
  tekrar oluturulmas halinde iindeki btn bilgiler yok edilip dosya
  sanki ilk kez oluturuluyormu gibi ilem yaplacaktr.

  Dolaysyla dosya oluturulmadan nce mutlaka kullanc uyarlmaldr.
  Herhangi bir disk dosyasnn diskte varl dBASE'de FILE() fonksiyonu ile
  test edilmektedir. Hemen belirtmek gerekirse dBASE ve dier veri taban
  dillerinde veri taban dosyalarnn uzants "DBF" olarak seilir. DBF
  dosyas denildii zaman bunun bir veri taban dosyas olduunu anlamak
  gerekir.

> Program gelitirme arac olarak yalnzca dBASE Compiler kullanlyorsa yeni
  bir veri taban dosyas oluturma imkan yok. Bunun bence tek nedeni ticari
  kayglardr. Kullanclarn veya program gelitirenlerin dBASE Compiler
  yannda bir kopya da dBASE IV satn almalar iin veri taban dosyas
  oluturma gibi baz zellikler dBASE Compiler'dan karlm durumda.

  Ancak DBF veri taban dosyas oluturmak iin tek zm dBASE IV
  kullanmak deildir. Ellerinde dBASE III+ veya baka xBASE
  program gelitirme arac veya veri taban program olanlar veri taban
  dosyasn oluturabilirler. Ancak biz almada veri taban dosyas
  ama ilemi iin dBASE IV'e bavurulaca varsaymn kullanacaz.


         CLEAR
         DOSYA=SPACE(12)
         DOSYA="ADRES.DBF"
         CEVAP=SPACE(1)
         IF .NOT. FILE(DOSYA)
                 @10,5 SAY "DOSYA YOK AILSIN MI [E/H]";
                          GET CEVAP PICTURE "@1!"
                 READ
                 IF CEVAP=UPPER("E")
                         CREAT &DOSYA
                 ENDIF
         ENDIF


  imdi bu program parasn yine satr satr anlatacam. Programn banda
  CLEAR deyimi verilerek ekran temizleniyor.Ardndan alacak dosya adnn
  geici olarak saklanaca DOSYA deiken ilk deer aktarlarak tanmlanyor.
  Dosya ad, nokta ve uzantnn hepsi 12 karakter ettii iin dosya deikeni
  tanmlanrken 12 adet boluk atand. Tanmlanan DOSYA deikenine diskte
  aranp bulunmazsa oluturacak ADRES.DBF dosyas bilgisi aktarld. Bir de
  "ADRES.DBF" veri taban dosyasnn diskte bulunmamas halinde kullancya
  onay sormada kullanlacak tek karakterlik CEVAP deikeni tanmlanyor.Yani
  deikene ilk deer aktarlyor. Bu deerde bir uzunluklu boluk.

  Fonksiyonlar tanmlan veya hazrlanlarna gre deimekle birlikte
  genellikle dardan parametre olarak bilgi alp, deerlendirip geriye
  bir deer dndrrler. Yani bir fonksiyonu arrken fonksiyona parametre
  olarak bilgi vermek, gndermek baz fonksiyonlar iin zorunlu deilken
  fonksiyon grevini veya ilevini bitirdikten sonra geriye mutlaka bir deer
  gnderir. Fonksiyonun dardan neyi alp ileyip, geriye neyi geri
  gnderecei fonksiyonun tanmlanmas srasnda belirlenir. Bu bilgilerin
  nda FILE() fonksiyonunu inceleyelim.

  FILE() fonksiyonu dardan parametre olarak bir deer alp bu deere
  gre aratrma yapp geriye yine bir deer dndrr. Fonksiyon parametre
  olarak rnekte de grlecei zere Diskte varl aratrlacak disk
  dosyasnn adn alr. Disk dosyas ad ile birlikte DOS'un path kurallarna
  gre dosyann aratrlaca dizin adna da yer verilebilinir. Aratrma
  yolu belirtilmezse aratrma aktif srcnn aktif dizininde yaplr.

  rnekte FILE("ADRES.DBF") eklinde deilde ADRES.DBF bilgisi daha nce DOSYA
  deikenine aktarlp FILE(DOSYA) eklinde kullanld. Sonuta iki tr
  kullanm da ayn sonucu verir. Buna gre FILE() fonksiyonu zerinde
  bulunulan veya aktif dizinde, parametre olarak ald "ADRES.DBF" dosyasn
  arar. Bulursa geriye mantksal DORU yani .T., bulamazsa bu kez mantksal
  yanl yani .F. deerini dndrr.

  Bizim rnekte dosyann bulunmamas veya mantksal yanl deerinin geri
  dndrlmesi halinde IF ile ENDIF blou arasnda bulunan ADRES.DBF dosyasn
  aan deyimlerin iletilmesini istediimiz iin ek olarak mantksal .NOT.
  operatrn kullandk. Dosya aktif dizinde bulunsayd FILE() fonksiyonu
  geriye mantksal doru .T. deerini dndrecekti. Ancak ek olarak kullanlan
  mantksal .NOT. operatr bunu yanl yapacak ve IF ile ENDIF arasnda yer
  alan deyimler iletilmeyip programn ak ENDIF deyimini izleyen ilk satra
  geecektir.

  IF-ENDIF blok kontrol deyimlerinin genel yazl veya kullan kalb
  yle:

        IF ifade
                .....
                .....
        ENDIF


  Eer "ifade" mantksal doru deerini ieriyorsa IF ile ENDIF arasnda yer
  alan btn satrlar sra ile tek tek iletilir. "ifade", mantksal yanl
  .F.  deerini ieriyorsa bu kez IF ile ENDIF arasnda yer alan btn
  satrlar atlanlp programn iletimi ENDIF deyiminden sonra gelen ilk
  satra geer.

  Bir de aadaki gibi IF-ENDIF deyimleri ile daha karmak kontrol bloklar
  olu turmak mmkn.


        IF ifade1
                .....
                .....
        ELSEIF ifade2
                ......
                ......
        ELSEIF ifade3
                .......
                .......
        ELSE
                .......
                .......
        ENDIF


  ELSEIF'lerin says istenildii kadar arttrlabilinir. Ancak i ie ve
  karmak kontrol bloklar oluturmak programn okunurluunu azaltacandan
  mmkn olduunca i ie ve karmak if-else'lerden anmak gerekir.

  "fade" yerine bir fonksiyonun geriye dndrecei mantksal deeri veya
  mantksal deer iermek zere tanmlanm bir deikeni tek bana ifade
  olarak kullanmak mmkn. Bunlardan baka bir karlatrma ilemini "ifade"
  olarak kullanabiliriz.

  rnek olmas iin DOGRUYANLIS adnda mantksal bir deiken tanmlayalm.
  Deikenin balang deeri doru yani .T. olsun. Buna gre mantksal
  DOGRUYANLIS deikeninin ifade olarak kullanld IF-ENDIF ilem blou
  aadaki gibi olur:


        IF DOGRUYANLIS
                .........
                .......
        ENDIF


  Bu yazm eklinde "ifade" olarak kullanlan DOGRUYANLIS deikeninin ierii
  .T. olduu iin IF ile ENDIF arasnda yer alan program satrlar
  iletilecektir. "ifade" olarak kullanlacak dier bir bilgi yine sonu
  olarak mantksal deer reten karlatrma ilemleridir.


        IF CEVAP="E"
                 .......
        ELSE
                .......
        ENDIF


  Eer CEVAP deikeni "E" karakterini ieriyorsa IF ile ELSE deyimi arasnda
  yer alan satrlar, iermiyorsa bu kez ELSE ile ENDIF arasnda yer alan
  program satrlar iletilir.

  Dikkat edilirse yukarda verilen veri taban dosyas ama ile ilgili ksa
  rnek programda i ie iki IF-ENDIF ilem blou var. Birinci IF deyimi
  almak istenilen veri taban dosyasnn FILE() fonksiyonu ile aratrlmas
  ile ilgili. Veri taban dosyas(adres.dbf) diskte varsa veya daha nce
  almsa programn ak hemen  ENDIF deyiminden sonraki satra geecektir.

  Bu nedenle iteki IF-ENDIF deyimleri iletilme sans bulamayacaklar. Ancak
  szkonusu veri taban dosyasnn diskte FILE() fonksiyonu tarafndan tespit
  edilememesi durumunda bu kez iletim sras bir iteki IF-ENDIF kontrol
  blouna gelecektir.Burada ikinci bir IF-ENDIF konulmasnn nedeni
  yanllkla daha nce alan veri taban dosyasnn tekrar almas
  konusunda kullancy uyarmaktr.

  Programn iletimi dosya alan ksma geldiinde, program ilk kez
  altrlyorsa veya daha nce alan ADRES.DBF dosyas silinmise "Dosya
  Diskte Yok Alsn m" sorusu kullancya yneltilir. Kullancnn bu soruya
  evet cevabn vermesi halinde dosya oluturma ile ilgili program satrlar
  iletilir. imdi bu satrlarda ilk kez kullanlan deyimleri aklayalm.

  CREATE deyimi ile yeni, bo veya kayd olmayan oluturur. Oluturulan bu
  dosyasna istenildii kadar alan anmlayp bu dosyaya yazmak veya eklemek
  mmkn. Bizim rnekteki alanlar AD, SOYAD, ADRES1, ADRES2, TELEFON ve DTARIH
  eklinde. CREATE deyimi ile veri taban dosyas oluturma ilemi hakknda
  ayrntl bilgiyi 2. blmde bulabilirsiniz.

  Yalnzca dBASE'in kendisi tarafndan desteklenen CREATE deyimi ile yeni bir
  veri taban dosyas oluturulurken dosya daha nceden diskte oluturulmusa
  dBASE dosyann diskte var olduu ve dosyann yeniden oluturulup
  oluturulmayaca konusunda kullancy uyarr.

  imdi sra geldi oluturulan ADRES.DBF veri taban dosyasna kayt yazmaya.
  Aada verdiim program kodunun birok eksii bulunmakla birlikte balang
  iin yeterli. rnek program parasn aklamaya balamadan programclkta
  en nemli kavramlardan biri olan INDEX kavram zerinde duracam.



  ERME GRE DOSYA TRLER

  Bilgi kayt etmek zere oluturulan dosyalar temel olarak iki gruba
  ayrlmaktadr.

   Sral Eriimli Dosyalar
   Dorudan Eriimli Dosyalar


  Sral Eriimli Dosyalar
  
  Sral dosyalarda kaytlarn ayn uzunlukta olmas art yok. Daha nce
  kayd yaplm bir bilgiyi sral bir dosyada aramak iin ncelikle dosyann
  bana gidilir ve kayt bulunana kadar btn kaytlar sra ile taranr.
  Dosya sonuna dein arama yaplmasna ramen kaydn bulunmamas halinde
  szkonusu kaydn dosyada olmadna hkmedilir. Baka bir bilgiyi veya kayd
  aramak iin yine dosyann bandan itibaren arama yapmak gerekir.

  Sral dosyalarn sakncas, dosyaya kaytl olan bilgi miktar artt
  zaman ortaya kar. 2000 kayt ieren bir sral dosyadan 10 adet kayd
  semeye veya filtre yapmaya altn varsayalm. Bunun ne kadar zaman
  alacan sral dosya kullanan programclr tahmin edebilir. Hele hele
  sral bir dosyadan bir kayd silip ve kaydn diskte kaplad yeri serbest
  brakmak bal bana bir sorun. Bu nedenle programclar yukarda szn
  ettiim dillerle program gelitirirken sral dosya tipini yalnzca az
  sayda bilgi kayt edilecek durumlar iin tercih ederler.


  Dorudan Eriimli Dosyalar
  
  kinci tr dosyalama ynteminde yani rastgele eriimli dosyalarda btn
  kaytlarn uzunluklar birbirine eittir. Kaytlar bir kayt numarasna gre
  aranr ve bulunur. Ne var ki bu tr dosyalarda alfabetik bilgileri arama
  anahtar olarak seip arama yapmak normal artlarda mmkn deildir.
  Profesyonel programclar bu sorunu amak iin ya kendileri ek teknikler
  gelitirirler ya da dardan bakalar tarafndan hazrlanm nc parti
  rnlerden yararlanrlar.

  Bu sorun profesyonel programclk payesini alm biri iin zerinde fazla
  durulacak bir sorun olmamakla birlikte programcl henz meslek veya merak
  edinen birinin nndeki nemli engellerden biridir.

  Veri taban dillerini kullanan programclarn byle sorunlar yok. Bu
  dillerdeki standart imkanlar iinde sunulan index dosyalar ile alfabetik
  bir bilgiyi arama anahtar olarak seip arama yapmak mmkn.

  Veri Taban dillerindeki DBF veri taban dosyalarnda bulunan btn kaytlar
  diskte eit miktarda yer kaplar. Bizim rneimzde AD bilgisi her kayt iin
  diskte 10 karakterlik yer kaplar, kayd yaplan AD bilgisi 10 karakterden
  ksa olsa bile. Dolaysyla birbirinin arkasnda kayt edilme srasna gre
  yer alan kaytlarn diskin/dosyann neresinde olduklarn bilmemiz halinde
  szkonusu kayd bulmak olduka kolaylaacaktr. te veri taban dilleri,
  veri taban dosyalarndan ayr ve istee bal olarak kaytlarn dosyadaki
  yerini tutan dosyalar kullanrlar. Bu dosyalara index dosyalar ad verilir.
  dBASE index dosyalarnn uzantsn istee bal olarak NDX veya IDX olarak
  seer. MDX uzantl oklu index dosyalarnda birden fazla index dosyas ayn
  index dosyas iinde tutulur.

  Index dosyasn amak veya oluturmak iin ilk karar verilmesi gereken konu,
  index anahtar olarak kullanlacak alann seilmesidir. Bir veri taban
  dosyas iin birden fazla NDX tipli index dosyas oluturmak ve birden fazla
  alan bir tek index dosyas iinde tanmlamak mmkn.

  Aada verdiim rnek programn index dosyasnn oluturulmas, almas ve
  kullanlmas ilemlerinin bulunduu program satrlarna baklrsa index veya
  arama anahtarnn SOYAD alarak seildii grlecektir.

  Index dosyasn oluturmak ok kolay olmasna ramen programn her
  altrlmasnda index dosyasnn yeniden oluturulmas zaman kaybna neden
  olur. Kayt says arttka index dosyasnn oluturulmas iin gereken
  zaman da artar. Bu nedenle yine FILE() fonksiyonu ile index dosyasnn
  diskte varln nce test edeceiz. Index dosyas diskte yoksa
  oluturacaz. Eer index dosyas diskte varsa dosyay tekrar oluturarak
  zaman kaybna neden olmayacaz.

  Index dosyasnn yeniden oluturulmasnn zaman kaybndan baka bir etkisi
  olmad iin kullancdan indexleme ilemi iin onay almaya gerek yok.

         IF .NOT. FILE("SOYADX.NDX")
                 USE ADRES
                 INDEX ON SOYAD TO SOYADX
                 USE ADRES
         ENDIF

  nce FILE() fonksiyonu ile SOYADX.NDX index dosyasnn diskte varl test
  edildi. SOYADX.NDX adl index dosyas diskte yoksa FILE() fonksiyonu geriye
  mantksal yanl deerini dndrr. FILE() fonksiyonun geriye ddrd
  mantksal deer .NOT. operatr ile olumsuz yapld iin index dosyas
  disket yoksa IF ile ENDIF blok kontrol deyimleri arasnda bulunan ve INDEX
  dosyasn oluturan program satrlar iletilir.

  Index dosyas diskte yoksa nce ADRES veri taban dosyasn USE deyimi ile
  atk. Kendisi iin index dosyas oluturulmak istenen veri taban
  dosyasnn mutlaka index oluturan deyimleri kullanmadan nce almas
  gerekir. Ardndan INDEX ON deyimi ile index dosyasn oluturduk. Arama veya
  index anahtar olarak SOYAD alann setik. Seilen index anahtarnn ak
  olan veri taban dosyasnda mutlaka olmas gerektiini de unutmamak gerekir.
  SOYADX, index dosyasnn diskteki addr.







 