  Ŀ
  Ŀ
                                                                          
                         dBASE Yaz Dizisi 8                              
                                                                          
  ٳ
                                                    Memik Yank             
  



                   VER TABANI DOSYASINDAN KAYIT SLMEK
                   

> Veri taban dosyasnda bizim seip kaydettiimiz alanlardan baka tek
  karakterlik baka bir alan otomatik olarak dBASE tarafndan dosyaya eklenir.
  Bu alandan veri taban dosyasndan kayt silinirken yararlanlr. Yani
  oluturulan veri taban dosyasnda bulunan alanlarn hepsinin kayt uzunluu
  50 karakterse, gerekte veri taban dosyasnda her kayt 51. karakterlik yer
  kaplar. Dier programlama dillerinde bu ilem programclar tarafndan
  yaplr. Bir oturumda birden fazla kayt silinecekse her seferinde kayd
  dosyadan silmek, karmak zaman kayplarna neden olur. Bu amala
  programclar silmek istedikleri kaytlar nce tek tek iaretler ve sonradan
  toplu olarak dosyadan karrlar.

  dBASE ve dier veri taban dillerinde veri taban dosyasndan bir kayd
  silmek iin nce kaydn otomatik olarak dosyaya eklenen alanna silme
  iareti konulur. Bir kaydn bu tek karakterlik alanna silme iareti
  koymak veya kayd silinmek zere iaretlemek iin DELETE deyimini kullanmak
  yeterli.

 Bunun iin nce silinmek zere iaretlenecek kayt bulunur. Yani silinmek
  istenen kayt aktif kayt yaplr. Bundan sonra DELETE deyimini kullanmak
  yeterli olacaktr. Daha nce DELETE deyimi ile silinmek zere iaretlenen
  herhangi bir kaydn zerinde iken tekrar DELETE deyimi kullanlacak olunursa
  kaytlardaki silme iareti kaldrlr. Bu nedenle bir kayd silmek zere
  iaretlemeden nce o kaydn daha nce silinmek zere iaretlenip
  iaretlenmediini kontrol etmek gerekir. Bir kaytta silme iaretinin
  varl DELETED() fonksiyonu ile kontrol edilir.

 Silinmek zere iaretlenen kaytlar veri taban dosyasndan tamamyla
  silmek, karmak iin PACK deyiminden yararlanlr. Silinmek zere
  iaretlenen kaytlar ilem d yapmak iin programa SET DELETE ON deyimini
  eklemek gerekir. Bu deyimden sonra silinmek zere iaretlenen kaytlar kayt
  silme ile ilgili deyimler hari hi bir ekilde ileme tabi tutulmaz. Buna
  gre SET DELETED deyimi "ON" durumunda iken DELETED() fonksiyonu
  ilevsizleir.

 imdi ADRES adl veri taban dosyasndan kayt silmek iin
  kullanabileceiniz bir program paras vereceim.

Ŀ
 DBO-06.DBF 
Ĵ
 SET SCOREBOARD OFF                                                       
 SET TALK OFF                                                             
 SET LDCHECK OFF                                                          
 SET EXCLUSIVE ON                                                         
 USE ADRES INDEX SOYADX                                                   
 DEVAM="E"                                                                
 CEVAP="H"                                                                
 SET DELETED ON                                                           
 DO WHILE DEVAM=UPPER("E")                                                
         CLEAR                                                            
         SOYAD1=SPACE(15)                                                 
         @0,5 TO 3,70 DOUBLE                                              
         @1,25 SAY "KAYIT SLME"                                          
         @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()                                                   
                 @6,6 SAY "AD SOYAD....:" GET AD PICTURE "@10!"           
                 @8,6 SAY "SOYAD.......:" GET SOYAD PICTURE "@15!"        
                 @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"      
                 CLEAR GETS                                               
                 @24,10 SAY "BU KAYIT DOSYADAN SLNSN M (E/H)";        
                         GET CEVAP PICTURE "@!1"                          
                 READ                                                     
                 IF CEVAP=UPPER("E")                                      
                          IF .NOT. DELETED()                              
                                 DELETE                                   
                         ENDIF                                            
                 ENDIF                                                    
       ELSE                                                               
               @24,1 SAY SPACE(70)                                        
            @24,10 SAY "BU KAYIT YOK DEVAM EDECEK MSNZ(E/H)";          
                       GET DEVAM PICTURE "@1!"                            
               READ                                                       
               IF DEVAM=UPPER("E")                                        
                       LOOP                                               
               ELSE                                                       
                       EXIT                                               
                 ENDIF                                                    
         ENDIF                                                            
 @24,1 SAY SPACE(70)                                                      
 @24,10 SAY "SLNECEK BASKA KAYIT VAR MI" ;                              
                 GET DEVAM PICTURE "@1!"                                  
 READ                                                                     
 ENDDO                                                                    
 @24,10 SAY " ARETL KAYITLAR DOSYADAN IKARILSIN MI";                  
                 GET CEVAP PICTURE "@1!"                                  
 READ                                                                     
 IF CEVAP=UPPER("E")                                                      
         PACK                                                             
 ENDIF                                                                    
 RETURN                                                                   



  Silinmek zere iaretlenen kaytlardaki silme iaretleri istenirse dosyadan
  karlabilir. Bu amala kullanlan dBASE deyimi RECALL.  nce
  DELETE deyimi iaretlenip ardndan PACK deyimi ile dosyadan
  karlan kaytlar RECALL deyimi ile kurtarma sans yoktur.



  YAZICIDAN LSTE ALMA
  
  DOS iletim sistemine gre ekran default k aygtdr. Yani aksi
  belirtilmedii srece btn k deyimleri bilgileri ekrana yazarlar.
  imdiye kadar kullandmz deyimler iin bilgilerin veya mesajlarn
  ekrana yazlmas konusunda ek bir komut vermedik. DOS altnda
  program gelitirme aralarnn byk bir ounluu bu kabullere uyar.

  dBASE'de en ok kullanlan k deyimi olan SAY iin default k
  aygt olan ekran yazc olarak deitirmek iin "SET DEVICE TO
  PRINTER" deyimini kullanmak yeterli. Bu deyimden sonra SAY deyimi
  ile k yaplan btn bilgiler ekran yerine YAZICIYA yazlr.

 SAY deyimi iin default k aygtn tekrar ekran olarak deitirmek
  iin bu kez "SET DEVICE TO SCREEN" deyimini programa eklemek
  gerekir. Bilgilerin yazlaca yazc tahmin edilecei zere paralel porta
  bal birinci yazcdr.

 SAY deyimi ile ekrana veya yazcya yaplan klara formatl k
  denilmektedir. Formatl olmayan klar da ekran yerine yazcya
  ynlendirmek iin bu kez SET PRINT ON deyimini kullanmak gerekir.
  Yine ayn ekilde yazcya yazdrlmak istenen bilgilerin bitmesi halinde
  tekrar ekran default k aygt yapmak veya yazcy pasif hale
  getirmek iin SET PRINT OFF deyimini kullanmak gerekir.


Ŀ
 DBO-07.DBF 
Ĵ
 SET SCOREBOARD OFF                                                       
 SET LDCHECK OFF                                                          
 SET TALK OFF                                                             
 USE ADRES INDEX SOYADX                                                   
 SAYI=0                                                                   
 CLEAR                                                                    
 @2,20 SAY "YAZICINIZI HAZIRLAYIP BR TUA BASIN"                         
 BEKLE=INKEY(0)                                                           
 SET DEVICE TO PRINTER                                                    
 @2,1 SAY "AD"                                                            
 @2,12 SAY "SOYAD"                                                        
 @2,28 SAY "ADRES 1"                                                      
 @2,54 SAY "ADRES 2 "                                                     
 @3,0 SAY"---------------------------------------------------------------"
 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                                                    
         SKIP                                                             
 ENDDO                                                                    
 EJECT                                                                    
 SET DEVICE TO SCREEN                                                     
 @24,47 SAY "LSTELENEN KAYIT SAYISI:"                                    
 @24,70 SAY SAYI PICTURE "9999"                                           
 @24,1 SAY "BR TUA BASIN"                                                
 BEKLE=INKEY(0)                                                           
 RETURN                                                                   


  Bu programda SET DEVICE TO PRINTER ve EJECT deyimi dnda bir
  yenilik yok. Yine daha nceki program paralarnda adres bilgilerinin
  kayt edildii ADRES adl veri taban dosyasnn SOYAD alann index
  anahtar olarak kullanan SOYADX index dosyas ile birlikte alyor.
  Dosyann sonuna gelinene dein tm kaytlar satrlar halinde yazcya
  aktarlacak.

  Bunun iin nce SET DEVICE TO PRINTER deyimini kullanmadan
  ekrana kullancnn yazcy hazrlamas iin mesaj yazdrdk. Yine
  INKEY() fonksiyonu ile bir tua baslncaya dein programn bekleme
  durumuna gemesini saladk.

 REPLICATE() hazr dBASE fonksiyonu dardan srekli olarak iki adet
  parametre alr. Birincisi bir ASCII karakteri, ikincisi ise en fazla 255
  olabilecek saysal bir deer. Replicate() fonksiyonu geriye birinci
  parametre olarak ald karakterden ikinci parametre kadarn dndrr.
  Bizim rnekte REPLICATE() fonksiyonu 80 adet "-" karakterini geriye
  dndrmektedir. Biz bu geriye dndrlen deeri SAY deyimi ile
  yazcya yazdrarak balk ile adres bilgilerinin birbirine karmasn
  nledik.

 Programn banda kullancnn yazcsn hazrlamas konusunda
  uyardk. Ancak buna ramen kullanc yazcsn hazrlamadan program
  yazcya yazmas konusunda zorlarsa, programn almas krlacaktr.
  Profesyonel programclar kullancnn iyi niyetine gvenme yerine
  programn almas srasnda olabilecek btn durumlar ve sorunlar iin
  nlemler alrlar. dBASE, programclarn programn iinden yazcnn
  hazr olup olmadn renmelerine imkan tanmaktadr. Yazcs ak
  kullancnn bo yere uyarlp zaman kaybedilmesi olay bylece
  nlenmi olmaktadr.

 dBASE'de yazcnn durumu hakknda kullancya bilgi veren veya
  programcnn nlem almasna yardm eden fonksiyonun ad
  PRINTSTATUS(). PRINTSTATUS() fonksiyonu dardan herhangi bir
  parametre almaz. Geriye yazcnn hazr olup olmad konusunda
  mantksal bir deer dndrr. Yazc hazr yani ON-LINE durumunda ise
  geriye mantksal doru yani .T. deerini, yazc hazr deilse bu kez
  geriye mantksal yanl yani .F. deerini dndrr.

 imdi yukardaki kk program paras dahilinde yazcnn hazr olup
  olmadn reneceiz. Yazc hazr deilse kullancy srekli olarak
  uyaracaz.

Ŀ
 DBO-08.DBF 
Ĵ
 SET SCOREBOARD OFF                                                       
 SET LDCHECK OFF                                                          
 SET TALK OFF                                                             
 USE ADRES INDEX SOYADX                                                   
 SAYI=0                                                                   
 CLEAR                                                                    
 DO WHILE .T.                                                             
         IF .NOT. PRINTSTATUS()                                           
                 @2,20 SAY "YAZICINIZI HAZIRLAYIP BIR TUSA BASIN"         
                 BEKLE=INKEY(0)                                           
                 IF LASTKEY()=27                                          
                         RETURN                                           
                 ENDIF                                                    
         ELSE                                                             
                 EXIT                                                     
         ENDIF                                                            
 ENDDO                                                                    
 SET DEVICE TO PRINTER                                                    
 @2,1 SAY "AD"                                                            
 @2,12 SAY "SOYAD"                                                        
 @2,28 SAY "ADRES 1"                                                      
 @2,54 SAY "ADRES 2 "                                                     
 @3,0 SAY"---------------------------------------------------------------"
 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                                                    
         SKIP                                                             
  ENDDO                                                                   
  EJECT                                                                   
  SET DEVICE TO SCREEN                                                    
  @24,47 SAY "LISTELENEN KAYIT SAYISI:"                                   
  @24,70 SAY SAYI PICTURE "9999"                                          
  @24,1 SAY "BIR TUSA BASIN"                                              
  BEKLE=INKEY(0)                                                          
 RETURN                                                                   


  Yazcnn hazr olup olmad konusunda kullancya haraket serbestisi
  vermek iin DO WHILE-ENDDO dngsn kullandm. Profesyonel
  programclar da buna benzer teknikler kullanrlar. Yazcnn hazr olmas
  veya PRINTSTATUS() fonksiyonunun geriye mantksal doru deerini
  dndrmesi halinde EXIT deyimi ile dngden klr. Yazcnn hazr
  olmas halinde kullancya hi bir mesaj verilmeden dngden klyor.
  Yazcnn hazr olmamas veya PRINTSTATUS() fonksiyonunun geriye
  mantksal yanl deerini vermesi halinde kullancya srekli olarak
  mesaj verilir. Mesajla birlikte kullancya vazgeme ans vermek iin
  INKEY() fonksiyonu kullanld. Bekleme annda ESC tuuna baslmas
  halinde RETURN deyimi ile programdan klyor. Bu arada programdan
  kmadan en son olarak default k aygt SET DEVICE TO SCREEN
  ile tekrar ekran olarak seildi.

> Yazclar ilk aldklarnda normal modda olurlar. Yazcnn yaz
  modlarn yazcnn zerinde bulunan kontrol tular ile deitirmek
  mmkn. Ancak program dahilinde bazen ayn satrda yaz modonu
  deitirmek gerekebilir. Listenin balnda byk yaz modonu, baz
  cmlelerin koyu yazlmas ihtiyac olabilir.Bu nedenle programcnn
  yazcnn zerinde program dahilinde hakimiyet kurmas kanlmazdr.
  dBASE yazcnn kontrolnde kullanlmak zere ok sayda fonksiyon ve
  deyime sahiptir. Ancak programcnn kullanaca yazcnn el kitabn
  ayrca incelemesi gerekir.





 