Access Datenbank mit Perl auslesen und komplett an eine HTML Seite ausgeben
Torsten
- datenbank
Hallo,
Mein Problem :
ich soll eine Access Datenbank mit Hilfe von einem Perl Script über ODBC auslesen, und sie dann
komplett als HTML an den Browser zurückgeben.
Das ganze läuft auf einem NT 4.0 Server mit IIS4.
Hier mein bisherieges Script, mein Fehler müßte glaube ich in irgendeiner Schleife liegen???
#!/perl/bin/perl.exe
$os = "WINDOWS";
use Win32::ODBC;
$DSN="stamm";
if(!($db=new Win32::ODBC($DSN)))
{
print "Error:" . Win32::ODBC::Error(). "<br>";
}
else
{
$sql_string = "SELECT * FROM Stellenplan";
$db->Sql($sql_string);
if ($db->Sql($sql_string))
{
@FelderNamen = $db->FieldNames();
$spalten = @FelderNamen;
print "<html>";
print "<head>";
print "</head>";
print "<body>";
print "<table border=1 cellspacing=0>";
print "<tr>";
for (@FelderNamen){
print "<th>", $_ , "</th>";
}
print "</tr>";
while ($db->FetchRow())
{
print "<tr>";
undef %Data;
%Data = $db->DataHash();
$rows++;
for ($i = 0; $i < $spalten; $i++)
{
if ($Data{$FelderNamen[$i]} gt '')
{
print "<td>", $Data{$FelderNamen[$i]}, "</td></tr>";
}
else
{
print "<td>Nicht Angegeben</td>";
}
print "</tr>";
}
}
$db->Close();
print "</table>";
print "</body>";
print "</html>";
}
else
{
print "Fehler im SQL Statement";
}
}
Hallo,
Was kriegst du eigentlich für eine FM mit dem o.g. Script?
Unabh. davon hier ein paar gedankliche Ansätze:
if(!($db=new Win32::ODBC($DSN)))
^
Machs besser so:
$db = new Win32::ODBC("DSN=nordwind"); # ggf so:
$db = new Win32::ODBC("DSN=nordwind;");
und beachte:
Anmerkung: Die Rückgabe ist "undef" wenn ein Fehler bei der Objekterstellung auftritt.
http://i-netlab.de/odbc/inhalt.htm
Wenn die DSN (DataSourceName) als System DSN erstellt wurde und der Name im ODBC Setup mit dem Namen im script übereinstimmt, sollte es eigentlich gehen.
Viele Grüße, Rolf
Hallo,
Was kriegst du eigentlich für eine FM mit dem o.g. Script?
Unabh. davon hier ein paar gedankliche Ansätze:
if(!($db=new Win32::ODBC($DSN)))
^Machs besser so:
$db = new Win32::ODBC("DSN=nordwind"); # ggf so:
$db = new Win32::ODBC("DSN=nordwind;");und beachte:
Anmerkung: Die Rückgabe ist "undef" wenn ein Fehler bei der Objekterstellung auftritt.http://i-netlab.de/odbc/inhalt.htm
Wenn die DSN (DataSourceName) als System DSN erstellt wurde und der Name im ODBC Setup mit dem Namen im script übereinstimmt, sollte es eigentlich gehen.
Viele Grüße, Rolf
Ich habe das mal so geändert, aber trotzdem gibt er mir immer nur dies aus:
<html><head></head><body><table border cellspacing=0><tr></tr></table></body></html>
er überspringt also die gesamte Schleife.
Torsten
Hallo,
auf jeden Fall fehlt für das CGI der Content-Type header...
Aehm, geh da mal Schritt für Schritt vor, lass mal den ganzen HTML-Kram weg und versuche das Script zunächst auf der Befehlszeile zum Laufen zu bringen, Fehler bei Objekterstellung abfragen (hängts vielleicht hier schon?), klappt der Zugriff über ODBC überhaupt?! Lies nach dem SQL-Statement erst einmal nur die Feldernamen aus usw....
Good Luck, Rolf
BTW, hast du das ODBC Modul richtig installiert? Tipp: Machs mit PPM, das klappt auf Anhieb.
Es hat geklappt
DANKE!!!
Das neue Script sieht jetzt so aus:
#!/perl/bin/perl.exe
$os = "WINDOWS";
$max_rows = 10;
$rows = 0;
use CGI;
$cgi = new CGI;
use Win32::ODBC;
$DSN="stamm";
$db=new Win32::ODBC("DSN=stamm");
$sql_string = "SELECT * FROM Stellenplan";
@FelderNamen = $db->FieldNames();
$spalten = @FelderNamen;
if(! $db->Sql($sql_string)){
@FelderNamen = $db->FieldNames(); # Feldnamen
$spalten = @FelderNamen; # Spaltenanzahl ermitteln
#Ausgabe der Daten in den Browser (Tabelle)
print $cgi->header,
$cgi->start_html('Ergebnis der SQL - Abfrage'),
$cgi->h2('Ergebnis der SQL - Abfrage'),
chop;
print "<table border cellspacing=0><tr>";
print "<table border cellspacing=0><tr>";
for (@FelderNamen){
print "<th>", $_, "</th>";
}
print "</tr><br>";
# Und nun den Rest der Tabelle
# FetchRow() gibt 0, wenn keine weiteren Daten anliegen
while ($db->FetchRow() and $rows < $max_rows){
print "<tr>";
undef %Daten ;
%Daten = $db->DataHash();
$rows++;
for ($i = 0; $i < $spalten; $i++){
if ($Daten{$FelderNamen[$i]} gt ''){
print "<td>", $Daten{$FelderNamen[$i]}, "</td>";
}
else{
print "<td>-frei-</td>";
}
}
print "</tr>";
}
print "</table>",
$cgi->end_html;
$db->Close() ;
}
else{
print $cgi->header,
$cgi->start_html('Fehler im SQL Statement'),
$cgi->h2('Fehler im SQL Statement'),
$cgi->p,
$db->Error();
}