Программирование >>  Программный интерфейс приложений 

1 ... 113 114 115 [ 116 ] 117 118 119 ... 264


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 выводит следующую информацию.

last name

first name

city 1

state

Adams

John 1

Braintree I

Adams

John Quincy1

Braintree

Arthur

1 Chester A.

Fairfield

Buchanan

James

Mercersburg

Bush

1 George W. !

Milton 1

Следующий сценарий использует метаданные столбцов для вывода данных в различных форматах. Вот сценарий show member, который позволит быстро просмотреть данные о членах Исторической Лиги и не потребует ввода запросов. По фамилии члена лиги эгог сценарий отобразит выбранную запись:

% show member artel

last name:

Artel

first name:

Mike

suffix:

expiration:

2003-04-16

email:

mike artelSvenus.org

street:

4264 Levering Rd.

city:

Miami

state:

zip:

12777

phone:

075-961-0712

interests:

Civil Rights,Education,Revolutionary War

member id:



Сценарий 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 в этой главе.

В проекте учета успеваемости фебуется обеспечить возможность выборки результатов любой викторины или любого экзамена.

В проекте Историческая Лига фебуется обеспечить следующие функции.

Распечатка списка членов лиги в различных форматах. Для создания профаммы ежегодного банкета нам нужен список членов в формате (только имена).

Выборка членов лиги, которым необходимо срочно возобновить свое членство, и уведомление об этом.



1 ... 113 114 115 [ 116 ] 117 118 119 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика