[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: BUG w wersjach 6,7,8 ????
Zgadzam sie z tym, ze Progress moglby w bardziej wyrafinowany sposob
analizowac kryteria zapytania. Natomiast, jako ze opisany ponizej
przyklad zachowuje sie dokladnie wg. dokumentacji, nie nalezy
okreslac tego mianem BUG.
> Witam
> Pozwolę sobie przedstawić moim zdaniem dużą "niedoróbkę" która
> pozostaje niezmieniona do wersji 8 włącznie.
>
> Interesuje mnie konstrukcja
> "FOR EACH rekord WHERE wyrazenie ..."
> która m.in. ma zastosowanie w składni OPEN QUERY...
>
> Chcę dać użytkownikowi mozliwość wyboru rekordów wg ustalonych przez
> niego parametrów. Przyklad:
>
> Zalozmy nastepujaca tabele:
> Tabela: Czlowiek
> Pola: Imie
> Nazwisko
> Nr_PESEL (index idx-pesel)
>
> Chcę, aby użytkownik mógł sobie szukać wg dowolnego pola (pól) w tabeli.
> Robię mu ot taki interfejs do wprowadzania filtru.
>
> +-------- Warunki wyszukiwania ------+
> | imie: Jan________ |
> | nazwisko: ___________ | (nasza_ramka)
> | nr PESEL: 6907_______ |
> +------------------------------------+
>
> W powyższym przykładzie chcę znaleźć wszystkich Janków, Januszów itp
> których pesel zaczyna się od "6907". Ale założenie jest takie, że
> użytkownik może zadać dowolną kombinację warunków. Dla uproszczenia
> przykładu, zakładam, iż łączy je spónik logiczny "and".
>
> Tworzę więc kod...
>
> --------------------------------------------------------------------
>
> DEF VAR par1 LIKE czlowiek.imie LABEL "imie".
> DEF VAR par2 LIKE czlowiek.nazwisko LABEL "nazwisko".
> DEF VAR par3 LIKE czlowiek.nr_pesel LABEL "nr PESEL".
>
> UPDATE par1 par2 par3 WITH nasza_ramka.
>
> FOR EACH czlowiek WHERE
> (IF par1 <> "" THEN czlowiek.imie BEGINS par1 ELSE true) AND
> (IF par2 <> "" THEN czlowiek.nazwisko BEGINS par2 ELSE true) AND
> (IF par3 <> "" THEN czlowiek.nr_pesel BEGINS par3 ELSE true):
>
> /* i tu jakieś akcje np: */
> DISPLAY czlowiek.
> END.
>
> --------------------------------------------------------------------
>
> Wydawałoby się, iż sprawa jest oczywista. Kod działa jak trzeba.
> Użytkownik podaje dowolne parametry, procedura je łączy w odpowiednie
> warunki i wybiera rekordy. Gdy wszystkie parametry będą puste, w pętli
> zostaną wyświetlone wszystkie rekordy. Jest tylko małe "ALE".
>
> DLACZEGO DO LICHA PROGRESS NIE KORZYSTA Z ŻADNEGO INDEKSU????!!!!
>
> W naszym przykładzie z Jankami powinien zgrabnie wykorzystać index
> idx-pesel. A tego ewidentnie nie robi. Jeśli natomiast trzeci warunek:
>
> "(IF par3 <> "" THEN czlowiek.nr_pesel BEGINS par3 ELSE true)"
>
> zastąpimy przez
>
> "czlowiek.nr_pesel BEGINS par3"
>
> ... to wszystko przebiega szybko i indeks jest wykorzystany.
>
> Jest to moim zdaniem ewidentny BUG i potwierdza, iż wykorzystanie
> indeksów w produkcie firmy PSC jest kiepściutkie.
>
--
Tomasz Judycki tj@csbi.waw.pl
CSBI SA, tel (48 22) 610 85 80 ext. 334
Plowiecka 1, fax (48 22) 612 20 61
04-501 Warsaw,
Poland
http://www.csbi.waw.pl