PERL-SQL Anweisungen
Juha
- perl
0 Matti Maekitalo0 Juha
0 Klaus Mock
Hallo Zusammen
Folgend schildere ich mal mein Problem mit SQL-Anweisungen in meinem Perlprogramm.
Je nach dem was in $absenz steht möchte ich verschiedene Einträge in die Datenbank machen.
steht in $absenz kompensieren so funktioniert der folgende code und es entsteht der richtige Eintrag in der Datenbank!
steht in $absenz eintrag so geht das Programm zwar in die ifschleife aber es wird nichts in die Datenbank eingetragen, wieso nicht?
if($absenz eq "Kompensation")
{
# Kompensation in Datenbank eintragen
$db_command = "insert into zeiten
(
pers_id,
def_id,
zeiten_datum,
zeiten_zeit
zeiten_absenz
)
values (
$hash_name->{pers_id},
1,
'$startdatum',
'00:00:00',
2
)";
$add = $dbh->do($db_command);
}
else
{
if($absenz eq "Eintrag")
{
$db_command = "insert into zeiten
(
pers_id,
def_id,
zeiten_datum,
zeiten_zeit
zeiten_absenz
)
values (
$hash_name->{pers_id},
1,
'$startdatum',
'03:00:00',
2
)";
$add = $dbh->do($db_command);
}
}
Könnt ihr mir da weiterhelfen?
Mit freundlichen Grüssen
Juha
use Mosche;
steht in $absenz kompensieren so funktioniert der folgende code und es entsteht der richtige Eintrag in der Datenbank!
steht in $absenz eintrag so geht das Programm zwar in die ifschleife aber es wird nichts in die Datenbank eingetragen, wieso nicht?
Was für eine Fehlermeldung kommt denn? Ich habe beim Überfliegen keinen Fehler gefunden, obwohl du für das Quoting besser die quote Funktion benutzt anstatt sie selber nachzubilden.
use Mosche qw(Matti);
Hi,
Was für eine Fehlermeldung kommt denn? Ich habe beim Überfliegen keinen Fehler gefunden, obwohl du für das Quoting besser die quote Funktion benutzt anstatt sie selber nachzubilden.
Es kommt keine Fehlermeldung, es wird einfach nichts in die Datenbank eingetragen??!
Grüsse Juha
use Mosche;
Was für eine Fehlermeldung kommt denn? Ich habe beim Überfliegen keinen Fehler gefunden, obwohl du für das Quoting besser die quote Funktion benutzt anstatt sie selber nachzubilden.
Es kommt keine Fehlermeldung, es wird einfach nichts in die Datenbank eingetragen??!
Hast du RaiseError bzw. PrintError gesetzt (bei DBI)?
Funktioniert der SQL-Befehl direkt mit der DB (ohne Perl...).
use Tschoe qw(Matti);
Hallo,
Also, erstens empfehle ich Dir, etwas an Deinem Stil, Programme zu schreiben, zu verbessern. Versuche konsequent mit EInrückungen zu arbeiten, um dadurch die Struktur des Programmes besser sichtbar zu machen.
Zweintens möchte ich darauf hinweisen, daß es neben if und else auch ein elsif gibt, welches gerade im vorliegenden Fall hervorragend geeignet ist, das auszudrücken, was auch gemeint ist:
if($absenz eq "Kompensation")
{
# hier der eine Code
}
elsif($absenz eq "Eintrag")
{
# hier der andere Code
}
else # das hier fehlt m.E.
{
mache_eine_Fehlermeldung("$absenz hat keinen passenden Wert ($absenz)");
}
So und nun zu drittens:
$add = $dbh->do($db_command);
Überprüfst Du eigentlich, welchen Wert $add hier erhält?
Wenn nein, dann solltest Du das schleunigst nachholen, und im Fehlerfall ($add ist undef), zumindest während der Entwicklungsphase, die Datenbankfehlermeldung $dbh->errstr bzw. den -fehlercode $dbh->err ausgeben. Und sei es nur in einer Log-Datei, dann am besten mit dem SQL-Statement.
Ohne einem guten Errorhandling ist die Fehlersuche meist eine aussichtslose Sache, deshalb bieten fast alle Sprachen (und auch Bibliotheken) entsprechende Mechanismen, und die sollten auch eifrig genutzt werden.
'Literaturhinweise':
perldoc perlstyle
perldoc perlsyn
perldoc DBI
Grüße
Klaus