  Ŀ
  Ŀ
                                                                          
                         dBASE Yaz Dizisi 6                              
                                                                          
  ٳ
                                                    Memik Yank             
  




                     VER TABANI DOSYASINA BLG YAZMA
                     

  Daha nce CREATE deyimi ile bir sefere mahsus olmak zere oluturulan veri
  taban dosyasna bilgi yazmak iin ilk yaplmas gereken bilgi kayt edilmek
  istenen veri taban dosyasnn USE deyimi ile almasdr. Ardndan alanlara
  aktarlmak zere bellekte tanmlanan deikenlere dardan yani klavyeden
  bilgi girilmesidir.

  Tm alanlara klavyeden bilgi girildikten sonra bellekte tutulan bu bilgiler
  diske yani veri taban dosyasna yazlr. Bu ilem byle istenildii kadar
  devam eder.

  Tabii ki bilgi diske yazlmadan nce girii yaplan bilgiler veri taban
  dosyasnn neresine yazlacaksa ona gre hazrlk yaplmaldr. Dosyaya yeni
  bir kayt yazlmak isteniyorsa yeni kaydn dosyann sonuna yazlmas
  gerekir. Veri taban dosyasna bilgi yazmayla ilgili olarak aadaki rnek
  program ve rnek programla ilgili aklamalar dikkatlice inceleyin. Bu
  ksa ve basit rnek programda veri taban dosyas ve veri taban program
  gelitirme aralarnn en temel kavramlar var.

 Ŀ
  DBO-03.PRG 
 Ĵ
  1 SET SCOREBOARD OFF                                                
  2 SET TALK OFF                                                      
  3 SET LDCHECK OFF                                                   
  4 CLEAR                                                             
  5 IF .NOT. FILE("SOYADX.NDX")                                       
  6      USE ADRES                                                    
  7      INDEX ON SOYAD TO SOYADX                                     
  8      USE                                                          
  9 ENDIF                                                             
 10 USE ADRES INDEX SOYADX                                            
 11 DEVAM="E"                                                         
 12 DO WHILE DEVAM=UPPER("E")                                         
 13     CLEAR                                                         
 14     AD1     =SPACE(10)                                            
 15     SOYAD1  =SPACE(15)                                            
 16     ADRES11 =SPACE(25)                                            
 17     ADRES21 =SPACE(25)                                            
 18     DTARIH1 ="00/00/00"                                           
 19     TELEFON1=SPACE(7)                                             
 20     @0,5 TO 3,70 DOUBLE                                           
 21     @1,25 SAY "YEN KAYIT GR"                                 
 22     @2,6 SAY "KNN SOYADINI GRN(ENTER IKI)";               
                GET SOYAD1 PICTURE "@15!"                             
 23     READ                                                          
 24     IF SOYAD1=SPACE(15)                                           
 25             CLOSE DATABASES                                       
 26             RETURN                                                
 27     ENDIF                                                         
 28     SEEK SOYAD1                                                   
 29     IF .NOT. EOF()                                                
 30             CEVAP="H"                                             
 31             @6,6 SAY "SOYADI....:"                                
 32             @6,20 SAY SOYAD1 PICTURE "@15!"                       
 33             @8,6 SAY "ADI.........:" GET AD1 PICTURE "@10!"       
 34             @8,6 SAY "ADRES1.....:" GET ADRES1 PICTURE "@25!"     
 35             @10,6 SAY "ADRES2.....:" GET ADRES2 PICTURE "@25!"    
 36             @12,6 SAY "TELEFON....:" GET TELEFON PICTURE "@7!"    
 37             @14,6 SAY "DOUM TARH:";                            
                GET DTARIH PICTURE "99/99/99"                         
 38             CLEAR GETS                                            
 39             @18,6 CLEAR TO 23,70                                  
 40             @18,6 TO 23,70 DOUBLE                                 
 41             @19,20 SAY "BU KAYIT DOSYADA VAR "                    
 42             @20,20 SAY "AYNI SME SAHP KNC BR KAYIT"         
 43             @21,20 SAY "STYOR MUSUNZ (E/H)"                     
 44             @21,45 GET CEVAP PICTURE "@1!"                        
 45             READ                                                  
 46             IF CEVAP=UPPER("H")                                   
 47                     LOOP                                          
 48             ENDIF                                                 
 49     ENDIF                                                         
 50     @4,5 CLEAR TO 23,77                                           
 51     @4,5 TO 20,70 DOUBLE                                          
 52     @6,6 SAY "SOYADI.....: "                                      
 53     @6,20 SAY SOYAD1 PICTURE "@15!"                               
 54     @8,6 SAY "ADI.........:" GET AD1 PICTURE "@10!"               
 55     @10,6 SAY "ADRES1......:" GET ADRES11 PICTURE "@25!"          
 56     @12,6 SAY "ADRES2......:" GET ADRES21 PICTURE "@25"           
 57     @14,6 SAY "TELEFON.....:" GET TELEFON1 PICTURE "@7!"          
 58     @16,6 SAY "DOUM TARH:" GET DTARIH1 PICTURE "99/99/99"      
 59     READ                                                          
 60     @24,20 SAY "BU KAYDI ONAYLIYOR MUSUNUZ..(E/H)";               
               GET DEVAM PICTURE @!1"                                 
 61     READ                                                          
 62     IF DEVAM=UPPER("E")                                           
 63             APPEND BLANK                                          
 64             REPLACE SOYAD WITH SOYAD1                             
 65             REPLACE AD WITH AD1                                   
 66             REPLACE ADRES1 WITH ADRES11                           
 67             REPLACE ADRES2 WITH ADRES21                           
 68             REPLACE TELEFON WITH TELEFON1                         
 69             REPLACE DTARIH WITH CTOD(DTARIH1)                     
 70     ENDIF                                                         
 71     @24,20 SAY "GRLECEK BAKA KAYIT VARMI (E/H)";               
                 GET DEVAM PICTURE "@1!"                              
 72     READ                                                          
 73 ENDDO                                                             
 74 RETURN                                                            
 


  imdi rnek programda kullanlan deyim ve fonksiyonlar satr satr
  anlatacam.


Ŀ
1.Satr            
SET SCOREBOARD OFF 

 Normal artlarda yani programc ve dBASE kullancs tarafndan mdahele
 yaplmad srece programlarn altrlmas ilemi srasnda ekrann ilk
 satrnn 65. stunundan sonraki ksmna insert modunda olunup olunmad,
 klavyenin byk harfe kilitlenip kilitlenmedii gibi mesajlar yazlr. Eer
 araya yazma yani insert modunda bulunuluyorsa ekrann ilk satrnn 65.
 stununa INS, klavye byk harfe kilitlenmise CAPS bilgisi yazlr.

 te kullanc veya programc bu mesajlarn ekrann ilk satrna yazlmasn
 istemiyorsa programa SET SCOREBOARD OFF satrn eklemesi gerekir. Eer SET
 SCOREBOARD deyimi ak yani "ON" durumunda ise ekrann ilk satrnn 65.
 stunundan sonraki ksmna belirtilen mesajlarn dnda herhangi bir bilgi
 yazlamaz.

Ŀ
2. Satr       
SET TALK OFF   

 dBASE'de nokta iletisinde tek tek komut verilirken kullnanclarn verdikleri
 veya ardklar deyim veya fonksiyon hakknda ekrana aklayc bilgi
 verilmesi kullancnn yararna olur. Ekrana aktif index dosyasnn ad,
 zerinde ilem yaplan veri taban dosyasnn aktif kaydn numaras yazlr.
 Ne var ki bir ok kullanc yerli yersiz ekrann deiik yerlerine verilen
 mesajlardan rahatsz olurlar. Kullancnn bir mdahelesi yoksa ister
 dBASE'in yorumlayc ortamnda ister dBASE derleyicisi ile derlenen
 programlar altrlrken ekrana yaplan ilem hakknda mesajlar, bilgiler
 verilir.

 Kullanc veya programc bu mesajlarn ekrana verilmesini istemiyorsa
 programa SET TALK OFF satrn eklemesi gerekir. Bu yaz dizisinde konumuz
 dBASE ile programclk olduu iin ekrana dBASE'in kontrolmz dnda mesaj
 vermesini engellemek iin her seferinde rnek programlara SET TALK OFF
 satrn ekleyeceiz.

 SET deyimi ile balayan dBASE deyimlerinin byk bir ounluu a-kapa
 eklinde almaktadr. Bu a-kapa eklinde alan herhangi bir SET
 deyiminin etkisini amak iin SET deyimine "ON", kapatmak iin "OFF"
 parametresi eklenir. rnek programn 1. ve 2. satrlarndaki SET deyimlerinde
 OFF ekleri kullanld. Baz SET deyimleri varsaym olarak kapal iken
 bazlar aktr.

 SET deyimlerinin varsaylan deerleri istenirse CONFIG.DB dosyas aracl
 ile deitirilebilir. Bu dosya herhangi bir text editr veya nokta
 iletisinde MODIFY COMMAND deyimi incelenip deitirilebilir. Bunun dnda
 dBASE IV ile birlikte verilen DBSETUP.EXE program ile CONFIG.DB dosyas
 zerinde ilem yaplabilir.

Ŀ
3. Satr         
SET LDCHECK OFF  

 dBASE IV 2.0 ve dBASE Compiler bilgisayara ilk kurulurken kullancdan hangi
 Code Page-lke kodunun kullanlaca sorulur. Orjinal dBASE IV 2.0 ve dBASE
 Compiler kopyas 850 ve 457 Code Page destei veriyor. Eer bilgisayarnzda
 baka bir Code Page deeri aktifse veri taban dosyas zerinde yaplan her
 ilemde sorunlar kabilir. Bu nedenle kullanlan dBASE veya dBASE Compiler
 kopyasnn aktif Code Page destei yoksa programn bana SET LDCHECK OFF
 satrnn eklenmesi gerekir. Buradaki L harfi Language-dil, D harfi Driver
 anlamndadr. Programa bu satr eklenince dBASE, dil yani Code Page iin
 kontrol yapmaz. Ancak kulllanlan Code Page dBASE tarafndan desteklenmiyorsa
 kaytlarn sralanmasnda bir takm sorunlar olur. Bu adan kullancnn
 gerekli nlemleri almalar gerekir.

 Eer CONFIG.SYS ve AUTOEXEC.BAT dosyalar aracl ile seilen Code Page
 dBASE veya dBASE derleyicisi tarafndan deteklenmiyorsa ve programlara
 dosyadan okuma yapmadan nce SET LDCHECK OFF satr eklenmezse veri taban
 dosyasna eriim salanamaz.

 Daha ncede belirtildii zere Borland'n Trkiye temsilcisi Bimeks
 tarafndan dBASE paketi dnda salanan Language Driver-srcsn ieren
 diskettle dBASE'in 857 Code Page'i desteklenmesi salanmaktadr. Eer
 elinizde bu src disketi yoksa ya btn programlarnza SET LDCHECK OFF
 satrn ekleyin ya da bilgisayarnzdaki Config.sys ve Autoexec.bat
 dosyalarnda deiiklik yaparak aktif Code Page olarak 457'yi sein. Bu
 durumda iletim sisteminin imkanlar dnda klavye Trkeletirmesi
 yaplmaldr.

 Elinizde 857 Code Page desteini salayan src programlarnn ieren disket
 varsa ve bilgisayarnzn Trke yazmasn salamak zere iletim sisteminin
 imkanlarndan yararlanyorsanz dBASE IV ve dBASE Compiler iin ayr ayr
 install-kurma yapmalsnz. Src rogram hem dBASE IV 2.0 iin hem de dBASE
 Compiler iin kullanlabilmektedir. Src program dBASE derleyicisinin 2.0
 versiyonu da destekliyor.

Ŀ
4. Satr  
CLEAR     

 Clear deyimi bu ekilde yani tek bana kullanld zaman ekran
 temizler. DOS'un CLS komutu ile ayn etkiye sahiptir. CLEAR
 deyiminin dier kullanm ekilleri ileri konularda anlatlacaktr.
 imdilik bilmeniz gereken, rnek programn 4. satrnda kullanlan
 CLEAR deyiminin ekranda o anda yazl olan hereyi sildiidir.

Ŀ
5, 6, 7, 8 ve 9. Satrlar             
Ĵ
IF .NOT. FILE("SOYADX.NDX")           
       USE ADRES                      
       INDEX ON SOYAD TO SOYADX       
       USE                            
ENDIF                                 

 rnek programn bu satrlarnda yukardaki sayfada anlatld zere
 nce FILE() fonksiyonu ile index dosyasnn diskte varl kontrol
 ediliyor. SOYADX.NDX adl index dosyas diskte yoksa nce ADRES adl veri
 taban dosyas tek bana alr. Bir sonraki satrda ise INDEX ON deyimi ile
 SOYAD alannn anahtar olarak kullanld index dosyas oluturuluyor. Index
 dosyas oluturulduktan sonra USE deyimi tek bana kullanlyor.

 USE deyiminin bu ekilde kullanlmas halinde ak olan veri taban dosyas
 kapatlr. USE deyimi ile o an iin ak olan ADRES adl veri taban
 dosyasn kapatmamzn nedeni dosyadan index dosyas yardmyla arama
 yapabilmek iin dosyay index dosyas ile birlikte aabilmektir. Yukarda da
 belirtildii zere SOYADX.NDX adl index dosyas diskte varsa IF ile ENDIF
 blok kontrol deyimleri arasnda kalan satrlar iletilmez. Programn iletimi
 ENDIF deyiminden bir sonraki satra geer.

Ŀ
10. Satr                 
USE ADRES INDEX SOYADX    

 Program parasnn en nemli satr bu satrdr. Bu satrda daha nce
 oluturulan, belki de bilgi kayt edilen ADRES.DBF adl veri taban
 dosyas daha nce oluturulan SOYADX.NDX adl index dosyas ile birlikte
 alyor. Veri taban ve index dosyasn amak iin kullanlan deyim USE.
 dBASE'deki USE deyimi bir ok dildeki OPEN deyimi ile ayn ilemi yapar. USE
 deyimi ile veri taban dosyasn aarken ek olarak alan INDEX dosyasn
 amak programcnn seimine baldr. Dosyadan kayt okurken veya arama
 yaparken index dosyasndan faydalanlmamas durumunda veri taban dosyas
 baka dillerdeki sral dosyadan farksz olur. Doal olarak index dosyas
 kullanlmazsa kayt arama teknii rnek programda verilenden ok farkl
 olacaktr. Diskte olmayan bir veri taban dosyasnn veya index dosyasnn
 USE deyimi ile almaya allmas halinde programn almas krlacaktr.

 dBASE IV ile kullanma sunulan MDX uzantl index dosyalarn oluturulmas ve
 kullanlmasnda NDX tipi index dosyalarndan farkl teknikler
 kullanlmaktadr. Ancak ilev bakmndan MDX tipi index dosyalar NDX tipi
 index dosyalarndan farkl deildir.

Ŀ
11. Satr    
DEVAM="E"    

 Programda yeni kayt yapmak isteyip istemediimizi bildirmede kullanacamz
 DEVAM deikeni tanmlanyor. Tipi karaktersel olan bu deikene ilk deer
 olarak "E" harfi atanyor. Tek karakterlik bu deiken ilk deer vererek
 tanmlanrken istenseydi "E" yerine boluk(SPACE) atanabilirdi.

Ŀ
12. Satr                    
DO WHILE DEVAM=UPPER("E")    

 Bu satrda yine nemli ve ok kullanlan bir dng deyimi var. Bu ad
 DO WHILE-ENDDO olan deyimi baka programlama dillerinde program yazanlar
 bilirler. DO WHILE-ENDDO deyiminin genel kullan biimi yle:

         DO WHILE ifade
                 .......
                 EXIT
                 ......
                 ......
                 LOOP
                 .......
                 .......
         ENDDO

 "ifade" yerine IF deyiminde olduu gibi mantksal bir karlatrma, bir
 deiken veya tek mantksal doru(.T.) deeri kullanlabilir. Kullanlacak
 karlatrmann sonucu mantksal doru .T. olduu srece "DO WHILE ifade"
 ile "ENDDO" arasnda yer alan btn program satrlar bir dng halinde
 srekli olarak iletilir.

 Bizim rnekte DO WHILE DEVAM=UPPER("E") eklinde ifade bulunmaktadr. Yani
 DEVAM deikeninin ierii "e" veya "E" olduu srece 12. satr ile 74.
 satrlar arasnda kalan btn program satrlar hep iletilecektir. Srekli
 dng iinde kalmamak iin programn 71. satrnda kullancya DEVAM
 deikeninin ieriini deitirme imkan verilmektedir. Kullanc bu satrda
 DEVAM deikeninin ieriini "e" veya "E" den farkl yaparsa dngden
 klarak programn iletimi ENDDO deyimini izleyen satra geer.

 DO WHILE-ENDDO deyiminin genel kullan biiminde bulunan iki deyimden EXIT,
 dngden "ifade" ile belirtilen arta bal kalmadan kmay salar.
 Programn iletimi EXIT deyimine geldiinde veya dng ierisinde EXIT
 deyiminin kullanlmas halinde EXIT deyiminden ENDDO deyimine kadar olan
 program satrlar iletilmeyip programn iletimi yine ENDDO'yu izleyen
 satra geer.

 LOOP deyimi ise belirli bir arta bal olarak programn iletiminin tekrar
 dngnn balad program satrna gemesini salar. Bu durumda LOOP
 deyiminden ENDDO deyimine kadar olan program satrlar, iinde bulunulan
 dng turunda iletilmez.

 rnek program parasnda yer alan UPPER() fonksiyonu parametre olarak ald
 karaktersel bilgide yer alan harflerin kk olanlarn byk harfe evirir.
 Dikkat  edin Trke'ye zg olan ,  gibi harfleri UPPER() fonksiyonu byk
 harfe eviremiyebilir. rnekteki DEVAM=UPPER("E") eklindeki kullanmda DEVAM
 deikeninin ieriinin byk harfe evrilmi halinin "E" olmas isteniyor.
 Dolaysyla kullancnn DEVAM deikenine "e" harfini de atamas durumunda
 dng yine devam edecektir.

Ŀ
13.Satr   
CLEAR      

 Ekrann tm tekrar siliniyor. Bunun iin kullanlan deyim CLEAR Ekrann
 tmn deilde belli bir ksmn silmek iin program parasnn 38. ve 49.
 satrlarndaki sz dizimi kullanlr. 38. satrdaki "@18,6 CLEAR TO 23,70"
 yazlna gre ekrann 18. satr 6. stnundan 23. satr 70. stnuna kadar
 olan ksm silinir.
 Buna gre CLEAR deyiminin etkisi ile "@0,0 CLEAR TO 24,79 " program satrn
 etkisi ayndr.

Ŀ
14, 15, 16, 17, 18. ve 19. Satrlar       
Ĵ
AD1 = SPACE(10)                           
SOYAD1=SPACE(15)                          
ADRES11=SPACE(25)                         
ADRES21=SPACE(25)                         
DTARIH1="00/00/00"                        
TELEFON1=SPACE(7)                         

 Bu satrlarda deikenlere ilk deerler atanarak programda kullanlacak
 deikenler tanmlanmaktadr. Dikkat edilirse bu satrlarda tanmlanan
 deiken adlar ile daha nce oluturduumuz ADRES adl veri taban
 dosyasnda bulunan alan adlar arasnda benzerlikler var. Burada yaplmak
 istenen ilem itibar ile isimlerdeki benzerlikler bir zorunluluk olmamakla
 birlikte alan tipleri ile tanmlanan deikenlerin ayn tipe sahip olmas
 gerekiyor. Bu gereklilii program parasnn 64., 65., 66., 67., 68 ve 69.
 satrlarda grmek mmkn. nk veri taban dosyasna yazlacak bilgiler nce
 bu tanmlanan deikenlere aktarlyor, veri taban dosyasna daha
 sonra yazlyor.

Ŀ
20.Satr                
@0,5 TO 3,70 DOUBLE     

 Bu program satr ile ekrann 0,5 koordinat ile 3,7 kordinatlarn
 evreleyen ift izgili pencere izilmektedir. Burada diktanizi ekmek
 istediim bir nokta var. Normalde PC'lerde text ekrannda 25 satr ve
 80 stun bulunmaktadr. dBASE'de de bu deerler geerli. Ancak satr
 ve stun numaralar 1 yerine 0'dan balar. Buna gre en byk satr numaras
 25 deil 24 ve en byk stun numaras ise 79'dur. Bu satrdaki DOUBLE eki
 kullanlmazsa varsaym olarak ereve tek izgi ile oluturulur.

Ŀ
21.Satr                         
@1,25 SAY "YEN KAYIT GR"    

 Ekrann 1. satr, 25. stununa SAY deyimi ile "YEN KAYIT GR" mesaj
 yazdrlyor. Sabit mesajlar ekrana yazdrabilmek iin mesajlar program
 dahilinde trnak iine alnmaldr.

Ŀ
22. ve 23.Satrlar                                   
Ĵ
@2,6 SAY "KNN SOYADINI GRN(ENTER IKI)";      
                GET SOYAD1 PICTURE "@15!"            
READ                                                 

 Ekrann 2. satr, 6. stnuna nce SAY deyimi ile "KNN SOYADINI GRN
 (ENTER LE IKI)" mesaj yazdrlp GET deyimi ile SOYAD1 deikeni iin
 klavyeden deer okutuluyor. Deer okutmay salayan dier deyim olan READ
 deyimi ise 23. satrda kullanlm.Hi bir ey yazmadan direk ENTER tuuna
 baslmas halinde SOYAD1 deikeni tanmlanrken atanan SPACE(15) deeri
 korunur.

Ŀ
24, 25, 26. ve 27. Satrlar          
Ĵ
IF SOYAD1=SPACE(15)                  
        CLOSE DATABASES              
        RETURN                       
ENDIF                                

 dBASE programlar yap olarak biri ana veya en st Fonksiyon veya Procedure
 olmak zere bir veya birden fazla fonksiyon veya procedure'dan meydana gelir.
 Derlenip ana programa dahil olan btn fonksiyonlar btn fonksiyon veya
 Procedurlarn iinden arlabilinir. Bir baka kullanc tanml fonksiyon
 tarafndan arlan fonksiyondan kmak veya fonksiyonun almasn bitirmek
 iin RETURN deyimi kullanlr. Daha nce belirtildii zere kullanc tanml
 Fonksiyondan kmak iin kullanlan RETURN deyiminin yanna fonksiyon
 tarafndan dndrlecek deer veya bu deeri ieren deikenin ad
 yazlmaldr.

  *ANA MODUL
          .........
          .........
          Sonuc=ornek1()          && ornek1 fonksiyonu arlyor
          .........
          DO deneme                && Deneme adl procedure altrlyor
          .........
          IF.....
               Sonuc=ornek2(parametre1) && ornek2 fonksiyonu parametre1 ile
          ENDIF                          && arlyor
          .......
          RETURN                          && Ana modln sonu
  Fonksiyon ornek1
          ........
          ........
  RETURN DEER

  FONKSIYON ornek2
  PARAMETERS Para1
          .........
          .........
  RETURN ....

  PROCEDURE deneme
          .........
          ........
          ........
  RETURN

 Kullanc tarafndan tanmlanm olan fonksiyonlar armak ile hazr dBASE
 fonksiyonlarn armak birbirinden farkl deildir. Fonksiyon tanmlanrken
 dardan paramatre veya bilgi alnaca ngrlmse fonksiyon arlrken
 parametrelerle arlmaldr. ngrlenden daha az sayda paramatre
 aktarlmas halinde programcnn olas sorunlara kar tebdir almas gerekir.
 Hazr dBASE fonksiyonlarndan biri olan FILE() fonksiyonunu kullanrken
 fonksiyona parametre olarak diskte aratrlmas istenen dosyann adn
 vermitik. File() fonksiyonunu parametresiz armann anlamsz olaca
 ortada.

 Fonksiyonlar arlrken fonksiyon adna parantez eklemek ve varsa
 parantezlerin arasnda parametreleri yerletirmek yeterli oluyor.
 Procedure'lar armak iin ise DO deyiminden yararlanlr. Aslnda dBASE
 derleyicisinin nazarnda bu kk farkllklarn dnda temel yaklam
 olarak fonksiyon ile procedure arasnda bir fark yok. Ancak Procedure
 arlrken aktarlacak parametre adlarndan nce bala grevi yapan WITH
 deyimi kullanlmaldr.

 Bizim program rneinde programdan kmak amacyla "KNN SOYADINI GRN"
 mesajna ENTER tuu ile cevap verilmesi yani SOYAD1 deikeninin ieriinin
 SPACE(15) olmas halinde nce CLOSE DATABASES deyimi ile ak olan veri
 taban dosyalar kapatlyor ardndan RETURN deyimi ile programdan klyor.
 inde bulunulan yordam en stteki yordam olmas nedeniyle programdan
 klr.

Ŀ
28. Satr    
SEEK SOYAD1  

 SEEK deyimi dBASE IV ve dBASE derleyicisinin temel deyimlerinden biridir.
 Index dosyas yardmyla kayt aramada kullanlr. Index dosyasnn
 almad durumlarda SEEK deyimini kullanamayz. SEEK deyimi ile birlikte
 kullanlan bilginin index dosyas yardmyla veri taban dosyasnda
 aranabilmesi iin kullanlan index anahtarnn aranan bilgi ile ayn
 zelliklere sahip olmas gerekir.

 Bizim rnekte nce oluturup sonra ap kullandmz index dosyasnn
 indexleme anahtar SOYAD alan idi. Dolaysyla index dosyas yardmyla
 ADRES adl veri taban dosyasndan yalnzca SOYAD bilgilerine gre arama
 yapabiliriz. Bu ekliyle bizim rnekte adrese veya doum tarihine gre arama
 yapmamz mmkn deil.

 Programc baka anahtarlar kullanarak arama yapmak isterse bu anahtarlarla
 ikinci veya nc index dosyas ap kullanabilir. Birden fazla index
 dosyas ap kullanan rnek programlar ileri konularda vereceim.Tekrar
 hatrlatmak gerekirse MDX uzantl oklu index dosyalar birden fazla
 anahtar ierebilmektedir.

 Programn iletimi "SEEK SOYAD1" eklindeki program satrna geldiinde ak
 olan veritaban dosyasndan (bizim rnekte ADRES) yine ak ve aktif olan
 index dosyas yardmyla SOYAD1 deikeninin ierii aranr. Bulunursa kayt
 gstergesi bu kayda konumlanr. Bulunmazsa bu kez kayt okuma gstergesi
 dosyann sonuna konumlanr. Yani EOF() fonksiyonu geriye mantksal doru
 .T. deerini dndrr hale gelir. Ayn anda birden fazla index dosyasn ak
 tutma imkan olmakla birlikte yalnzca bir index dosyas aktif index olarak
 kullanlabilir. Eer bizim rnekte olduu gibi yalnzca bir tek index dosyas
 ile allyorsa bu index dosyas ayn zamanda aktif index dosyas olarak
 ilev grr.

 Programn bu satrnda yani programn kayt girii yaplan bu blmnde veri
 taban dosyasnda kayt aramamzn nedeni ayn isme sahip birden fazla kaydn
 dosyada olmas konusunda kullancy uyarmaktr. Yani daha nce kaytl olan
 bir SOYAD bilgisini tekrar kayt etmeye kalkmamz durumunda program bizi
 uyaracaktr.

Ŀ
29. ile 49. Satrlar                                                  
Ĵ
IF .NOT. EOF()                                                        
        CEVAP="H"                                                     
        @6,6 SAY "SOYADI....:"                                        
        @6,20 SAY SOYAD1 PICTURE "@15!"                               
        @8,6 SAY "ADI.........:" GET AD1 PICTURE "@10!"               
        @8,6 SAY "ADRES1......:" GET ADRES1 PICTURE "@25!"            
        @10,6 SAY "ADRES2......:" GET ADRES2 PICTURE "@25!"           
        @12,6 SAY "TELEFON.....:" GET TELEFON PICTURE "@7!"           
        @14,6 SAY "DOUM TARH:" GET DTARIH PICTURE "99/99/99"       
        CLEAR GETS                                                    
        @18,6 CLEAR TO 23,70                                          
        @18,6 TO 23,70 DOUBLE                                         
        @19,20 SAY "BU KAYIT DOSYADA VAR "                            
        @20,20 SAY "AYNI SME SAHP KNC BR KAYIT"                 
        @21,20 SAY "STYOR MUSUNZ (E/H)"                             
        @21,45 GET CEVAP PICTURE "@1!"                                
        READ                                                          
                                                                      
        IF CEVAP=UPPER("H")                                           
                LOOP                                                  
        ENDIF                                                         
ENDIF                                                                 

 SEEK deyimi ile yaplan aramadan sonra aramann baarl olup olmad kayt
 gstergesinin yerinden anlalyordu. te 29. satrda EOF() fonksiyonu ile
 kayt gstergesinin dosyann sonunda olup olmadna baklyor. Eer yaplan
 aramadan sonra kayt gstergesi dosyann sonuna gitmemise bunun anlam
 aranan kayt bulunmutur.  Programmzn bu blmnde kayt girii yaptmz
 iin kullancy hemen girii yaplmak istenen kaydn daha nce dosyaya kayt
 edilmi olduu konusunda uyaryoruz.

 Bu arada szkonusu kaydn detaylarn da ekrana getiriyoruz. Kullancnn
 ayn anahtar(SOYAD) deerine sahip ikinci kayda sahip olmak isteyebilecei
 ihtimali karsnda kendisine cevap verme, seme yapma ans tanmak iin
 CEVAP adl deikenini tanmlyoruz. lk deer olarak hayr anlamnda "H"
 harfini veriyoruz.

 Kayt gstergesi dosyann sonunda deilse yani kayt bulunmusa 31. satr ile
 38. satr arasnda kalan program satrlarnda, bulunulan bu kaydn
 ayrntlarn ilgili ekran satrlarna yazyoruz. Dikkat ederseniz burada
 bilgi girii yapma niyetimiz olmamasna ramen yine GET deyimi kullanlm.
 Burada kullanlan GET deyimi bilgi girii amal olmayp bilginin yani kaydn
 ekranda gsterilmesi ekline etki etmektedir.

 Hatrlanrsa GET deyimi READ deyimi kullanlmadan tek bana bilgi girii
 yapmaya imkan salayamyordu. Burada kullanlan GET deyimlerinin daha nce
 kullanlan GET'lerden fark READ yerine kullanlan CLEAR GETS deyimi. GET
 deyimlerinin bu ekildeki kullanmnda kayt bilgilerinin ekranda ters
 grnt olarak grnmesini salamaktr.

 Programn 40.-45. satrlarnda daha nce kayd yaplm olan adres kayd ile
 ayn anahtara veya ayn SOYAD'a sahip olacak bir kaydn istenip istenmedii
 soruluyor. Verilecek cevap tek karakterlik CEVAP deikenine aktarlacak.
 CEVAP deikenine hayr anlamnda "H" harfi aktarlmas halinde programn
 iletimi LOOP deyimi ile tekrar DO WHILE deyimini izleyen program satrna
 geer. CEVAP deikenine "H" den farkl bir deer aktarlmas halinde
 programn iletimi ayn anahtar deerine sahip baka bir kayt giriinin
 yaplaca 50. satra geer.Yine ayn ekilde SEEK deyimi ile yaplan
 aramann baarl olmamas halinde programn iletimi direk 50. satra geer.

Ŀ
50. ile 59. Satrlar                                           
Ĵ
@4,5 CLEAR TO 23,77                                            
@4,5 TO 20,70 DOUBLE                                           
@6,6 SAY "SOYADI.....: "                                       
@6,20 SAY SOYAD1 PICTURE "@15!"                                
@8,6 SAY "ADI.........:" GET AD1 PICTURE "@10!"                
@10,6 SAY "ADRES1......:" GET ADRES11 PICTURE "@25!"           
@12,6 SAY "ADRES2......:" GET ADRES21 PICTURE "@25"            
@14,6 SAY "TELEFON.....:" GET TELEFON1 PICTURE "@7!"           
@16,6 SAY "DOGUM TARIHI:" GET DTARIH1 PICTURE "99/99/99"       
READ                                                           

 Programn bu satrlarnda nce "@4,5 CLEAR TO 23,77" satr ile ekrann
 belirtilen blm temizleniyor. Ardndan temizlenen bu blm ereve iine
 alnyor. erevenin ift olmas iin DOUBLE deyiminden yararlanld. Kayd
 yaplacak kiinin soyad daha nce girildii iin 52. ve 53. satrlarda GET
 deyimi kullanmayp yalnzca SAY deyimi kullanld.

 Burada yine 4 adet GET iin bir adet READ deyimi kullanld. Bu nedenle en
 son GET'ten yani DTARIH1'den enter tuu ile klmad srece ok tular ile
 bilgi giri satrlar arasnda dolamak mmkn.  Burada dikkat edilmesi
 gereken dier bir nokta, DTARIH1 deikeninin PICTURE yaps.

Ŀ
60. ve 61.Satrlar                                  
Ĵ
@24,20 SAY "BU KAYDI ONAYLIYOR MUSUNUZ..(E/H)";     
         GET DEVAM PICTURE @!1"                     
READ                                                

 Programn ak bu satrlara geldiinde kullancya kayt bilgisi veri
 taban dosyasna yazlmadan kayd onaylayp onaylamad sorusu yneltilir.
 Soruya verilen cevap yine DEVAM deikenine aktarld.

Ŀ
62.- 70. Satrlar                               
Ĵ
IF DEVAM=UPPER("E")                             
        APPEND BLANK                            
        REPLACE SOYAD WITH SOYAD1               
        REPLACE AD WITH AD1                     
        REPLACE ADRES1 WITH ADRES11             
        REPLACE ADRES2 WITH ADRES21             
        REPLACE TELEFON WITH TELEFON1           
        REPLACE DTARIH WITH CTOD(DTARIH1)       
ENDIF                                           

 Programn 60. satrnda sorulan soruya "E" diye cevap verilip enter tuuna
 baslmas halinde IF-ENDIF deyimleri arasnda bulunulan satrlar iletilerek
 kayt bilgisi dosyaya yazlr. Burada kullanlan APPEND BLANK deyimi daha
 nce de belirtildii zere ak veri taban dosyasnn sonuna bir bo kayt
 ekler ve kayt gstergesi bu kayda konumlanr. Bizim kullandmz ve
 programn bu aamasnda ak olan veri taban dosyasna bo kayt eklenmesi
 demek SOYAD alanna SPACE(15), ADRES1 alanna SPACE(25) vb. deerler
 aktarlp dosyann sonuna yeni bir kayt olarak yazlmasdr.

 Ancak biz dosyann sonuna bo bir kayt deil programn daha nceki
 satrlarnda dardan girdiimiz bilgileri kayt bilgisi olarak kullanp
 kayt etmek istemitik. Bu isteimizi yerine getirmek iin yapacamz
 tek ey, boluk eklindeki deerlere sahip olan alanlar bizim girdiimiz
 deerlerle deitirmektir. Bunun iin kullanlacak deyim ise REPLACE'dir.
 Programn 52.-56. satrlarnda bu ilemi yapan satrlar bulunmaktadr. te
 dardan girilen bilgiler direk olarak veri taban dosyasna yazlmad
 iin sonuna 1 eklediim deikenleri programn banda tanmladm.

Ŀ
71. ve 72. Satrlar                                  
Ĵ
@24,20 SAY "GRLECEK BAKA KAYIT VARMI (E/H)";      
                 GET DEVAM PICTURE "@1!"             
READ                                                 

 Bu satrlarda kullancya bilgi kayt etmeye devam edip etmeyecei konusunda
 soru sorulmaktadr. Sorunun cevab DEVAM deikenine aktarlyor.
 Hatrlanrsa DO WHILE-ENDDO dngs DEVAM deikeni "E" deerine sahip olduu
 srece devam edecekti. DEVAM deikenine "E" den farkl bir deer verilmesi
 halinde programn iletimi ENDDO deyimini izleyen program satrna geer.

 Yukarda verilen rnek programda veri taban dosyasna yazlmak istenen her
 kayda ait bilgiler nce kaytta bulunan alanlarla ayn zellie sahip olan ve
 sonuna 1 karakteri eklenen deikenlere aktarld. Ardndan APPEND BLANK ile
 veri taban dosyasna bo bir kayt eklendi. En son olarak REPLACE deyimi ile
 deikenlere daha nce SAY-GET-READ deyimleri aktarlan bilgiler veri taban
 dosyasnn bo kaydnn ierii ile gncelletirildi. Btn programlama
 dillerinde dosyaya-diske yeni bir kayt yazmak iin ayn sra izlenir.

 Ancak istenirse kayt bilgileri READ-GET deyimi ile dorudan veri taban
 dosyasnn alanlarna aktarlabilir. Aada verilen rnek programla yukarda
 verilen rnek program ilev bakmndan birbirinden farkszdr.

SET SCOREBOARD OFF
SET TALK OFF
SET LDCHECK OFF
CLEAR
IF .NOT. FILE("SOYADX.NDX")
        USE ADRES
        INDEX ON SOYAD TO SOYADX
        USE
ENDIF
USE ADRES INDEX SOYADX
DEVAM="E"
DO WHILE DEVAM=UPPER("E")
        CLEAR
        @0,5 TO 3,70 DOUBLE
        @1,25 SAY "YEN KAYIT GR"
        @2,6 SAY "KNN SOYADINI GRN(ENTER IKI)";
                GET SOYAD1 PICTURE "@15!"
        READ
        IF SOYAD1=SPACE(15)
                CLOSE DATABASES
                RETURN
        ENDIF
        SEEK SOYAD1
        IF .NOT. EOF()
                CEVAP="H"
                @6,6 SAY "SOYADI....:"
                @6,20 SAY SOYAD1 PICTURE "@15!"
                @8,6 SAY "ADI.........:" GET AD PICTURE "@10!"
                @8,6 SAY "ADRES1......:" GET ADRES1 PICTURE "@25!"
                @10,6 SAY "ADRES2......:" GET ADRES2 PICTURE "@25!"
                @12,6 SAY "TELEFON.....:" GET TELEFON PICTURE "@7!"
                @14,6 SAY "DOUM TARH:" ;
                      GET DTARIH PICTURE "99/99/99"
                CLEAR GETS
                @18,6 CLEAR TO 23,70
                @18,6 TO 23,70 DOUBLE
                @19,20 SAY "BU KAYIT DOSYADA VAR "
                @20,20 SAY "AYNI SME SAHP KNC BR KAYIT"
                @21,20 SAY "STYOR MUSUNZ (E/H)"
                @21,45 GET CEVAP PICTURE "@1!"
                READ
                IF CEVAP=UPPER("H")
                        LOOP
                ENDIF
        ENDIF
        @4,5 CLEAR TO 23,77
        @4,5 TO 20,70 DOUBLE
        APPEND BLANK
        @6,6  SAY "SOYADI.....: "
        @6,20 SAY SOYAD1 PICTURE "@15!"
        @8,6  SAY "ADI.........:" GET AD PICTURE "@10!"
        @10,6 SAY "ADRES1......:" GET ADRES1 PICTURE "@25!"
        @12,6 SAY "ADRES2......:" GET ADRES2 PICTURE "@25"
        @14,6 SAY "TELEFON.....:" GET TELEFON PICTURE "@7!"
        @16,6 SAY "DOGUM TARIHI:" GET DTARIH PICTURE  "99/99/99"
        READ
        @24,20 SAY "BU KAYDI ONAYLIYOR MUSUNUZ..(E/H)";
               GET DEVAM PICTURE "@!1"
        READ
        IF DEVAM=UPPER("E")
                REPLACE SOYAD WITH SOYAD1
                REPLACE AD WITH AD
                REPLACE ADRES1 WITH ADRES1
                REPLACE ADRES2 WITH ADRES2
                REPLACE TELEFON WITH TELEFON
                REPLACE DTARIH WITH DTARIH
        ENDIF
        @24,20 SAY "GRLECEK BAKA KAYIT VARMI (E/H)" ;
                GET DEVAM PICTURE "@1!"
        READ
ENDDO
RETURN

 Programn REPLACE deyiminin kullanld satrlara zellikle dikkatinizi
 ekmek istiyorum. Bu rnek programn bir ncekinden en nemli fark,
 kullancnn kayd dosyaya yazmaktan vazgemesi durumunda ortaya kar. nk
 bu rnekte bir ncekinden farkl olarak henz bilgi girii yapmadan dosyaya
 bir bo kayt yazlmaktadr. Kaydn dosyaya yazlp yazlmayacan
 belirlemek amacyla sorulan soruya evet cevab verilmese bile diske ii bo
 olan kayt yazlm olacaktr.