  Ŀ
  Ŀ
                                                                          
                         dBASE Yaz Dizisi 7                              
                                                                          
  ٳ
                                                    Memik Yank             
  




                       KAYITLARDA DEKLK YAPMA
                       

> dBASE yaz dizisinin bu blmnde daha nce bilgi girii yaplan bir veri
  taban dosyas kaytlarnda nasl deiiklik yaplaca anlatlacak ve bu
  amala kullanlabilecek rnek programn kodu verilecek. Veri taban dosyas
  kaytlarnda deiiklik yapmak denilince kayd nce bulup sonra deiirip
  tekrar veri taban dosyasna yazmak anlalmaldr.

  Veri taban dosyasnda kayt arama ileminde index dosyalarndan
  yararlanld iin en banda kaytlarnda deiiklik yaplmak istenen
  dosya ilgili index dosyas ile birlikte almaldr. Bizim rneimizde
  kayt arama ilemi SOYAD alanna gre yaplmaktadr. Dosya aldktan
  sonra kullanc deitirilmek istenen kaydn index anahtar olan SOYAD
  bilgisini girecek. Bu SOYAD bilgisi SEEK deyimi ile ADRES adl veri taban
  dosyasnda aranacak; bulunursa kayt dzletmek veya inceleme yapmak zere
  ekrana getirilecek; bulunmazsa kullancya dzeltilmek istenen kaydn veri
  taban dosyasnda olmad mesaj verilecek.

Ŀ
 DBO-04.DBF 
Ĵ
 SET TALK OFF                                                             
 SET LDCHECK OFF                                                          
 SET SCOREBOARD OFF                                                       
 USE ADRES INDEX SOYADX                                                   
 DEVAM="E"                                                                
 DO WHILE DEVAM=UPPER("E")                                                
 CLEAR                                                                    
 AD1=SPACE(10)                                                            
 SOYAD1=SPACE(15)                                                         
 ADRES11=SPACE(25)                                                        
 ADRES21=SPACE(25)                                                        
 DTARIH1="00/00/00"                                                       
 TELEFON1=SPACE(7)                                                        
 @0,5 TO 3,70 DOUBLE                                                      
 @1,25 SAY "KAYITTA DEKLK"                                           
 @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 "SOYAD........:" GET SOYAD PICTURE "@15!"               
         @8,6 SAY "AD................:" 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 "DOUM TARH.:" GET DTARIH PICTURE "99/99/99"         
         READ                                                             
         @24,20 SAY "DEKLK KAYIT EDLSN M (E/H)";                  
                         GET DEVAM PICTURE "@!1"                          
         READ                                                             
         IF DEVAM="E"                                                     
                 REPLACE SOYAD WITH SOYAD                                 
                                                                          
                 REPLACE AD WITH AD                                       
                 REPLACE ADRES1 WITH ADRES1                               
                 REPLACE ADRES2 WITH ADRES2                               
                 REPLACE TELEFON WITH TELEFON                             
                 REPLACE DTARIH WITH DTARIH                               
         ENDIF                                                            
 ELSE                                                                     
         @20,5 CLEAR TO 23,77                                             
         @20,5 TO 23,77 DOUBLE                                            
         @21,20 SAY "BU KAYIT DOSYADA YOK"                                
         @22,20 SAY "DETRLECEK BAKA KAYIT VARMI (E/H)";             
                         GET DEVAM PICTURE "@!1"                          
         READ                                                             
         IF DEVAM="E"                                                     
                 LOOP                                                     
         ELSE                                                             
                 RETURN                                                   
         ENDIF                                                            
                                                                          
 ENDIF                                                                    
 @24,20 SAY "GRLECEK BAKA KAYIT VARMI (E/H)";                          
         GET DEVAM PICTURE "@1!"                                          
 READ                                                                     
 ENDDO                                                                    
 RETURN                                                                   


 Bu veri taban dosyas kaytlarnda deiiklik yapmada kullanlan rnek
  program dikkatlice inceleyecek olursanz, en nemli noktann dzeltilmi
  bir kayd tekrar veri taban dosyasna yazarken bu kez APPEND BLANK
  deyiminin kullanlmam olduunu grrsnz. nk bu program parasnda
  asl yapmak istenen kayd dosyadan bulup, okuyup, dzeltip sonra ayn yere
  tekrar yazmaktr.

  Yeni kayt yapamak zere Doum Tarihi bilgisi ilk kez girilirken tarihsel
  bilgi olmayp karakterseldi. Bu nedenle tarih bilgisi dosyaya yazlrken
  CTOD() hazr fonksiyonu ile tarihsel bilgiye evrilip dosyaya kayt
  edilmiti. Ancak kayt dzeltme ilemi sonras veri taban dosyasna
  dzeltilmi kayd tekrar yazarken byle evirme ilemine gerek yok.
  nk bilgi okunurken tarihsel bilgi olarak okundu.

 imdi burada kk ama nemli bir konuya ksaca deineceim. dBASE
  ve dier xBASE uyumlu program gelitirme aralarnda BASIC, COBOL, C ve
  PASCAL'dan farkl olarak dosyadan (Veri Taban) bilgi okuma deyimi yok.
  Yukarda adlarn saydm dillerde programc veri taban dosyasndan bilgi
  okumak iin nce deiik teknikler kullanarak kayd bulur, sonra kaydn
  ieriini daha nce tanmlanan deikenlere aktarr. Ardndan okuduu bu
  bilgiyi deiik amalar iin yazcya, ekrana yazar veya bir hesaplama,
  karlatrma ileminde kullanr.

  dBASE'da durum biraz farkl. Bu farkllklar kullancnn lehine olan
  kolaylklardan ileri geliyor. Dier dillerde olduu gibi bilgi okunmak
  istenen dosya alyor. Sanlann tersine dosyadan okuma yapmak, yazmak veya
  okuma-yazma modlar yok dBASE'de. Alan bir dosya zerinde normal artlarda
  her trl ilem yaplabilinir.

 dBASE'da Veri taban dosyas alr almaz veri taban dosyasnda bulunan
  btn alanlar ile ayn zellik ve ayn adl deikenler otomatik olarak
  tanmlanr. Kullancnn dosyadan kayt okumas iin kayd bulmas veya
  kayt okuma kafasn sz konusu kayda konumlandrmas yeterlidir. Veri
  taban dosyasnn hangi kaydnn zerinde bulunuluyorsa o kayda ait bilgiler
  daha nce dosya alr almaz otomatik olarak tanmlanan deikenlere
  aktarlyor. Kayt deitirme ilemini de yapan program parasn
  incelemeniz halinde kayt okuma veya dier programlama dillerindeki gibi
  ilevi olan bir READ-WRITE tr bir deyime rastlayamazsnz.

 Veri taban dosyas USE deyimi ile alr almaz kayt okuma kafas
  hemen dosyann en banda bulunan kayda yerleiyor ve bu kayt ile ilgili
  bilgiler otomatik olarak tanmlanan deikenlere aktarlyor. Kayt
  okuma kafas hareket ettike veya aktif kayt deitike bu otomatik
  olarak tanmlanan deikenlerin ierikleri de deiir. Veri taban dosyas
  kapatlr kapatlmaz otomatik olarak tanmlanan deikenler hemen iptal
  edilir, bellekten silinir.





                        KAYIT LSTES ALMA RNE
                        

  imdi yukarda verilen rnek programla bilgi kayt edilen veri taban
  dosyasndaki kaytlar ekrana listeleyecek program parasn vereceim.

Ŀ
 DBO-05.DBF 
Ĵ
 SET SCOREBOARD OFF                                                      
 SET LDCHECK OFF                                                         
 SET TALK OFF                                                            
 USE ADRES INDEX SOYADX                                                  
 SAYI=0                                                                  
 CLEAR                                                                   
 @0,0 TO 24,79                                                           
 @2,1 SAY "AD"                                                           
 @2,12 SAY "SOYAD"                                                       
 @2,27 SAY "ADRES 1"                                                     
 @2,53 SAY "ADRES 2 "                                                    
 @3,0 TO 24,79                                                           
 SATIR=4                                                                 
 DO WHILE .NOT. EOF()                                                    
         @SATIR,1 SAY AD PICTURE "@10!"                                  
         @SATIR,12 SAY SOYAD PICTURE "@15!"                              
         @SATIR,28 SAY ADRES1 PICTURE "@25!"                             
         @SATIR,54 SAY ADRES2 PICTURE "@25!"                             
         SATIR = SATIR + 1                                               
         SAYI=SAYI + 1                                                   
         IF SATIR=24                                                     
                 @24,47 SAY "LSTELENEN KAYIT SAYISI:"                   
                 @24,70 SAY SAYI PICTURE "9999"                          
                 @24,1 SAY "BR TUA BASIN [ESC-VAZGE]"                 
                 BEKLE=INKEY(0)                                          
                 IF LASTKEY() = 27                                       
                         RETURN                                          
                 ELSE                                                    
                         @4,1 CLEAR TO 23,78                             
                         SATIR=4                                         
                 ENDIF                                                   
         ENDIF                                                           
         SKIP                                                            
         IF EOF()                                                        
                 @24,48 SAY "LSTELENEN KAYIT SAYISI.:"                  
                 @24,73 SAY SAYI PICTURE "999"                           
                 @24,1 SAY "DOSYA SONU - BR TUA BASIN"                 
                 BEKLE=INKEY(0)                                          
         ENDIF                                                           
 ENDDO                                                                   
 RETURN                                                                  


  Programn banda listelenecek bilgileri ieren ADRES adl veri taban
  dosyasn ayoruz. Bu dosyaya adres bilgilerini kayt etmek iin daha
  nce verdiim program paralarndan yararlanmtk. Adres bilgilerinin
  kayt srasna gre deil alfabetik srada ekrana gelmesi iin daha nce
  oluturulan SOYADX adl index dosyasn da atk. Eer dosya ile
  birlikte index dosyasn amam olsaydk kaytlar ekrana ilk kayt
  edildikleri srada gelirlerdi.

  Veri taban dosyasn index dosyas ile birlikte atmz iin dosya alr
  almaz, kayt okuma gstergesi index dosyasnn iaret ettii alfabetik
  sraya gre ilk kayda konumlanr. Veri taban dosyasn index dosyas ile
  birlikte amam olsaydk kayt okuma gstergesi dosyann bana yani
  dosyaya ilk yazlan kayda konumlanrd. Index dosyas ile alan dosyalarda
  ilk olarak konumlanacak kayt fiziksel sraya gre ilk kayt olmayabilir.

 Bu program parasnda veri taban dosyasnda bulunan btn kaytlar
  listelediimiz iin herhangi bir kayt arama ve kaytlar snflandrma
  teknii kullanmadk. Ekrann genilii 80 stunla snrl olduu iin
  listeye TELEFON ve DTARIH bilgisini dahil etmedim. Listeyi ekran
  yerine yazcya almanz halinde yazlar sktrp veya geni kat
  kullanp listeye daha fazla bilgi dahil etmek mmkn olur. Konunun
  devamnda adres listesini ekran yerine yazcya alacak program rneini
  vereceim.

 Programn banda ekran CLEAR deyimi ile temizlendi, listelenen kaytlarn
  saysn tutmada kullanlmak zere SAYI deikeni "0" ilk deeri verilerek
  tanmland. Ardndan tm ekran tek izgili olarak kaplayacak ereve "@0,0
  TO 24,79" program satr izildi. Liste bal iin ekrann 2. satrna "AD
  ve SOYAD", "ADRES 1", "ADRES 2" bilgileri yazld.

 Bu program parasnda dikkat edilirse ekrann bilgi yazlacak satr
  dorudan yazma yerine bir deiken araclyla belirleniyor. Bu
  deikenin ad SATIR. SATIR deikeni tanmlanrken ilk deer olarak 4
  deeri verildi. Yani adres bilgileri ekrann 4. satrndan itibaren
  listelenecek.

 Programda daha nce de kullandmz bir DO WHILE-ENDDO dngs var.
  Dngden kmann art dosya sonuna gelinip gelinmediini kontrol etmede
  kullanlan EOF() fonksiyonunun mantksal doru deerini vermesidir. Yani
  dng, dosya sonuna gelininceye dein devam edecektir. Tabii ki dngden
  kma art salanmadan da kmak mmkn. Dngnn her turunda ayn kayd
  ekrana getirmemek veya sonsuza kadar dngde kalmamak iin kayt okuma
  kafasnn dngnn her turunda bir sonraki kayda haraket etmesi gerekir.
  Kayt okuma kafasn haraket ettiren dBASE deyimi ise SKIP.

 SKIP deyimi tek bana kullanlrsa kayt okuma kafas bir sonraki kayda
  konumlanr. Ancak bir sonraki kayda deilde iki kayt birden atlanlmak
  isteniyorsa bu kez SKIP 2 eklinde kullanlmaldr. Dosyann daha nceki
  kaytlarna konumlanmak iin SKIP deyiminin yanna negatif deerli bir
  saysal bilgi yazlmaldr. SKIP -3 eklindeki yazl, kayt okuma
  kafasnn  kayt geriye gitmesini salar.

 Ekrana yazlan-listelenen her kayttan sonra SATIR deikeninin deeri
  bir arttrlyor. Arttrmadan hemen sonra SATIR deikeninin ierii
  kontrol ediliyor. SATIR deikeninin deeri 24 olduunda ekrann tm
  dolmu olacak. Bu durumda programn iletimi INKEY(0) fonksiyonu
  tarafnda bir tua baslncaya kadar durdurulacaktr. Bir tua baslmas
  halinde ekrann 4. satrndan 24. satrna kadar ki ksm silinip satr
  deikeninin deeri tekrar 4'e eitleniyor. Bu ilem dosya sonuna
  gelinceye kadar devam edecektir.

 INKEY(0) fonksiyonu ile programn iletimi durdurulduunda ESC tuuna
  baslmas halinde listeleme ilemi sona erecektir. Bu amala yani
  en son baslan tuu renmek iin kullanlan hazr dBASE fonksiyonunun ad
  LASTKEY().

 LASTKEY() fonksiyonu  en son baslan tuun INKEY() kodunu geri dndrr.
  Programda "IF LASTKEY()=27" eklindeki kullanmda en son baslan tuun ESC
  olup olmad aratrlyor. imdi size en ok kullanlan bir ka tuun
  inkey kodlarn vereceim.

      Ŀ
        Inkey Kodu  Tu          Inkey Kodu    Tu  
      Ĵ
            1       Home            -1         F2   
            3       PgDn            -2         F3   
           18       PgUp            -3         F4   
            7       Del             -4         F5   
            9       Tab             -5         F6   
           22       Ins             -6         F7   
           27       Esc             -7         F8   
            6       End             -8         F9   
            8       BackSpace       -9         F10  
           13       Enter                           
           19       Sola Ok                         
            4       Saa Ok                         
            5       Yukar Ok                       
           24       Aa Ok                        
      







 