Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

Re: Class::DBI::Loader error: Can't locate object method "set_db"

by Corion (Pope)
on Apr 12, 2005 at 10:29 UTC ( #446914=note: print w/replies, xml ) Need Help??

in reply to Class::DBI::Loader error: Can't locate object method "set_db"

My guess is that you want namespace => 'MyCompany::MyProduct' instead of namespace => 'MyCompany::MyProduct::Database', at least if you plan on accessing the classes/tables later as MyCompany::MyProduct::MyTable->new(...). Other than that, I can't find anything that directly strikes me as odd, so maybe some more surrounding code would be helpfull.

Replies are listed 'Best First'.
Re^2: Class::DBI::Loader error: Can't locate object method "set_db"
by kudra (Vicar) on Apr 12, 2005 at 10:49 UTC
    Tables will be accessed as MyCompany::MyProduct::Database::Tablename.

    What I have shown above is the entire module. I removed all other code to give as clear of an example as possible.

    Here is the code that tries to use it:

    #!/usr/local/bin/perl use strict; use warnings; use lib '/myproject/lib'; use MyCompany::MyProduct::Database; use Data::Dumper; my $person = MyCompany::MyProduct::Database::Person->retrieve(7); print Dumper $person;

      The following code works for me. It has the following differences:

      • It uses DBD::SQLite, where you use DBD::mysql
      • I didn't test out putting the whole stuff into two separate files.

      One thing that comes to mind: Did you install the proper Class::DBI subclass (Class::DBI::mysql) ?

      Table setup script

      #!/usr/bin/perl -w use strict; use DBI; my $dbh = DBI->connect('dbi:SQLite:dbfile=kudra.sqlite',"","", {AutoCo +mmit => 0}); my @statements; { local $/; @statements = split /;/, <DATA>; }; for my $statement (@statements) { print "$statement\n"; eval { $dbh->do($statement); $dbh->commit; }; $@ ||= $dbh->errstr; if ($@) { if ($statement =~ /^drop/i) { warn $@; } else { die $@; }; }; }; $dbh->commit; $dbh->disconnect; __DATA__ create table person ( id INTEGER PRIMARY KEY, name VARCHAR(256) ); insert into person (name) values ("Corion"); insert into person (name) values ("Kudra"); insert into person (name) values ("vroom"); insert into person (name) values ("jcwren");

      Class::DBI script

      #!/usr/local/bin/perl -w package MyCompany::MyProduct::Database; use Class::DBI::Loader; my $loader = Class::DBI::Loader->new( dsn => "dbi:SQLite:dbfile=kudra.sqlite", user => "username", password => "password", namespace => 'MyCompany::MyProduct::Database', relationships => 1); package main; use strict; use warnings; #use MyCompany::MyProduct::Database; use Data::Dumper; my $person = MyCompany::MyProduct::Database::Person->retrieve(3); print Dumper $person;
        Your question provided the solution!

        I checked that Class::DBI::Loader::mysql was up-to-date, but that was installed with Class::DBI::Loader, which I just installed.

        I didn't think of Class::DBI::mysql at all, both because I didn't know about that module in particular, and, secondly, because I already had working code using Class::DBI with a mysql database. However, when I checked, Class::DBI::mysql was not installed, and installing it solved the problem.

        This really ought to be documented somewhere--I didn't see it in Class::DBI::Loader, Class::DBI::Loader::Generic, or Class::DBI::Loader::mysql. Now that I know what I'm looking for, however, I do see it in the buglist.

        It seems odd that installing Class::DBI::Loader::mysql wouldn't also handle Class::DBI::mysql if it is also required, especially since Class::DBI::Loader::* were all included with a Class::DBI::Loader install. Or it could have required that I install the desired Class::DBI::Loader:: module, and at that point install the Class::DBI:: requirement. Corion has suggested that perhaps there were some skipped tests which would have alerted me when installing, and I must confess I never read the installation reports unless there is a fatal error (and, with a MySQL related module, I often don't even read those, as the problem is usually that the database has a password). I guess that's why this is on the bug list.

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://446914]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (9)
As of 2021-12-09 11:20 GMT
Find Nodes?
    Voting Booth?
    R or B?

    Results (36 votes). Check out past polls.