http://qs321.pair.com?node_id=446931


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

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

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;

Replies are listed 'Best First'.
Re^4: Class::DBI::Loader error: Can't locate object method "set_db"
by kudra (Vicar) on Apr 12, 2005 at 11:34 UTC
    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.