1

Konu: Memo field'lerde metin araması

Selamlar,
Çok sık soru soruyorum farkındayım ama cehalet zor şey.
Daha önce benzer bir soru sormuştum ama bu kez işim daha zor.
Tüm field'larda serbest metin araması üzerine idi sorum. Bu kez de aynı ancak kullanıcı her field için ayrı sözcükleri arıyorsa ne yapmam gerek diye soracağım şimdi de.
Diyelim 4 memo field var. Bunlar makro, mikro, tani ve yorum olsun. Kullanıcının her field için ayrı arama metinleri girmesine olanak tanıyoruz.
Bir kullanıcının aşağıdaki sözcükleri aradığını düşünelim.
makro için "nodül"
mikro için "tümör"
tani için "hepatit"
yorum boş kalsın.
Yani kullanıcı makro'da "nodül" VE mikro'da "tümör" VE tani'da "hepatit" sözcüklerinin geçtiği kayıtları bulmak istiyor. Yorum bölümü için bir kriteri yok.
Şöyle bir tek üniversal SQL komutu yazdığımda saçma sonuçlar çıkıyor.
m.v1 = "nodül"
m.v2 = "tümör"
m.v3 = "hepatit"

SELECT * FROM hasta WHERE;
ATC(m.v1, makro) > 0 .AND.
ATC(m.v2, mikro)  > 0 .AND.
ATC(m.v3, tani)     > 0 .AND.
ATC(m.v4, yorum) > 0 INTO CURSOR kayit ORDER BY biopsino

Buradaki sorun yorum bölümüne kullanıcının bir şey yazmaması. Kullanıcı dört alan da arama yapmak isterse sorun çıkmıyor.
Bu durumda her kombinasyon için (örn. bir kullanıcı sadece tani bölümünde arama yapmak isteyebilir ya da hem tani ham de yorum'da arama isteyebilir) ayrı SQL ifadesi mi yazmam gerek. Dört field için sanırım 24 kombinasyon çıkıyor.

Teşekkürler.

2

Re: Memo field'lerde metin araması

Visual Fox Pro
local lcCriteria

lcCriteria = ""
if !empty(m.v1)
lcCriteria = m.lcCriteria + ;
              iif(empty(m.lcCriteria),""," and ") + ;
              "atc( m.mv1, Makro ) > 0"
endif
if !empty(m.v2)
lcCriteria = m.lcCriteria + ;
              iif(empty(m.lcCriteria),""," and ") + ;
              "atc( m.mv2, Mikro ) > 0"
endif
if !empty(m.v3)
lcCriteria = m.lcCriteria + ;
              iif(empty(m.lcCriteria),""," and ") + ;
              "atc( m.mv3, Tani ) > 0"
endif
if !empty(m.v4)
lcCriteria = m.lcCriteria + ;
              iif(empty(m.lcCriteria),""," and ") + ;
              "atc( m.mv4, Yorum ) > 0"
endif
 
if !empty(m.lcCriteria)
lcCriteria = "where "+m.lcCriteria
endif
 
SELECT * FROM hasta ;
&lcCriteria ;
INTO CURSOR kayit ;
ORDER BY biopsino

Ya da:

Visual Fox Pro
SELECT * FROM hasta WHERE;

  (empty(m.v1) or ATC(m.v1, makro) > 0) AND ;
  (empty(m.v2) or ATC(m.v2, mikro)  > 0) AND ;
  (empty(m.v3) or ATC(m.v3, tani)     > 0) AND ;
  (empty(m.v4) or ATC(m.v4, yorum) > 0) ;
  INTO CURSOR kayit ;
  ORDER BY biopsino