Xpoint
   [напомнить пароль]

Недопонимание с обьектами

Метки: [без меток]
[удл]
2007-10-07 17:07:28 [обр] Anton(0/1)[досье]

Доброго всем времени суток!!! Помогите разобраться с обьектами в Perl,
Есть класс DataSet в нём метод EXEC в который передаю коннект у базе а внём происходит выполнение запроса.
Привожу пример класса

package DataSet;
use DBI;
use DBD::Oracle;

sub new {
   my $obj = {};
   bless $obj;
   return $obj;
}


sub EXEC{
   my $dbh = shift;
   my $stm = $dbh->prepare("select sysdate from dual");
   $stm->execute();
   return $stm;
}

1;

и соответствено основную програму

#!/usr/bin/perl
 
use DataSet;
use DBI;
use DBD::Oracle;

$dbh =  DBI->connect('dbi:Oracle:XE', 'user', 'password') or die "Error $!";
$ds = DataSet->new();
$rs = $ds->EXEC($dbh);

выводит ошибку " Can't locate object method "prepare" via package "DataSet" at DataSet.pm "
Подскажите в чём ошибка.

спустя 43 минуты [обр] Alexander O(122/460)[досье]

$ds->EXEC($dbh) == DataSet::EXEC($dc, $dbh) т.е. первым параметром передается ссылка на сам объект,
значит в метод EXEC $dbh попадает вторым параметром. А у вас он предполагается первым, вы вызваете метод prepare для DataSet и получаете ошибку.

perldoc perlobj со всеми ссылками в SEE ALSO,

И еще use DBD::Oracle; писать нигде не надо, DBI это сделает самостоятельно
наверное это можно найти в perldoc DBD::Oracle

спустя 41 минуту [обр] Spectrum2(3/26)[досье]
Anton[досье]Вот так должно быть:
package DataSet;
use DBI;

sub new {
   my $class = shift;
   my $obj = {};
   bless $obj => $class;  # XXX: Не используйте короткую запись вроде "bless $obj", если вы не знаете в чем разница
   return $obj;
}

sub EXEC{
   my $self = shift;
   my $dbh = shift;
   my $stm = $dbh->prepare("select sysdate from dual");
   $stm->execute();
   return $stm;
}

1;
спустя 1 час 9 минут [обр] Anton(0/1)[досье]

Спасибо большое всем, особое Alexander O
За то что не просто дал сухие
подсказки а подсказал где можно почитать поподробей.

Тему можно закрывать.

Powered by POEM™ Engine Copyright © 2002-2005