Читайте также: |
|
Реализуя запрос на языке SQL, получим
SELECT Det.ImDet FROM DET
WHERE NOT EXISTS (SELECT * FROM DOG
WHERE (dog.KDet=det.KDet) AND (dog.DtN>’10.10.2006’)
AND NOT EXISTS (SELECT * FROM PSTS WHERE (psts.KPst=dog.KPst)
AND (psts.AdrPst<>’Казань’))
AND NOT EXISTS (SELECT * FROM PST WHERE (pst.KPst=dog.KPst) AND (pst.Kdet=dog.KDet)))
Ниже приводится пример реализации запроса средствами языка DELPHI с использованием команд навигации по таблицам.
При реализации запроса учитываются следующие эквивалентные представления:
Учитывая, что семантически
§ реализация оператора «b:=$xÎFile(B(x))» может быть представлена в виде:
b:=false; RESET(File);
WHILENOT b ANDNOT EOF(File) DO
BEGIN READ(File,x); b:=B(x) END
§ реализация оператора «b:="xÎFile(B(x))»:
b:=true; RESET(File);
WHILE b ANDNOT EOF(File) DO
BEGIN READ(File,x); b:=B(x) END
Для проверки значения кванторной формулы на соответствующем наборе данных, после завершения цикла необходимо проверить значение переменной - селектора . Отметим, что изменение значения селектора завершает цикл, не перебирая все записи из таблицы File, что, вообще говоря, оптимизирует время выполнения программы
Вернемся к исходной форме запроса:
НАЙТИ{(de.ImDet)/deÎDet}:
("doÎDog)((do.DataN<=’10.10.2006’ Ú do.KDet¹de.KDet)Ú
($psÎPsts)((ps.KPst=do.KPst)&(ps.AdrPst¹’Казань’))Ú
($pvÎPst)((pv.KPst=do.KPst)&(pv.KDet=do.KDet)))
{ NewTable - таблица, куда помещаются результаты запроса. Эта таблица должна быть создана заранее}
NewTable.Close; NewTable.EmptyTable; NewTable.Open;
{ Открываются все таблицы }
PstsTable.Open; DogTable.Open; DetTable.Open; PstTable.Open;;
{Внешний цикл строится по таблице Det}
DetTable.First;
Дата добавления: 2015-08-13; просмотров: 51 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
МЕТА РОБОТИ | | | IF aDog then begin |