Автор Тема: Помогите с модулями!!!  (Прочитано 3492 раз)

0 Пользователей и 1 Гость просматривают эту тему.

denex

  • Гость
Помогите с модулями!!!
« : 24 Сентября 2002, 16:22:58 »
Нужно в программе создать объект БД (модуль DBI)
скажем $dbi = new....


package MyModule;
....
И этот же объект использовать в модуле скажем так:
$dbi->quote(...);

Помогите кто может! Все мозги сломал.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Помогите с модулями!!!
« Ответ #1 : 24 Сентября 2002, 17:18:33 »
Ничего не понял. :(
Подробнее расскажи.
The documentations is your friend

denex

  • Гость
Помогите с модулями!!!
« Ответ #2 : 24 Сентября 2002, 18:07:25 »
У меня есть Perl скрипт somescript.cgi
В скрипте я с помощью модуля DBI соединяюсь с БД
my $dbh = DBI->connect(параметры соединения)
Получил объект $dbi.

Хочу передать этот объект своему модулю приблизительно так:
my $SomeObj = MyModule->new(\'DB\' => \\$dbh,
\'SomeParam\' => \'zxc\'
...
);


Далее я хочу использовать данный объект $dbi со всеми его методами в модуле (который сам написал) MyModule.pm
Как этого добиться?

Буду рад любой помощи.

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Помогите с модулями!!!
« Ответ #3 : 24 Сентября 2002, 18:44:55 »
Я делал не так.
В главной проге я ДБИ не подгружал, а делал это в своих модулях так:

package mod::dialup;
use strict;
use vars qw(@ISA @EXPORT $dbh);

use mod::common;
use Exporter;
use DBI;

@ISA = (\'Exporter\');
@EXPORT = qw();

sub get_inv {
 my $class = shift;
 my $self = {};
 %$self = @_;
 open(OLDERR,">&STDERR") or die "Couldn\'t dup STDERR: $!\\n";
 close(STDERR);
 eval \'$dbh = DBI->connect("DBI:mysql:$self->{dbname}:$self->{dbhost}",$self->{dbuser},$self->{dbpass});\';
 open(STDERR,">&OLDERR") or die "Couldn\'t dup OLDERR: $!\\n";
 close(OLDERR);
 open(STDERR,">>./error_log") or die "Couldn\'t rediect STDERR!: $!\\n";
 unless(defined $dbh){error("Database is not aviable",1);}
 $self->{rest_days} = {};
 $self->{holidays} = {};
 $self->{users} = {};
 $self->{users_id} = {};

 my $sth = $dbh->prepare(\'select * from settings;\');
 $sth->execute() or error("Can\'t execute the query \'select * from settings;\'");
 my $row;
 while($row = $sth->fetchrow_arrayref()){
  unless(exists $self->{$row->
  • }){

   $self->{$row->
  • } = $row->[1];

  }
 }
 $sth->finish();

 bless($self,$class);
 return $self;
}

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

sub finish {
 if(defined $dbh){$dbh->disconnect();}
}

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

При этом в главной программе делал вот что:

$dialup = mod::dialup->get_inv(%settings);

END {
 mod::dialup->finish();
}


Теперь с любого места в модуле можно просто, спокойно написать:

my $sth = $dbh->prepare(...

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Помогите с модулями!!!
« Ответ #4 : 24 Сентября 2002, 18:47:42 »
Да, то что я делал с STDERR вам делать не обязательно. Просто ДБИ использует die ".."(или croak) если че не получается, а я не хочу, чтоб моя прога вылетала с такими матами...

denex

  • Гость
Помогите с модулями!!!
« Ответ #5 : 25 Сентября 2002, 15:54:12 »
В общем все нормально, только мне для задачи нужно именно уже подготовленный объект $dbh из главной программы передать во внутрь модуля, как этого можно добиться?

Просто сам модуль не должен иметь пердставление о способе подключения к бд.

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Помогите с модулями!!!
« Ответ #6 : 25 Сентября 2002, 16:28:14 »
Тут такая штука - каждий модуль использующий ДБИ должен иметь в коде \'use DBI;\'.(имхо) Я так подумал, и пришел к выводу что это невозможно, т.к. мы работаем с ООП - со всеми вытекающими ;)
А какова задача?

Ленивый гость

  • Гость
Помогите с модулями!!!
« Ответ #7 : 26 Сентября 2002, 11:13:42 »
Огромное спасибо всем за помощь!
Разобрался и все получилось!!!!!!!

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Помогите с модулями!!!
« Ответ #8 : 26 Сентября 2002, 15:20:11 »
Напиши как - другим ведь тоже интересно!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28