|
Программирование >> Программный интерфейс приложений
print - X ($wid ary ref->[$i]+2) print \n ; # печать строки данных # (не выравнивает по правому краю цифровые данные) sub print row { my ($val ary ref) = sliift; # значения столбцов my ($wid ary ref) = shift; # ширина столбцов my (Scols) = shift; # количество столбцов print ( ; for (my Si = 0; Si < Scols; $i++) printf %-*s I , $wid ary ref->[$i] , defined ($val ary ref->[Si]) ? $val ary ref->[$i] : NULL print \n ; Сценарий box out выводит следующую информацию.
Следующий сценарий использует метаданные столбцов для вывода данных в различных форматах. Вот сценарий show member, который позволит быстро просмотреть данные о членах Исторической Лиги и не потребует ввода запросов. По фамилии члена лиги эгог сценарий отобразит выбранную запись: % show member artel
Сценарий show members можно инициировать с помощью идентификационного номера или шаблона по фамилиям. Следующие команды делают выборку данных по идентификационному номеру члена лиги и выборку всех членов лиги, фамилии которых начинаются с с : % show meniber 23 % show meniber с% Основное тело профаммного кода сценария show member приведено внизу. Здесь атрибут name используется для обозначения названий столбцов и атрибут num OFFIELDS - для определения количества столбцов, содержащихся в результирующем наборе: ту ($count) =0; # количество распечатываемых строк ту (@label) = 0; # массив наименований столбцов ту ($label wid) =0; while (@APGV) # выполнить запрос для каждого аргумента # командной строки ту ($arg) = shift (@ARGV); my ($sth, $clause, $address); # умолчание - поиск по фамилии; произвести поиск по # идентификационному номеру, если получен числовой аргумент $clause = last name LIKE . $dbh->quote ($arg); $clause = member id = . $dbh->quote {$arg) if $arg =- / \d/; # генерировать запрос Ssth = $dbh->prepare (qq{ SELECT * FROM member WHERE $clause ORDER BY last name, first name } ) ; $sth->execute {); # определение имен столбцов для наименования и # определение максимальной ширины имени столбца # для форматирования # (делать это только в начале цикла) if ($label wid == 0) @label = @{$sth->{NAME)}; foreach my $label (glabel) { $label wid = length ($label) if $label wid < length ($label); # получить и распечатать результаты запроса, а затем очистить while (my (Загу = $sth->fetchrow array ()) # вывести символ перевода строки перед второй # и последующими строками print \п if ++$count > 1; foreach (my $i = 0; $i < $sth->{NOM OF FIELDS}; $i++) # распечатать название столбца и значение prmtf %-*s , $label wid+l , $label[$i] print . $ary[$i] if $ary[Si]; print \n ; $sth->finish 0; Задачей сценария show member является отображение всего содержимого записи, независимо от количества в ней полей. Воспользовавшись оператором select * для выборки всех столбцов и атрибутом name для определения, что они собой представляют, этот сценарий не потребует модификации, даже если в таблицу позднее будут добавляться новые столбцы или удаляться старые столбцы. Для того чтобы просто узнать, какие столбцы содержит таблица, не выбирая при этом новых строк, необходимо сделать следующий запрос: SELECT * FROM tbl nanie WHERE 1=0 Вызвав методы ргерагеО и execute () обычным образом, можно получить имена столбцов из выражения @ {$sth->{name}}. Однако нужно помнить, что несмотря на то, что такие трюки с использованием пустых запросов работают для MySQL, они не всегда переносимы и работают не во всех базах данных. Дополнительную информацию по использованию атрибутов интерфейса DBI и DBD: : mysql можно найти в приложении Ж, Профаммный интерфейс DBI языка написания сценариев Perl . Принятие решения о выборе золотой середины между переносимостью и атрибутами, прису-шими MySQL, возлагается полностью на разработчика. Подготовка интерфейса к работе к этому моменту читатель уже познакомился со многими концепциями, положенными в основу процесса программирования интерфейса DBI. Теперь обратимся к практической плоскости. Наши цели были обрисованы в главе 1, Знакомство с СУБД MySQL и SQL . Будем им следовать при написании сценариев DBI в этой главе. В проекте учета успеваемости фебуется обеспечить возможность выборки результатов любой викторины или любого экзамена. В проекте Историческая Лига фебуется обеспечить следующие функции. Распечатка списка членов лиги в различных форматах. Для создания профаммы ежегодного банкета нам нужен список членов в формате (только имена). Выборка членов лиги, которым необходимо срочно возобновить свое членство, и уведомление об этом.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |