Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Alexander V. Gaiduk                  2:5020/400     18 Apr 2001  16:51:00
 To : All
 Subject : Re: Помогите разобраться с IBPerl
 -------------------------------------------------------------------------------- 
 
 
 mrrc wrote in message <987591951.983682@basic.maxnet.ru>...
 
 >Возникла необходимость вывести содержимое базы в InterBase через веб, так
 >вот:
 >
 >FreeBSD 4.2 + firebird-0.9_4 (InterBase 6.0 Classic version) + IBPerl-08p3
 >
 >Hабросал скриптик, подскажите, что нужно подправить в нижеследующем
 
 примере,
 
 >чтобы вывести указанную в теле таблицу через броузер, что тут неправильно
 >выполнено? Hаверняка я ошибся на стадии обращения к этой таблице и запроса
 >из нее данных, а также вывода полученного содержимого на экран броузера.
 >
 >Подключение к базе проходит нормально, все путем, вывод ошибки при
 >невозможности подсоединиться тоже отрабатывается должным образом, а вот что
 >дальше делать, не разберусь никак.
 >
 >Один из прилагаемых примеров отработал, все вывелось, но там настолько все
 >мудрено, что толком ничего не понял.
 
 эт точно :))
 я сам не один час ковырял чтоб понять "почему так"
 думаю в моем куске разберешся.
 
 >--------------------------------------------------------------------------
 >
 >#!/usr/bin/perl
 >
 >print "Content-type: text/html\n\n";
 >
 >use IBPerl;
 >
 >$database = '/usr/interbase/examples/v5/employee.gdb';
 >
 >$db = new IBPerl::Connection(
 >    Server => '192.168.0.2',
 >    Protocol => 'TCP/IP',
 >    Path => $database,
 >    User => 'sysdba',
 >    Password => 'masterkey',
 >    Cache => 1000);
 >
 >if ($db->{Handle} < 0) {
 >    print "Hевозможно подключиться к базе данных. Ошибка в следеющем:\n";
 >    print "$db->{Error}\n";
 >    exit 1; # No sense in continuing.
 >                                        }
 >
 >my $tr = new IBPerl::Transaction( Database => $db );
 >    $tr->commit();
 >
 >if ($tr->{Handle} < 0) {
 >    print "Failure to start a transaction. Error as follows:\n";
 >    print "$tr->{Error}\n";
 >    exit 1;
 >                                    }
 >
 >my $st = new IBPerl::Statement(
 >    Transaction => $tr,
 >    SQL => 'SELECT * FROM EMPLOYEE');
 >    $st->execute();
 >
 >$st->fetch( \$result );
 >    print "$result\n";
 >
 >$db->disconnect();
 >
 >-------------------------------------------------------------------------
 по моему наврал или с транзакцией:
 не надо ее коммитить там, где ты это делаеш,
 или с фетчем:
 $result должен быть хэшем (%result) а не скаляром.
 
 вот правильный кусок кода:
 
 Caldera eServer OpenLinux 2.3 (2.2.14),
 IBPerl-08p3, Interbase 6.0 SuperServer
 
 ------------------------------------------------------------
 my $database = "xxx.xxx.xxx.xxx:/где/то/далеко/ibtest.gdb"; # телефонный
 справочник
 # таблица TEL, поля: PHONE, FIO, STREET, HOUSE, FLAT
 
 my ($db, $tr, $st, @streets, %row, $query);
 
 $query = "select * from tel where fio like '$search_fio\%' order by
 street,fio,house;";
 
 $db = new IBPerl::Connection(Path=>$database, User=>'юзер',
 Password=>'пароль');
 if ($db->{Handle} < 0) { print "Error: $db->{Error}\n"; exit 1; }
 
 $tr = new IBPerl::Transaction(Database=>$db);
 if ($tr->{Handle} < 0) { print "Error: $db->{Error}\n"; exit 1; }
 
 $st = new IBPerl::Statement(Transaction=>$tr, SQL=>$query);
 if ($st->{Handle} < 0) { print "Error: $db->{Error}\n"; exit 1; }
 
 if ($st->execute() < 0) { print "Error: $db->{Error}\n"; exit 1; }
 
 print "<table border=1 width=100%><tr>";
 print "<td>NN</td><td>Телефон</td><td>ФИО</td><td>Улица</td>";
 print "<td>Дом</td><td>Квартира</td></tr>";
 
 while ($st->fetch(\%row) == 0) {
   $row{PHONE} =~ s/(..)(..)$/-$1-$2/g;
   print "<tr>";
   print "<td>$row{PHONE}</td>";
   print "<td>$row{FIO}</td>";
   print "<td>$row{STREET}</td>";
   print "<td>$row{HOUSE}</td>";
   print "<td>$row{FLAT}</td>";
   print "</tr>\n";
 }
 
 print "</table>";
 
 if ($tr->commit() < 0) { print "Error: $db->{Error}\n"; exit 1; }
 
 if ($db->disconnect() < 0) { print "Error: $db->{Error}\n"; exit 1; }
 
 --------------------------------------------------------
 
 посмотреть на работу всего этого можно тут:
 http://wood.lesobank.ru/projects/005/index.shtml
 проект на стадии разработки, по этому претензии не принимаются.
 
 =GAV
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Помогите разобраться с IBPerl   mrrc   18 Apr 2001 15:19:17 
 Re: Помогите разобраться с IBPerl   Alexander V. Gaiduk   18 Apr 2001 16:51:00 
 Re: Помогите разобраться с IBPerl   mrrc   18 Apr 2001 23:30:16 
Архивное /ru.perl/39316a254c55.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional