User since
2007-06-04
3
Artikel
BenutzerIn
Hallo zusammen,
ich habe gerade ein kleines Programm geschrieben, dass Daten in einen Flate File DB abspeichert. Hier zu verwende ich das Paket DBM, das auf DBI aufbaut, und SQL.
Wenn nun das Programm unerwartet beendet wird und der Benutzer aber Änderungen an der DB vorgenommen hat, gehen diese leider verloren. Komischerweise ist AutoCommit auf 1 gesetzt, denn der befehl
$db->commit();
lieferte mir eine Warning:
Commit ineffective while AutoCommit is on-1 at /usr/local/lib/perl5/site_perl/5.8.8/mach/DBD/File.pm line 407.
Aber wenn mir mein kleines dump Scrript nach einem Absturz die Datei anzeigen soll:
#!/usr/bin/perl -w
use DBI;
$db = DBI->connect("dbi:DBM:");
$db->{RaiseError} = 1;
$sth = $db->prepare("SELECT * FROM ews");
$sth->execute();
$db->disconnect();
Zeigt es nix an, obwohl zuvor der user ein INSERT gemacht hat ... auch die Dateien sind leer:
ews% ls -lah ews.*
-rw-r--r-- 1 den wheel 0B Aug 21 16:24 ews.dir
-rw-r--r-- 1 den wheel 0B Aug 21 16:24 ews.lck
-rw-r--r-- 1 den wheel 1.0K Aug 21 17:28 ews.pag
Ich habe keine Ahnung, was ich machen kann. Von BerkeleyDB kenne ich den Befehl sync , aber diesen gibt es in DBI nicht :(
Hat einer von euch eine Idee, woran es liegen kann ???
Danke für jegliche Hilfe!
Bis denn dann,
Mips
User since
2003-11-28
3645
Artikel
ModeratorIn
Versuch doch einfach mal, DB_File statt des Defaults SDBM_File zu verwenden. Vielleicht verhält es sich besser.