РАБОТА С ВНЕШНЕЙ БАЗОЙ ДАННЫХ


db_create(СелекторБД,ИмяФайла,Место)
(db_selector,string,place) — (i,i,i)

Предикат создает новый файл ИмяФайла и связанную с ним базу данных (БД):
1) на диске, если Место=in_file;
2) в памяти, если Место=in_memory;
3) в расширенной памяти, если Место=in_ems.
БД становится доступной для чтения и записи. Логическое имя БД задается параметром СелекторБД.Таким образом, в результате выполнения этого предиката с логическим именем БД будет связано конкретное физическое устройство и место на нем.

db_open(СелекторБД,ИмяФайла,Место)
(db_selector,string,place) — (i,i,i)

Предикат связывает логическое имя БД (СелекторБД) с уже существующей БД, расположенной в файле ИмяФайла на диске (Место=in_file),в памяти (Место=in_memory) или в расширенной памяти (Место=in_ems). БД становится доступной для чтения и записи.

db_openinvalid(СелекторБД,ИмяФайла,Место)
(db_selector,string,place) — (i,i,i)

Предикат связывает логическое имя БД (СелекторБД) с уже существующей БД, расположенной в файле ИмяФайла на диске (Место=in_file),в памяти (Место=in_memory) или в расширенной памяти (Место=in_ems). БД становится доступной только для чтения.

db_close(СелекторБД)
(db_selector) — (i)

Предикат закрывает доступ к БД с логическим именем СелекторБД.Одновременно закрывается связанный с этой БД файл.

db_delete(ИмяФайла,Место)
(string,place) — (i,i)

Предикат удаляет файл ИмяФайла, связанный с некоторой БД и расположенный на диске (Место=in_file),в памяти (Место=in_memory) или в расширенной памяти (Место=in_ems).

db_flush(СелекторБД)
(db_selector) — (i)

Предикат очищает буферы DOS путем переноса информации из буферов в файл, связанный с БД, имеющей логическое имя СелекторБД. Кроме того, этот предикат следует использовать перед закрытием БД (db_close) с целью сохранения всей информации в файле БД.

db_garbagecollect(СелекторБД)
(db_selector) — (i)

Предикат очищает файл, связанный с БД,имеющей логическое имя СелекторБД, от удаленной информации (записей, цепей, деревьев), а также сжимает его.

db_copy(СелекторБД,ИмяФайла,Место)
(db_selector,string,place) — (i,i,i)

Предикат копирует БД, имеющую логическое имя СелекторБД, из файла, связанного с этой БД в файл ИмяФайла, который будет расположен на диске (Место=in_file),в памяти (Место=in_memory) или в расширенной памяти (Место=in_ems).
%============================================================
% Пример:
domains
db_selector = бд1;бд2 % описываем два логичес-
% ких имени БД:бд1 и бд2
goal
db_create(бд1,»mydb1″,in_ems), % создаем в расширенной
% памяти файл MYDB1,
% бд1 <—> MYDB1

……. % работа с БД бд1

db_flush(бд1), % информация буферов DOS
% => MYDB1
db_garbagecollect(бд1), % очищаем MYDB1 от»мусора»
db_copy(бд1,»a:\\my.dba»,in_file),%бд1(MYDB1)=> A:\MY.DBA
db_close(бд1), % закрываем доступ к бд1
db_delete(«mydb1″,in_ems), % удаляем MYDBA из расши-
% ренной памяти
…….

db_openinvalid(бд1,»a:\\my.dba»,in_file),%бд1<—A:\MY.DBA
db_copy(бд1,»mydb2″,in_ems), % бд1(A:\MY.DBA) => MYDB2
db_open(бд2,»mydb2″,in_ems), % бд2 <—> MYDB2
…….
%============================================================

nondeterm db_chains(СелекторБД,Цепь)
(db_selector,string) — (i,o)

Неопределенный предикат, позволяющий получить имена всех цепей БД, имеющей логическое имя СелекторБД.
%============================================================
% Пример1 (напечатать имена всех цепей БД):
domains
db_selector = бд
goal
db_openinvalid(бд,»my.dba»,in_file),
db_chains(бд,Цепь),
write(Цепь),nl,
fail
;
db_close(бд).

% Пример2 (проверить, есть ли в БД цепь с именем «Цепь1″):
domains
db_selector = бд
goal
db_openinvalid(бд,»my.dba»,in_file),
db_chains(бд,»Цепь1″),
write(«есть»),
db_close(бд)
;
write(«нет»),
db_close(бд).

% Пример3 (получить список имен всех цепей в БД):
domains
db_selector = бд
stringlist = string*
goal
db_openinvalid(бд,»my.dba»,in_file),
findall(Цепь,db_chains(бд,Цепь),Список),
write(«список имен всех цепей = «,Список),
db_close(бд).
%============================================================

db_statistics(СелекторБД,ЧислоЗаписей,РазмерПамяти,
РазмерБазыДанных,СвободноеМесто)
(db_selector,real,real,real,real) — (i,o,o,o,o)
Этот предикат позволяет получить статистику по числу записей в БД, ее размерам в байтах, а также узнать о наличии свободного места для добавления информации в БД. Статистика выдается для БД с логическим именем СелекторБД.

chain_inserta(СелекторБД,Цепь,Объект,Запись,Ссылка)
(db_selector,string,symbol,<Domain>,ref)
— (i,i,i,i,o)

Предикат вставляет Запись, относящуюся к типу данных Объект в начало цепи с именем Цепь. Выходным параметром является Ссылка, которую можно использовать для дальнейшей работы с этой записью. Операция выполняется в БД с логическим именем СелекторБД.

chain_insertz(СелекторБД,Цепь,Объект,Запись,Ссылка)
(db_selector,string,symbol,<Domain>,ref)
— (i,i,i,i,o)

Предикат вставляет Запись, относящуюся к типу данных Объект в конец цепи с именем Цепь. Выходным параметром является Ссылка, которую можно использовать для дальнейшей работы с этой записью. Операция выполняется в БД с логическим именем СелекторБД.

chain_insertafter(СелекторБД,Объект,Ссылка,Запись,НоваяСсылка)
(db_selector,symbol,ref,<Domain>,ref)
— (i,i,i,i,o)

Предикат вставляет Запись, относящуюся к типу данных Объект в цепь после записи, имеющей ссылку Ссылка. Выходным параметром является НоваяСсылка, принадлежащая вставленной записи, которую можно использовать для дальнейшей работы с этой записью. Операция выполняется в БД с логическим именем СелекторБД.
%===============================================================
% Пример
domains
db_selector = бд
объект = о(integer,integer)
goal
db_create(бд,»my.dba»,in_file),
chain_inserta(бд,»цепь1″,integer,1,Ссылка1),
% цепь1: 1
chain_inserta(бд,»цепь1″,integer,2,Ссылка2),
% цепь1: 2 1
chain_insertz(бд,»цепь1″,integer,3,_),
% цепь1: 2 1 3
chain_insertafter(бд,integer,Ссылка2,4,_),
% цепь1: 2 4 1 3
chain_insertz(бд,»цепь2″,объект,о(2,1),Ссылка21),
% цепь1: 2 4 1 3
% цепь2: о(2,1)
chain_insertz(бд,»цепь2″,объект,о(2,2),_),
% цепь1: 2 4 1 3
% цепь2: о(2,1) о(2,2)
chain_insertafter(бд,объект,Ссылка1,о(1,5),_),
% цепь1: 2 4 1 о(1,5) 3
% цепь2: о(2,1) о(2,2)
chain_insertafter(бд,integer,Ссылка21,5,_),
% цепь1: 2 4 1 о(1,5) 3
% цепь2: о(2,1) 5 о(2,2)
db_close(бд).
%============================================================

chain_delete(СелекторБД,Цепь)
(db_selector,string) — (i,i)

Предикат удаляет из БД с логическим именем СелекторБД цепь с именем Цепь.

nondeterm chain_terms(СелекторБД,Цепь,Объект,Запись,Ссылка)
(db_selector,string,symbol,<Domain>,ref)
— (i,i,i,_,o)

Неопределенный предикат, позволяющий просмотреть все записи (а также их ссылки), относящиеся к типу данных Объект, в цепи с именем Цепь. Операция производится в БД с логическим именем СелекторБД.
%============================================================
% цепь: д_р(фио(«Иванов»,»Иван»,»Иванович»),12,10,1951)
д_р(фио(«Петров»,»Петр»,»Петрович»),2,10,1960)
д_р(фио(«Сидоров»,»Иван»,»Петрович»),1,1,1949)

% Пример (напечатать фамилии людей, родившихся в октябре до
% 1955 года, и удалить запись о них из цепи):
domains
db_selector = бд
день_рождения = д_р(человек,день,месяц,год)
человек = фио(фамилия,имя,отчество)
день,месяц,год = integer
фамилия,имя,отчесво = string
goal
db_open(бд,»my.dba»,in_file),
chain_terms(бд,»цепь»,день_рождения,
д_р(фио(Фамилия,_,_),_,10,Год), Ссылка),
Год < 1955,
write(Фамилия),nl,
term_delete(бд,»цепь»,Ссылка),
fail;
db_close(бд),
write(«работа завершена.\n»).
%============================================================
chain_first(СелекторБД,Цепь,ПерваяСсылка)
(db_selector,string,ref) — (i,i,o)

Предикат находит ссылку на первую запись цепи Цепь в БД с логическим именем СелекторБД.

chain_last(СелекторБД,Цепь,ПоследняяСсылка)
(db_selector,string,ref) — (i,i,o)

Предикат находит ссылку на последнюю запись цепи Цепь в БД с логическим именем СелекторБД.

chain_next(СелекторБД,Ссылка,СледующаяСсылка)
(db_selector,ref,ref) — (i,i,o)

Предикат находит ссылку (СледующаяСсылка) на запись, расположенную следом за записью, имеющей ссылку Ссылка. Операция выполняется в БД с логическим именем СелекторБД.

chain_prev(СелекторБД,Ссылка,ПредыдущаяСсылка)
(db_selector,ref,ref) — (i,i,o)

Предикат находит ссылку (СледующаяСсылка) на запись, расположенную перед записью, имеющей ссылку Ссылка. Операция выполняется в БД с логическим именем СелекторБД.

term_delete(СелекторБД,Цепь,Ссылка)
(db_selector,string,ref) — (i,i,i)

В БД с логическим именем СелекторБД предикат удаляет из цепи с именем Цепь запись, имеющую ссылку Ссылка.
term_replace(СелекторБД,Объект,Ссылка,НоваяЗапись)
(db_selector,symbol,ref,<Domain>) — (i,i,i,i)

В БД с логическим именем СелекторБД предикат заменяет запись, имеющую ссылку Ссылка на запись НоваяЗапись типа данных Объект.

ref_term(СелекторБД,Объект,Ссылка,Запись)
(db_selector,symbol,ref,<Domain>) — (i,i,i,_)

В БД с логическим именем СелекторБД предикат определяет Запись типа данных Объект, имеющую ссылку Ссылка.

Загрузка...