Thread Class::DBI: Verständnisprobleme (7 answers)
Opened by Taulmarill at 2004-12-21 11:02

Ronnie
 2004-12-21 10:54
#33433 #33433
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Ich wollte mich ein wenig mit Class::DBI beschäftigen. Dazu habe ich mir eine kleine Datenbank 'cdbi' angelegt:
Code: (dl )
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#
# Tabellenstruktur für Tabelle `abteilung`
#

DROP TABLE IF EXISTS `abteilung`;
CREATE TABLE `abteilung` (
`AID` bigint(20) unsigned NOT NULL auto_increment,
`Abteilung` varchar(20) NOT NULL default '',
PRIMARY KEY (`AID`)
) TYPE=MyISAM AUTO_INCREMENT=4;

#
# Daten für Tabelle `abteilung`
#

INSERT INTO `abteilung` VALUES (1, 'Entwicklung');
INSERT INTO `abteilung` VALUES (2, 'EDV');
INSERT INTO `abteilung` VALUES (3, 'Buchhaltung');

# --------------------------------------------------------

#
# Tabellenstruktur für Tabelle `mitarbeiter`
#

DROP TABLE IF EXISTS `mitarbeiter`;
CREATE TABLE `mitarbeiter` (
`MID` bigint(20) unsigned NOT NULL auto_increment,
`Vorname` varchar(20) NOT NULL default '',
`Nachname` varchar(20) NOT NULL default '',
`SID` bigint(20) unsigned NOT NULL default '0',
`AID` bigint(20) unsigned NOT NULL default '0',
PRIMARY KEY (`MID`)
) TYPE=MyISAM AUTO_INCREMENT=3;

#
# Daten für Tabelle `mitarbeiter`
#

INSERT INTO `mitarbeiter` VALUES (1, 'Joe', 'Mustermann', 1, 1);
INSERT INTO `mitarbeiter` VALUES (2, 'Ray', 'Jones', 3, 2);

# --------------------------------------------------------

#
# Tabellenstruktur für Tabelle `standort`
#

DROP TABLE IF EXISTS `standort`;
CREATE TABLE `standort` (
`SID` bigint(20) unsigned NOT NULL auto_increment,
`Standortbezeichnung` varchar(30) NOT NULL default '',
PRIMARY KEY (`SID`)
) TYPE=MyISAM AUTO_INCREMENT=4;

#
# Daten für Tabelle `standort`
#

INSERT INTO `standort` VALUES (1, 'Berlin');
INSERT INTO `standort` VALUES (2, 'Darmstadt');
INSERT INTO `standort` VALUES (3, 'Frankfurt');

Dann das folgende kleine Perl-Skript geschrieben:
Code: (dl )
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
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl

use strict;
use warnings;

package Staff::DBI;
use base 'Class::DBI';
Staff::DBI->connection('DBI:mysql:host="localhost";database="cdbi"', 'webdev', 'secret');
1;

package Staff::mitarbeiter;
use base 'Staff::DBI';
Staff::mitarbeiter->table('mitarbeiter');
Staff::mitarbeiter->columns(All => qw/MID Vorname Nachname SID AID/);
1;

package Staff::abteilung;
use base 'Staff::DBI';
Staff::abteilung->table('abteilung');
Staff::abteilung->columns(All => qw/AID Abteilung/);
Staff::abteilung->has_many(mitarbeiter => 'Staff::mitarbeiter');
1;

package Staff::standort;
use base 'Staff::DBI';
Staff::standort->table('standort');
Staff::standort->columns(All => qw/SID Standortbezeichnung/);
Staff::standort->has_many(mitarbeiter => 'Staff::mitarbeiter');
1;

# Class::DBI end here - main() is beyond this point

package main;
use Data::Dumper;

my @staff = Staff::mitarbeiter->retrieve_all;
print Dumper \@staff;
exit;

Leider erzeugt es nur folgende Fehlermeldung:
Code: (dl )
Can't locate object method "connection" via package "Staff::DBI" at (...) line 8

Ich habe mich an dem Beispiel auf der CPAN-Seite zu Class::DBI orientiert - kann aber keinen Unterschied feststellen, wieso das dortige Beispiel läuft?!

Gruss,
Ronnie

View full thread Class::DBI: Verständnisprobleme