Реферат: Как сделать двунаправленный запрос

s $li(ascHandle,1)=State

w "4 steps forward",!

f i=1:1:4 d

. d ##class(%DynamicQuery).SQLFetch(.ascHandle,.Row,.AtEnd)

. q:(AtEnd=1)!(Row="")

. s ID=$li(Row,1)

. s Name=$li(Row,2)

. w "ID="_ID_", Name="_Name,!

s State=$li(ascHandle)

d ##class(%DynamicQuery).SQLClose(.ascClose)

d ##class(%DynamicQuery).SQLClose(.descClose)

q

Компилитуем, выполняем. В моем случае это выглядит как

USER>d Test^FetchBack()

4 steps forward

ID=1, Name=Presley,Samantha H.

ID=2, Name=Quine,Keith G.

ID=3, Name=Jones,Elvira A.

ID=4, Name=Townsend,Howard D.

2 steps backward

ID=3, Name=Jones,Elvira A.

ID=2, Name=Quine,Keith G.

4 steps forward

ID=3, Name=Jones,Elvira A.

ID=4, Name=Townsend,Howard D.

ID=5, Name=Uberoth,Juanita D.

ID=6, Name=Van De Griek,Michael K.

Видим, что два использованных запроса гладко сшились по используемому состоянию. Это обусловлено тем, что оба запроса совершенно идентичны за исключением направления сортировки. Исследование кодов возврата функций позволяет сделать суждение о более правильном отношении к закрытию запросов.

Таким образом, составить новый класс или набор классов, аналогичные по интерфейсу штатным, не составляет особых проблем. За исключением того, что имея один запрос мы должны будем сделать из него два. Для этого введем некоторую некрасивость - в теле запроса потребуем указания обеих сортировок и разделителей, ограничивающих собственно запрос и сортировки. Выберем в качестве разделителя символы $$$ и будем полагать, что запрос строится по схеме:

К-во Просмотров: 520
Бесплатно скачать Реферат: Как сделать двунаправленный запрос