Schrift
[thread]3380[/thread]

Probs bei Database-Handle: via Modul



<< >> 4 Einträge, 1 Seite
pktm
 2003-12-01 23:54
#35744 #35744
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!
Habe hier ein Modul, welches eine Verbindung zu meiner DB aufbaut.
Das sieht so aus:
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
use strict;
use DBI;
use DBD::mysql;
require Exporter;

my @ISA = ('Exporter');
my @EXPORT_OK = qw(new user_get_users);
sub new {
   my $dsn = 'DBI:mysql:moorland:localhost';  # datasourcename:  wenn myserver weggelassen wird,
                            # wird standardmäßig localhost verwendet.
   my $attributes = { PrintError => 0, RaiseError => 0, "AutoCommit" => 1, }; # siehe Doku zu DBI
   $pgdb = DBI->connect($dsn, $user, $password, $attributes)
   or main::writeDbhError("Error in connecting to $dsn", die => 1);
 # immer Returncodes und Fehler auswerten!!!
} #new
sub get_res {
# Returns an sorted twodimentional Array: [ Foreach Ressourceid: [ ressourceid, ressourcename, quantity ] ]
 my $self = shift;
 my $userid = shift;

 if (my $dataref = dbselect("SELECT restype, quantity FROM res_distribution WHERE userid=$userid")) {

   foreach my $ressource (@$dataref) {
     $ressource->{'RESNAME'} =
       dbselect("SELECT name AS resname FROM res_types WHERE id=" . $ressource->{'RESTYPE'})->[0]->{'RESNAME'}
           #or die("Fehler, Dem".$db->lasterror);
           or die("Fehler: $pgdb->errstr\n");
   }
   return $dataref;
 } else {
   return;
 }
}


Wenn ich das jetzt im Programm wie folgt aufrufe kommt das hier:
Can't locate object method "get_res" via package "DBI::db" (perhaps you forgot to load "DBI::db"?) at markt.pl line 67.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl
# muss das Verzeichnis für die Module angeben
BEGIN{
   push @INC, 'c:/apache/cgi-bin/moorland/public_html/cgi-bin/';
}
use warnings;
use strict;
use CGI;
use moorlanddb; # <-- das Modul
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
use Data::Dumper;
my $db = new moorlanddb() or die("Couldn't connect to Database\n");
print Dumper( $db );
# Ausgabe:
# $VAR1 = bless( {}, 'DBI::db' );
my $userid = 1;
print $db->get_res($userid) or $db->lasterror; # <-- Zeile 67


Ich verstehe den Fehler nicht so ganz.
Ich habe doch das Objekt $db erstellt, wieso will er jetzt, dass ich das auch noch lade?
Ich mein, das Modul DBI wird doch schon im Modul geladen.
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2003-12-02 00:02
#35745 #35745
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du gibst bei der new Methode kein Objekt zurück!\n\n

<!--EDIT|renee|1070316718-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Relais
 2003-12-02 00:06
#35746 #35746
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Deine Methode new() erzeugt kein Objekt.
Du versuchst aber aus dem (nichterzeugten) Objekt Methoden aufzurufen, das geht nicht.

schreib noch ein
return bless { db => $pgdb }
in die letzte Zeile der new()-Methode
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
pq
 2003-12-02 01:17
#35747 #35747
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
deine new-methode gibt den db-handle zurück. der hat natürlich keine get_res-methode.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< >> 4 Einträge, 1 Seite



View all threads created 2003-12-01 23:54.