Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

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.


Comment on Re: Class::DBI::Loader error: Can't locate object method "set_db"
Select or Download Code
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?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (6)
As of 2015-07-30 04:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (269 votes), past polls