Reinhard: Server error

Hallo!
Habe ein Problem beim einlesen einer Access Datenbank
Ich erhalte folgende Fehlermeldung!
Software error:
Fehler beim Connect:(DBD: db_login/SQLConnect err=-1) at C:/Programme/Apache Group/Apache2/cgi-bin/test2.pl line 15.

In Linie 15
my $dbh = DBI->connect('DBI:ODBC:kunden') or die "Fehler beim Connect:",$DBI::errstr;

bin noch Anfänger in Perl

  1. hallo,

    my $dbh = DBI->connect('DBI:ODBC:kunden') or die "Fehler beim Connect:",$DBI::errstr;

    "perldoc DBI" sollte dir erst einmal ein paar Auskünfte liefern. Das kannst du auch unter Windows in der Eingabeaufforderung aufrufen. Danach solltest du wahrscheinlich das, was du da in die Klammer geschrieben hast, korrigieren: DBI->connect($data_source, $username, $auth, %attr);

    Es kommt auch darauf an, was in den vorangegangenen 15 Zeilen deines Scripts steht. Die Fehlermeldung bezieht sich zwar auf die Zeile, an der das Script nicht mehr weiter kann, aber der eigentliche Grund kann auch schon davor liegen.

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
  2. In Linie 15
    my $dbh = DBI->connect('DBI:ODBC:kunden') or die "Fehler beim Connect:",$DBI::errstr;

    Eigentlich solltest du hier auch den Fehler mitgeteil bekommen, aber ich nehme an das DBI::errstr keine Skalar ist, es ist eigentlich eine Funktion, also probier mal
    my $dbh = DBI->connect('DBI:ODBC:kunden') or die "Fehler beim Connect:",DBI::errstr();

    Ansonsten fehlen, wie schon Christoph erwähnt hat, Parameter.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. In Linie 15
      my $dbh = DBI->connect('DBI:ODBC:kunden') or die "Fehler beim Connect:",$DBI::errstr;

      Eigentlich solltest du hier auch den Fehler mitgeteil bekommen, aber ich nehme an das DBI::errstr keine Skalar ist, es ist eigentlich eine Funktion, also probier mal
      my $dbh = DBI->connect('DBI:ODBC:kunden') or die "Fehler beim Connect:",DBI::errstr();

      Ansonsten fehlen, wie schon Christoph erwähnt hat, Parameter.

      Struppi.

      vielen dank für euere mühe leider ist der Fehler immer noch da
      und ich bin schon am verzweifeln
      hier das ganze Script vielleicht liegt der Fehler ja woanders?
      #! c:/perl/bin/perl

      use strict;
      use warnings;
      use CGI::Carp qw/fatalsToBrowser/;
      use CGI qw(:standard);
      use DBI;

      my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(time);

      $mon++;
      $year += 1900;

      my $dbh = DBI->connect('DBI:ODBC:kunden') or die "Fehler beim Connect:",DBI::errstr();

      my $sqlstatement = "SELECT Tabelle1.Kundennummer, Adresse, Name, Telefonnummer,Tabelle2Kundennummer.Rechnungsbetrag FROM Tabelle1 INNER JOIN Rechnungsbetrag ON Tabelle1.Kundennummer = Rechnungsbetrag.Kundennummer WHERE Tabelle1.Kundennummer = ?";

      my $sth = $dbh->prepare($sqlstatement) or die "Fehler beim prepare",$DBI::errstr;
      $sth->execute(param('Kundennummer')) or die "Could not execute SQL statement...maybe invalid? $DBI::errstr";

      print header(-type => 'text/html'), start_html(-title => 'Auswahl');
      print h3('Ergebnis'), hr();

      my $i = 1;
      print '<table>';
      while (my @row=$sth->fetchrow_array()){
      print '<tr>';
      print '<td>',$_,'</td>' for(@row);
      print '</tr>';

      my $rechnung = 'C:\Dokumente und Einstellungen\lehmann\Eigene Dateien'.$i.'.txt';
      open(DATEI,">$rechnung") or print $!;

      sub format_currency {
      my ($val, $currency, $amount) = @_; $amount = 1 if (!$amount); # Standartmenge 1
      $val =~ tr/,//d; # Kommas weg da evtl. engl. Format
      $val = sprintf "%0.2f", $val*$amount; # Endsumme mit 2 Nachkommastellen
      $val =~ tr/./,/; # Dezimalkomma
      1 while $val =~ s/^(-?\d+)(\d{3})/$1.$2/; # Punkte in 3er Schritten
      return "$val $currency";
      }

      print DATEI "Rechnungsnummer:\t\R125\t\vom: $mday.$mon.$year\n\n\n";
      print DATEI "KdNr: $row[0]\n\n";
      print DATEI $row[4],"\n\n";
      print DATEI $row[1],"\n\n";
      print DATEI $row[2]," ",$row[3],"\n" x 7;
      print DATEI " " x 30;
      print DATEI "Rechnungsbetrag Netto:\t", format_currency($row[5], 'EUR', 1),"\n\n";
      print DATEI "Mit freundlichen Grüßen\n\nTestfirma";
      close DATEI;
      $i++;
      }

      1. Eigentlich solltest du hier auch den Fehler mitgeteil bekommen, aber ich nehme an das DBI::errstr keine Skalar ist, es ist eigentlich eine Funktion, also probier mal
        my $dbh = DBI->connect('DBI:ODBC:kunden') or die "Fehler beim Connect:",DBI::errstr();

        Ansonsten fehlen, wie schon Christoph erwähnt hat, Parameter.

        Struppi.
        vielen dank für euere mühe leider ist der Fehler immer noch da
        und ich bin schon am verzweifeln

        Jetzt wäre es interessant gewesen, ob die Fehlermeldung anders ist und wenn ja, wie sie genau lautet.

        hier das ganze Script vielleicht liegt der Fehler ja woanders?

        my $dbh = DBI->connect('DBI:ODBC:kunden') or die "Fehler beim Connect:",DBI::errstr();

        Der Fehler liegt schon hier. Wo sind die fehlenden Parameter, dei Christoph schon erwähnt hatte?

        print '<table>';
        while (my @row=$sth->fetchrow_array()){
        print '<tr>';
        print '<td>',$_,'</td>' for(@row);
        print '</tr>';

        Das könntest du auch mit Funktionen des CGI Moduls machen:
        my @table_rows;
        while (my @row=$sth->fetchrow_array()){
        push @table_rows, @row;

        ... und später die Ausgabe

        print table( Tr( @table_rows ));

        ..

        Standartmenge 1

        Standard!!!

        Struppi.

        --
        Javascript ist toll (Perl auch!)
  3. Hell-O!

    Habe ein Problem beim einlesen einer Access Datenbank

    Wird dieser Treiber von deinem System unterstützt? Rufe mal folgendes Miniprogramm auf:

    #!/usr/bin/perl -w  
      
    use strict;  
    use DBI;  
      
    print "Content-type: Text/plain\n\n";  
    print join("\n", DBI->available_drivers);
    

    Da müsste ODBC aufgeführt sein. Sollte dem nicht so sein, steht dir der Treiber auch nicht zur Verfügung. Je nach Zugriffsmöglichkeiten kannst du das erforderliche Modul nachladen, siehe hierzu die Liste auf cpan.org.

    Sollte ODBC verfügbar sein, hilft dir möglicherweise die Doku zu DBD::ODBC weiter.

    Siechfred

    --
    Ich bin strenggenommen auch nur interessierter Laie. (molily)
    Siechfreds Tagebuch || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.