ich versuch eine Verbindung zu einer Access Datenbank herzustellen.
Grundsätzlich soll es so laufen:
1.Eingabe einer Kudenummer im einem HTML Suchformular
2.Aufruf des Perl-Scripts und Kundennummer in Access Datenbank suchen.
3.Tabellarische Ausgabe und Erstellung einer Rechnung.txt
Errorlog:
[Fri Aug 13 21:53:01 2010] [error] [client 127.0.0.1] [Fri Aug 13 21:53:01 2010] test.pl: Unrecognized escape \\R passed through at D:/Apache2/cgi-bin/test.pl line 36., referer: http://localhost/test.html
[Fri Aug 13 21:53:01 2010] [error] [client 127.0.0.1] [Fri Aug 13 21:53:01 2010] test.pl: Unrecognized escape \\v passed through at D:/Apache2/cgi-bin/test.pl line 36., referer: http://localhost/test.html
[Fri Aug 13 21:53:01 2010] [error] [client 127.0.0.1] [Fri Aug 13 21:53:01 2010] test.pl: DBD::ODBC::st execute failed: [Microsoft][ODBC Microsoft Access Driver] Das Microsoft Jet-Datenbankmodul findet die Eingangstabelle oder Abfrage 'Adressen' nicht. Stellen Sie sicher, dass sie existiert und der Name richtig eingegeben wurde. (SQL-42S02) at D:/Apache2/cgi-bin/test.pl line 12., referer: http://localhost/test.html
[Fri Aug 13 21:53:01 2010] [error] [client 127.0.0.1] [Fri Aug 13 21:53:01 2010] test.pl: [Microsoft][ODBC Microsoft Access Driver] Das Microsoft Jet-Datenbankmodul findet die Eingangstabelle oder Abfrage 'Adressen' nicht. Stellen Sie sicher, dass sie existiert und der Name richtig eingegeben wurde. (SQL-42S02) at D:/Apache2/cgi-bin/test.pl line 12., referer: http://localhost/test.html
#!c:/perl/bin/perl -w
use CGI qw(:standard);
use strict;
use CGI::Carp qw/fatalsToBrowser/;
use DBI;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(time);
$mon++;
$year += 1900;
my $dbh = DBI->connect('DBI:ODBC:db1') or die "Fehler beim Connect:",$DBI::errstr;
my $sqlstatement = "SELECT Adressen.Kundennummer, Adresse, Summe.Rechnungsbetrag FROM Adressen INNER JOIN Summe ON Adressen.Kundennummer = Summe.Kundennummer WHERE Adressen.Kundennummer =?";
my $sth = $dbh->prepare($sqlstatement) or die $DBI::errstr;
$sth->execute (param('kundennummer')) or die $dbh->errstr;
print header(-type => 'text/html'), start_html(-title => 'Auswahl');
print h3('Ergebnis'), hr();my @row = ();
my $i = 1;
print '<table>';
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";
}
while (@row=$sth->fetchrow_array())
{
print '<tr>';print '<td>',$_,'</td>' for(@row);
print '</tr>';
my $rechnung = 'd:\\Apache2\\htdocs\\rechnung'.$i.'.txt';
open(DATEI,">$rechnung") or print $!;
print DATEI "Rechnungsnummer:\t\RE4711\t\vom: $mday\.$mon\.$year\n\n\n";
print DATEI "Kundennummer: $row[0]\n\n";
# print DATEI $row[3],"\n\n";print DATEI $row[2],"\n\n";
#print DATEI $row[1],"\n\n";print DATEI "Telefonnummer: $row[4] \n\n\n\n\n";
#print DATEI $row[2]," ",$row[3],"\n" x 7;
print DATEI "-" x 34 ,"\n";
print DATEI "Rechnungsbetrag:\t", format_currency($row[5], 'EUR', 1),"\n";
print DATEI "-" x 34 ,"\n\n";
print DATEI "Mit freundlichen Grüßen\nIhre Webfirma";
close DATEI;
$i++;
}
print '</table>';
print "</body>\n</html>";
Alles anzeigen
Hoffentlich weiß jemand Rat!