  Ŀ
  Ŀ
                                                                          
                      FoxPro for Windows Yaz Dizisi 6                    
                                                                          
  ٳ
                                                    Memik Yank             
  




                             INDEX KULLANIMI
                            



 Btn program gelitirme aralarnda olduu gibi FoxPro'da da index
  kavram ve index dosyas kullanm ok nemlidir. Veri taban program
  gelitirme aralarnn bu kadar yaygn kullanlyor olmasnda en nemli
  etkenlerden biri indexleme konusunda programcya sunulan kolaylklardr.

  Veri taban programlar ve veri taban program gelitirme aralarnda
  kullanlan DBF veri taban dosyalarnda bulunan btn kaytlar diskte
  eit miktarda yer kaplarlar. Dolaysyla birbirinin arkasnda kayt
  edilme srasna gre yer alan kaytlarn diskin/dosyann neresinde
  olduklarn bilmemiz halinde sz konusu kayd bulmak olduka
  kolaylaacaktr. Veri taban program gelitirme aralar, veri taban
  dosyalarndan ayr ve istee bal olarak kaytlarn dosyadaki yerini
  tutan dosyalar kullanrlar. Bu dosyalara index dosyalar ad verilir.
  Her kaydn farkl uzunlukta olabildii Memo ve General alanlar ieren
  FPT uzantl dosyalar indexlemede kullanlamaz.

 FoxPro index dosyalarnn uzantsn IDX veya CDX olarak seer. FoxPro hem
  tekli IDX hem de oklu CDX index dosyalarn desteklemektedir. Ancak FoxPro,
  dBASE tarafndan oluturulan NDX ve MDX uzantl index dosyalarn da
  desteklemektedir. FoxPro'daki IDX uzantl index dosyalar ile CDX uzantl
  index dosyalarnn oluturulmas ve kullanmnda farkllklar olduundan
  ayr konu balklar altnda anlatlacaktr.

  FoxPro'da IDX uzantl tekli index dosyalar iin kullanlacak index
  anahtar en fazla 100 karakter uzunluunda olabilir. CDX uzantllarda
  ise bu deer 240 karakter olabilmektedir. Ayn anda DOS'un izin verdii
  kadar index dosyas ak tutulup kullanlabilir. Ayn anda alabilecek
  dosya says CONFIG.SYS dosyasndaki FILES satrna baldr. Bu bakmdan
  ok sayda veri taban ve index dosyasn ayn anda ama olasl
  karsnda CONFIG.SYS dosyasndaki FILES satrna yazlan deerin
  arttrlmas gerekir.

  Burada nemli bir nokta u: Gerekte birden fazla index dosyasn ieren
  CDX uzantl index dosyalar her artta yalnzca 1 file handle-
  tuta igal ederler. FoxPro For Windows bir Windows program olsa
  bile sonuta Windows DOS ortamnda alan bir program olduu iin
  snrlarn bir ksm DOS tarafndan belirleniyor.



  IDX UZANTILI INDEX DOSYALARI
  
  FoxPro ile CREATE deyimi yardmyla veri taban dosyas oluturulmas
  srasnda oluturulan index dosyalarna CDX uzants verilmektedir.
  Bu bakmdan IDX uzantl index dosyalar kullanlacaksa CREATE deyimi ile
  dosya oluturulurken alanlarn index dosyas anahtar olarak kullanlp
  kullanlmayacann belirlendii TAG adl stuna iaret koymamak gerekir.

 Bir index dosyasn amak veya oluturmak iin ilk karar verilmesi
  gereken konu, index anahtar olarak kullanlacak alann seilmesidir.
  Bir veri taban dosyas iin birden fazla alan iin index dosyas
  oluturmak ve birden fazla alan bir tek index dosyas iinde kullanma
  mmkn. INDEX dosyasn olutururken kullanlan alanlar veri taban
  dosyasnda yoksa programn almas krlr.

  IDX uzantl index dosyas oluturmak iin ncelikle kendisi iin index
  dosyas oluturulacak veri taban dosyasnn almas ve aktif dosya
  yaplmas gerekir. Aadaki index dosyas oluturma satrlarnda nce ADRES
  adl veri taban dosyas USE deyimi ile ald. Ardndan INDEX ON deyimi ile
  SOYAD alannn index anahtar olarak kullanld SOYADX adl IDX uzantl
  index  dosyas oluturuldu.

         USE ADRES
         INDEX ON SOYAD TO SOYADX

  Bu ekilde oluturulan index dosyas iin bir adet anahtar-alan
  kullanld. stenirse birden fazla alan birletirilip bir tek INDEX
  dosyas iin kullanlabilinir.

         USE ADRES
         INDEX ON (AD+SOYAD) TO ADSOYX

  Bu durumda SOYAD ve AD alanlar birletirilip ADSOYX adl IDX uzantl index
  dosyasna anahtar olarak kullanlr. Farkl alanlar tek bir index dosyas
  iin birletirilirken karaktersel olmayanlarn karaktersel tipe evrilmesi
  gerekiyor. Bu amala DTOS(), VAL() ve STR() gibi fonksiyonlar
  kullanlabilir.

  Bunun gibi birden fazla alandan meydana gelen INDEX dosyalar aracl ile
  kayt aramas yaplrken nce dardan birletirilen anahtar deerleri ayr
  ayr girilir. Bu iki ayr anahtar bilgisindeki boluklar TRIM()
  fonksiyonlar ile karldktan sonra birletirilip SEEK veya FOUND ile
  arama yaplr. Bylece iki ayr anahtara gre arama yaplm gibi olur.

  USE deyimi ile veri taban dosyasn aarken ek olarak INDEX dosyas 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 programlarda verilenden ok farkl
  olacaktr.

  Diskte olmayan bir veri taban dosyasnn veya index dosyasnn USE deyimi
  ile almaya allmas halinde programn almas krlacaktr. Bu
  nedenle profesyonel programclar bir veri taban veya index dosyasn
  amadan nce sz konusu dosyalarn diskte varln kontrol ederler. Bu
  ilem daha ok program ilk altrld zaman program dahilinde
  kullanlacak, alacak btn dosyalar iin bir kez yaplr.

 INDEX dosyalarn amann iki yolu vardr. Birincisi USE deyimi ile
  birlikte amaktr.

        USE TEST INDEX ADSOYX

  Bu program satr ile TEST adl veri taban dosyas ile IDX uzantl
  ADSOYX adl index dosyas birlikte alr. Bu ekilde USE deyimi ile
  alan dosyadan yaplacak btn kayt aramalar ve listelemeler index
  dosyasnn yardmyla olur.

  USE deyimi ile ayn anda birden fazla index dosyasn amak mmkn.
  lk srada yazlan index dosyas aktif index olur. Dierleri SET ORDER
  deyimi ile aktif index dosyas olarak seilmedikleri srece kayt arama
  ileminde kullanlmazlar. Aktif index dosyas dndaki index dosyalarn da
  amann nedeni veri taban dosyasnda yaplan deiikliklerin btn index
  dosyalara yansmasn salamaktr.
  Buna gre veri taban dosyas kaytlarnda deiiklik yaplmak zere
  alyorsa, kullanlma ihtimali olan btn index dosyalarnn ayn
  zamanda almas gerekiyor. USE deyimi ile birden fazla index
  dosyas alacaksa index dosyalarnn aralarna virgl iareti konulur.

  Index dosyasn amada kullanlan ikinci yntem SET INDEX deyimini
  kullanmaktr. SET INDEX deyimi ile istenilen index dosyas ilgili olduklar
  veri taban dosyasna balanabilinir. Bu amala SET INDEX ile alacak index
  dosyasnn ait olduu veri taban dosyas nceden alm olmaldr.

         SET INDEX TO ADSOYX

  Normalde index dosyalar ile kaytlar kkten bye doru sralanr.
  Eer sralamann bykten ke doru yani azalan srada olmas
  isteniyorsa, INDEX ON deyimi ile birlikte DESCENDING kullanlmaldr.

         USE ADRES
         INDEX ON SOYAD TO SOYADX DESCENDING

  Bu index dosyas oluturma satrnda kaytlar bykten ke sralanr.
  Normal artlarda index dosyas oluturulurken ak olan veri taban
  dosyasndaki btn kaytlar hakknda bilgi bulunur. Eer yalnzca belli bir
  kayt grubu zerinde ilem yaplmak isteniyorsa deiik tekniklerden
  yararlanlr.

  Bunlardan biri sz konusu kayt grubuna gre index dosyas oluturup
  kullanmaktr. rnek olarak yalnzca "sehir" alannda stanbul bilgisi
  olan kaytlarla ilgileniyorsa, nce sehir alannn anahtar olarak
  kullanld bir index dosyas oluturulup bu index dosyas aktif index
  yaplr. Ardndan stanbul bilgisini ieren ilk kayt SEEK deyimi
  bulunur. Sehir alannda stanbul bilgisini ieren kaytlar index
  dosyasnda arka arkaya yer ald iin ok hzl olarak Skip deyiminden
  yararlanarak Sehir alannda stanbul bilgisi olan en son kayda gelinceye
  kadar kaytlara eriim salanr ve istenen ilem yaplr. Hz bakmndan bu
  teknik kabul edilebilir snrlar iindedir.

 Dier yntem kesinlikle kullanlmas nerilmeyen teknik ise SET FILTER
  deyiminden yararlanmaktr. Ancak SET FILTER deyimi iki ynden sakncaldr.
  Birincisi ilemin ok yava yaplmasdr. Eer dosyanzda ok sayda kayt
  varsa SET FILTER deyimi ile yaplan filtre-seme ilemi ok yava olur.
  kinci saknca ise SET FILTER deyiminin dosyadaki ilk kayd filtre harici
  tutmasdr.

  nc teknik ise index dosyasn olutururken filtreler oluturup baz
  kaytlarn index dosyasnda yer almasn engellemektir. Eer sz
  konusu kayt grubuna srekli gerek duyuluyorsa bu kayt grubu iin
  ayr index dosyas oluturmak daha pratiktir. Yalnzca istenen
  kaytlarn index dosyasna dahil edilip dierlerinin elenmesi iin
  kullanlabilecek yardmc deyim FOR.

  FOR deyimi INDEX ON deyiminin yardmc bir deyimidir. Yukarda verilen
  koula gre yani yalnzca Sehir alannda stanbul bilgisi olan kaytlarn
  yer ald bir index dosyas oluturmak iin;

         INDEX ON Sehir TO SehirIst FOR Sehir="stanbul"

  Bu program satr ile oluturulan SEHIRIST.IDX adl index dosyasnda
  yalnzca Sehir alannda stanbul bilgisi olan kaytlar bulunur. FOR deyimi
  ile oluturulacak index dosyasnda yer alacak kaytlar belirlenirken
  istenirse .OR. ve .AND. mantksal operatrlerinden yararlanlabilir.

         INDEX ON Sehir TO SehirIst FOR Sehir="stanbul" .OR.
                                        Sehir="Adana"

  Bu program satr ile oluturulan index dosyasnda ise Sehir alannda
  stanbul veya Adana bilgisi olan kaytlar yer alr.

 Bunun dnda kullanlan index anahtarna bal olarak veri taban
  dosyasnda ayn anahtar deerine sahip birden fazla kayt olabilir.
  rnek olarak ADRES adl veri taban programnda Sehir alannda
  stanbul bilgisinin olduu ok sayda kayt olabilir. Bu durumda Sehir
  alannn anahtar olarak kullanld index dosyasna gre SEEK
  deyimi ile arama yaplrken srekli olarak Sehir alannda stanbul
  bilgisi olan ilk kayda konumlanlr. Dier kaytlara erimek iin bu
  durumda baka tekniklere gerek duyulur. Bu durumda ilk bavurulan
  teknik Sehir alan ile birlikte baka alanlar da index dosyasna dahil
  etmektir.

  Eer ayn anahtar deerine sahip olan kaytlardan yalnzca biri index
  dosyasnda yer alsn isteniyorsa bu kez INDEX ON deyimi ile birlikte
  UNIQUE deyimi kullanlr.

  Normal artlarda INDEX ON deyiminin her kullanlnda index dosyas yeniden
  oluturulur. ok miktarda kayt ieren dosyalarda bu ilem anahtar olarak
  kullanlan alan saysna bal olarak zaman alr. Eer index dosyasnn
  yeniden oluturulmayp gncellemesi isteniyorsa bu ADDITIVE deyimi INDEX ON
  deyimine eklenir.



  CDX UZANTILI INDEX DOSYALARI
  
  CREATE deyimi ile veri taban dosyas oluturulurken bir veya birden
  fazla alanda indexleme yaplaca belirtilmise, veri taban dosyas ile
  ayn ada sahip CDX uzantl index dosyas otomatik olarak oluturulur.
  Bu ekilde oluturulan CDX uzantl oklu index dosyas istenen sayda
  anahtara sahip olabilir. Baka bir deyile ok sayda index dosyasn bir
  tek CDX dosyasna dahil etmek mmkn.

  CDX uzantl index dosyalar yalnzca CREATE deyimi ile dosya oluturulurken
  yaratlmaz. Ancak dosya oluturulurken yaratlan index dosyasnn ad veri
  taban dosyas ile ayn olmaktadr. Ayrca istenirse MODIFY STRUCTURE deyimi
  ile daha nce dosya ad ile ayn ada sahip CDX uzantl dosya
  oluturulmamsa tekrar oluturulabilir.

  Ad veri taban dosyas ile ayn olan yani dosya oluturma veya dosyann
  yaps deitirilirken retilen CDX uzantl dosyalarn en nemli zellii,
  USE deyimi ile dosya aldnda index dosyasnn otomatik olarak alp
  aktif olmasdr.

  Ak olan ve dosya ile ayn ada sahip olan CDX uzantl index dosyasndan
  yararlanmak iin ayrca SET ORDER deyimi ile hangi anahtara gre yaplan
  indexlemenin aktif olaca seilmelidir. Kullanc veya programc istedii
  anahtar aktif anahtar olarak seebilir. Eer dosya adndan farkl ada sahip
  oklu index dosyas daha nceden oluturulmu ve kullanlmak isteniyorsa
  bunu dosya ama srasnda veya daha sonra belirtmek gerekir.

  CDX uzantl oklu index dosyas amak iin yaplan ilem IDX uzantl index
  dosyas iin yaplandan pek farkl deildir. Aradaki tek fark IDX uzantl
  index dosyalar oluturulurken "TO" balac kullanlrken CDX uzantl
  olanlarda "TAG" balacnn kullanlmasdr.

          USE ADRES
          INDEX ON Soyad TAG Soyad

  Bu CDX uzantl index dosyas oluturulan program satrnda CDX uzantl
  index dosyasnn ad belirtilmemi. Bu durumda CDX uzantl dosyann yapsal
  index dosyas yani dosyann yaps belirlenirken oluturulan index dosyas
  olduu varsaylr. Dosya adyla ayn ada sahip CDX uzantl yapsal index
  dosyas yok iken yukardaki program satr kullanlrsa hata meydana gelir.
  Eer dosya ad ile ayn ada sahip CDX uzantl index dosyas daha nceden
  oluturulmusa yukardaki program satr ile ADRES adl CDX adl index
  dosyasna SOYAD alan TAG olarak eklenir.

  stenirse komut satrnda veya FoxPro programlar dahilinde MODIFY STRUCTURE
  deyimi ile dosya ad ile ayn ada sahip CDX uzantl dosyaya yeni TAG'lar
  eklenebilir. Bunun iin ilgili alannn zerinde iken TAG stununda tklama
  yapmak yeterlidir. Oluturulan TAG'n dosya ad ile ayn ada sahip CDX
  uzantl dosya yerine baka bir index dosyasna yazlmas isteniyorsa bu CDX
  uzantl dosyann ad belirtilir. Belirtilen index dosyas diskte yoksa
  oluturulur.

          INDEX ON Soyad TAG Soyad OF SOYADX

  Bu program satr ile Soyad alan TAG olarak kullanlarak SOYADX.CDX
  dosyasna eklenir. SOYADX.CDX dosyas daha nceden oluturulmamsa
  oluturulur. Daha sonra SET ORDER deyimi ile istenen TAG aktif TAG
  yaplabilir.

  Eer CDX dosyasnda eklenen veya dahil edilen TAG'n birden fazla alandan
  meydana gelmesi isteniyorsa alan adnn yazld yere alan adlarnn
  arasna art(+) iareti konulmaldr.

          USE ADRES
          INDEX ON AD + SOYAD TAG ADSOY

  Bu satra gre ADRES.CDX adl yapsal index dosyasna eklenen TAG AD ve
  SOYAD alanlarndan meydana gelir. Bu TAG'da hem AD alanna hem de SOYAD
  alanna ait index bilgileri bulunur. Kullanc ister SOYAD alann ister AD
  alanna gre oluturulan index bilgilerini kayt aramasnda kullanabilir.
  Eer INDEX ON deyimi ile oluturulan IDX veya CDX uzantl index dosyas
  daha nceden oluturulmu ve diskte bulunuyorsa INDEX ON deyimi tekrar
  kullanlrsa index dosyas tekrar oluturulur. Index dosyasnn tekrar
  oluturulmasnn tek sakncas ok miktarda kayt ieren dosyalarda bu
  ilemin zaman alacadr. Bu bakmdan INDEX ON deyimi ile index dosyasn
  oluturmadan nce dosyann diskteki varln kontrol etmek gerekir.

  Daha nce de belirtildii zere alan veri taban dosyas ile ayn ada
  sahip index dosyasn amak iin ayr bir ilem yapmaya gerek yok.
  nk bu dosya USE deyimi ile dosya alrken otomatik olarak almaktadr.
  Veri taban dosyasndan farkl bir ada sahip CDX index dosyasn amak iin
  USE deyimi ile dosyay aarken bu belirtilir. Bu ilem iin istenirse SET
  INDEX deyiminden yararlanlr. USE deyimi ile dosya aarken hangi TAG'n
  aktif TAG olaca ORDER parametresi ile belirtilir.

          USE ADRES

  program satr ile ADRES adl dosya aldnda varsa otomatik olarak
  CDX uzantl index dosyas da alr. Ancak index dosyasndan henz
  yararlanlamaz. Bu index dosyasndan yararlanabilmek iin ayrca
  hangi tag-anahtarn kullanlaca belirtilmelidir.

          SET ORDER TO SOYAD

  Bu program satr ile ADRES.CDX adl index dosyasnda olan SOYAD anahtar
  arama ve listeleme ilemleri iin aktif olur. Daha sonra yine ayn ekilde
  SET ORDER ile index dosyasnn dier
  anahtar aktif yaplabilir.

  Dosya adndan farkl ada sahip bir CDX uzantl ok index dosyas oluturmak
  istendii zaman INDEX ON deyimi ile birlikte OF parametresi kullanlmaldr.
  OF parametresi kullanlmadan INDEX ON deyimi ile oluturulan CDX uzantl
  index dosyasnn ad ile DBF dosyasnn ad her artta ayn olur.

          USE ADRES
          INDEX ON soyad TAG soyad OF soyad

  Bu iki program satrndan sonra ADRES adl DBF dosyasndaki "soyad"
  alannn anahtar olarak kullanld "soyad.cdx " adl oklu index dosyas
  oluturulur. Bu index dosyasnda tek bir TAG var.
  Bu TAG'n ad yine "soyad" olarak seildi.

          USE ADRES INDEX soyad ORDER TAG soyad OF soyad

  Bu program satr ile ADRES adl veri taban dosyas ile birlikte SOYAD adl
  CDX uzantl index dosyas alyor. Bu srada SOYAD adl TAG aktif TAG
  olarak belirleniyor. rnek olarak ADRES adl veri taban dosyas aadaki
  gibi alsn:

          USE ADRES INDEX Sehir.idx, Adres.cdx, soyad.idx IN 1

  Bu durumda soyad.idx adl tekli index dosyas 1. sradaki index olur.
  Bu srada;

          SET ORDER TO 1

  program satr ile soyad.idx aktif index dosyas olur. Deiiklik yaplana
  dein arama ve listelemeler Soyad.idx dosyas aracl ile yaplr. Daha
  sonra SET ORDER TO 2 satrnn iletilmesi halinde Sehir.idx dosyas aktif
  index dosyas olarak seilmi olur. Adres.cdx dosyasn arama ve listelemede
  kullanabilmek iin bu kez SET ORDER TO 3 satrnn iletilmesi gerekir. Bu
  satrdan sonra ADRES.CDX adl oklu index dosyasndaki ilk TAG aktif olur.
  Eer bu dosyada ikinci bir TAG var ve aktif yaplmak isteniyorsa bu kez
  SET ORDER TO 4 satrnn iletilmesi gerekir.