Klaus Mock: Datenbank mit SQL abfragen und mit Perl ausgeben + leere datensätze

Beitrag lesen

Hallo,

Zuerst ein paar Anregungen:
Zeile 3:
$^O liefert den OS-Name (mehr oder weniger, für Plattform-Abfragen ist das meist aber genug). Außerdem brauchst Du $os nirgendwo.

Zeile 8 - 27:
Warum einfach, wenns kompliziert auch geht?
In Zeile 32 bindest Du CGI.pm ein, damit kannst du eigentlich die CGI-Parameter viel einfacher einlesen (Funktion param). Und dann hast Du alles noch in %FORM zusammengeklaubt, und in den Zeilen 24-27 werden nochmlas extra Skalare eingeführt. Ziemlich umständlich.

BTW.: Variablen  in GROSSBUCHSTABEN machen es nicht unbedingt einfacher, Deinen Code zu lesen.

Zeile 37 - 62:
Auch nicht gerade übersichtlich, wie Du den Connect generierst.
<vorschlag>
my($dnsstring,$sql_string);
if ($cgi->param('dbank') eq "stamm")
{
   $dnsstring="stamm";
   $sql_string = "SELECT * FROM Stellenplan";
}
else
{  
$dnsstring="DSN=d_baan;UID=read;PWD=read;";
  $sql_string = "SELECT BEZ1, BEZ2 FROM tiitm001101 WHERE artikel LIKE '001%'";
}

$db = new Win32::ODBC($dnsstring))
or ExitWithError("Fehler beim Verbinden mit $dnsstring\nFehler: ". Win32::ODBC::Error() ."\n");
</vorschlag>
('ExitWithError' wäre eine neue Funktion, die noch zu implementieren ist.)

So jetzt geb' ich auf, was dann noch kommt, ist ziemlich verwirrend :-(, warum Du so viele Connects Du machst, ist mir einfach schleierhaft.

So nun zu Deiner eigentlichen Frage.
Gib' den Weiterbuttun einfach nur Dann aus wenn Fetchrow nach dem letzten angezeigten Datensatz noch entwas zurückliefert:

<vorschlag>
while ($db->FetchRow() and $rows < $max_rows)
     {
     #Ausgabe des Datensatzes
     }

print "<input type="submit" name="submit" value="weiter">" if $db->FetchRow();

</vorschlag>

Aber über die Effizenz und die Struktur Deines Scripts solltest Du Dir schon noch Gedanken machen.
Du machst z.B:
  $db = new Win32::ODBC("DSN=d_baan;UID=read;PWD=read;");
  if( ! ($db = new Win32::ODBC("DSN=d_baan;UID=read;PWD=read;")))
ISt Doch eigentlich doppelt gemoppelt. zweimal hintereinander den gleichen Connect. Wozu? 'new Win32::ODBC' habe ich 12 mal gefunden. Einmal reicht doch allemal.

Grüße
  Klaus