1

Konu: Tüm field türlerinde arama nasıl yapılıyor?

Selamlar,

Bir arkadaştan bir şey duymuştum. Hangi field olursa olsun istediğimiz bir sözcüğü (örneğin "İzmir") aratabiliyormuşuz ve bir memo field da bile bu aramayı yapabiliyormuşuz. Bu nasıl mümkün oluyor.
Uzun metinlerde geçen br sözcüğü VFP nasıl saptayabiliyor?

Şimdiden teşekkürler...

2

Re: Tüm field türlerinde arama nasıl yapılıyor?

loca for "ahmet"$myfield

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

3

Re: Tüm field türlerinde arama nasıl yapılıyor?

Merhaba,

http://www.foxweb.com/fwFullText/ adresine bir göz atarsan hoşuna gidecek bir şeyler bulabilirsin.

/o---------------------o\
     www.haser.com
\o---------------------o/

4

Re: Tüm field türlerinde arama nasıl yapılıyor?

atc('izmir',myMemo) > 0
Ancak Hakan Kara'nin yontemi en iyisi (indexli arama, hash matching). Kodu verecegini sanmam:)

5 Son düzenleyen, avrasya34 (25.04.2007 12:02:34)

Re: Tüm field türlerinde arama nasıl yapılıyor?

m.cdisplayvalue="izmir"
SELECT * FROM hasta WHERE ;
    adi=m.cdisplayvalue OR soyadi=m.cdisplayvalue;
    OR pcinsi=m.cdisplayvalue;
    OR pcinsiyeti=m.cdisplayvalue;
    OR ilçe=m.cdisplayvalue;
    OR il=m.cdisplayvalue;
    OR m.cdisplayvalue $ALLTRIM(evtel1);
    OR m.cdisplayvalue $ALLTRIM(gsm1);
    OR m.cdisplayvalue$ALLTRIM(fax);
    OR ATC(m.cdisplayvalue,CHRTRAN(adres,'ıI','iİ'))>0;   
    OR padi=ALLTRIM(UPPER(m.cdisplayvalue)) OR pirki=ALLTRIM(UPPER(m.cdisplayvalue)) AND  hasta.no=no INTO CURSOR kayit  ORDER BY no
    Thisform.Grid1.RecordSource="kayit"


BU kod da burda öğrendiklerimden
m.cdisplayvalue içindeki value yi yukardaki aranlarda arıyor.

6 Son düzenleyen, mrduyar (25.04.2007 15:14:10)

Re: Tüm field türlerinde arama nasıl yapılıyor?

Visual Fox Pro
m.cdisplayvalue="izmir"

Select *,adi++soyadi+pcinsi+pcinsiyeti+ilçe+il As aranacakalan  From hasta Into Cursor aranacakcursor
Select * From aranacakcursor ;
    WHERE m.cdisplayvalue $ Alltrim(aranacakalan);
    Into Cursor kayit  Order By no

şeklinde bir kod daha doğru olmazmı?
ben genelde böyle kullanıyorum.

Bilmediğin Neyse Yanıldığındır.

7

Re: Tüm field türlerinde arama nasıl yapılıyor?

elbette daha doğru siz üstadsınız daha iyisini yazmanız kaçınılmaz tabikii.
hatta bu kodu eminimki dosyadaki field alanlarını kendisinin belirleyip arama yapabileceği bir hale bile sokarsınız smile ben çok uğraştım ama yapamadım henüz smile
hani sadece
sele * .fieldlist as aranacakalan form hasta in to cursor aranacakcursor gibi

çok güzel olur bence bu
ama ben henüz bir dosyadaki field isimlerini saklayabilecek bişey yapamadım sad

8

Re: Tüm field türlerinde arama nasıl yapılıyor?

Aşağıdaki kod pek efektif olmasada idare eder zannedersem.

* Büyük küçük harf duyarlıdır.

Visual Fox Pro
Create Cursor Deneme (cAd C(10), cSoyad C(10), nNo I)

Insert Into Deneme Values("tarkan", "haser", 1)
Insert Into Deneme Values("Deneme", "soyad", 2)
Insert Into Deneme Values("bir", "tarak", 11)
 
Do TablodaArama With "Deneme", "tar"
 
Procedure TablodaArama
LParameters tcTabloAdi As String, tvAranan As Variant
 
    If Empty(m.tcTabloAdi)
        MessageBox("Lütfen tablo adı parametresini gönderiniz!", 48, "Uyarı")
        Return .F.
    EndIf
    If Empty(m.tvAranan)
        MessageBox("Lütfen aranacak değer parametresini gönderiniz!", 48, "Uyarı")
        Return .F.
    EndIf
 
    m.tcTabloAdi = AllTrim(m.tcTabloAdi)
 
    If !Used(m.tcTabloAdi)
        MessageBox("Tablo bulunamadı!", 48, "Uyarı")
        Return .F.
    EndIf
 
    Local lnI As Integer, lcSahalar As String, lcKomut As String, lcAranan As String
 
    m.lcSahalar = ""
 
    For m.lnI = 1 To FCount(m.tcTabloAdi)
        Do Case
            Case InList(Type(m.tcTabloAdi + "." + Field(m.lnI, m.tcTabloAdi)), "C", "M")
                m.lcSahalar = m.lcSahalar + IIf(Empty(m.lcSahalar), "", " + ") + Field(m.lnI, m.tcTabloAdi)
            Case !InList(m.tcTabloAdi + "." + Type(Field(m.lnI, m.tcTabloAdi)), "G", "O", "W")
                m.lcSahalar = m.lcSahalar + IIf(Empty(m.lcSahalar), "", " + Transform(") + Field(m.lnI, m.tcTabloAdi) + ")"
        EndCase
    EndFor
 
    m.lcAranan = "'" + Transform(m.tvAranan) + "'"
 
    m.lcKomut = ;
        "Select Recno() As nKayitNo " + ;
            "From " + m.tcTabloAdi + " " + ;
            "Where " + m.lcAranan + " $ " + m.lcSahalar + " " + ;
            "Into Cursor curAramaSonucu"
    &lcKomut
EndProc
/o---------------------o\
     www.haser.com
\o---------------------o/

9

Re: Tüm field türlerinde arama nasıl yapılıyor?

Arkadaşlar, bir anda çok çeşitli ve değerli fikirleri görmüş oldum sayenizde. Bir kısmını da (bilgim ve deneyimim) sınırlı olduğu için ancak anlayabileceğim.
Çok teşekkürler. Buradan şunu anladım arama yapılacak field'ın index indelenmiş olması gerekmiyor, memoda bile aranabiliyor.
Binlerce kayıt olan bir tabloda hız konusunda da fikir verebilir misiniz? Bir de Rushmore burada işin içine giriyor mu?

10

Re: Tüm field türlerinde arama nasıl yapılıyor?

Binlerce kayit dediginde sayi 10-20bin altinda demekse, hiz derdin yok. O seviyeler kucuk tablo olarak geciyor. O kadar kucukte olsa indexsiz aramalar saniyeler surebilir. Indexli aramalar ise buyuk tablolarda bile saniyenin altinda (dun mesela bir zamanlama yapmam gerekti. 120bin kusur kayittan belli bir tarih araligindaki kayitlarin bulunmasi 15-78 milisaniye arasinda sonuc verdi).