Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DMoroz / Диплом.doc
Скачиваний:
42
Добавлен:
16.04.2013
Размер:
1 Мб
Скачать

1.3. Особенности реализации подсистемы

1.3.1. Взаимодействие с базой данных

Для взаимодействия Perl-скриптов с СУБД MySQL система ОРОКС использует модуль DBI.

Общий алгоритм работы с базой данных можно представить в следующем виде:

  • Подключение к базе данных с помощью функции connect;

  • Подготовка запроса к выполнению с помощью функции prepare;

  • Выполнение запроса с помощью функции execute;

  • Выборка данных (для запросов содержащих команду SQL select) с помощью функций fetch;

  • Завершение работы с базой данных: функции finish и disconnect.

Подключение к базе данных производится системой ОРОКС автоматически при входе пользователя в систему.

Функции подготовки запроса к базе данных ОРОКС, выполнения этого запроса и выборки данных были изменены для автоматизации перехвата сообщений о возможных ошибках и приведены к более удобному виду для использования.

В результате для работы с БД имеются следующие функции:

ExecSQL($sql) – выполняет выражение $sql;

Assign2var – присваивает результат, возвращённый функцией ExecSQL переменной(ым);

Assign2list – присваивает результат, возращённый функцией ExecSQL массиву(ам) значений.

Приведём фрагмент программы, реализующий выборку из таблицы USERS идентификаторов записей ID, фамилий ufam и имён uname студентов, занимающихся в группе $FORM{group}. Результаты запроса с помощью функции Assign2list заносятся в соответствующие массивы данных:

$sql="SELECT ID, ufam, uname FROM users WHERE uflags='stand' AND ugroup='$FORM{group}'

$sth=ExecSQL($sql);

Assign2list($sth, \@ID, \@fams, \@names);

1.3.2. Передача значений между формами

При передаче данных из одной формы в другую используются хэш %Hidden и скрытый элемент ввода «hidden».

Для передачи значения переменной $var сначала необходимо занести его в специальный ассоциативный массив %Hidden: $Hidden{name}=$var. Перед отправкой формы элементы этого массива шифруются функцией ОРОКС CodeHiddens() и передаются с использованием скрытого элемента ввода «hidden» на следующий экран, где они будут доступны как обычные элементы хэша %FORM. Т.е. значение переменной $var, записанное в хэш %Hiddens будет доступно через $FORM{name}.

Поскольку значениями хэша могут быть только переменные, для передачи массивов значений требуется сначала занести все элементы массива в переменную, а после передачи этой переменной разобрать полученное значение.

Допустим, нужно передать на следующую форму массив идентификаторов @ID. Для этого с помощью функции join() языка Perl объединим все значения массива @ID в переменную $ID_array. В качестве разделителя выступит точка с запятой: $ID_array = join(";", @ID). Затем заносим эту переменную в хэш %Hiddens: $Hidden{ID_array}=$ID_array.

После кодирования хэша с помощью функции CodeHiddens() и отправки формы на следующем экране при обращении к элементу $FORMS{ID_array} получим искомый массив в виде строки, элементы которого разделены точкой с запятой. Для разбора этой строки и занесения элементов обратно в массив используется функция split:

my (@ID)=split(';', $FORM{'ID_array'});

Соседние файлы в папке DMoroz