Gääähhnnn... und wieder kein Code (fuer DBD::XBase) ... keine Fehlermeldung (print $DBI::errstr).
Warum macht ihr es einen so schwer euch zu helfen?
#!/usr/bin/perl use strict;
use warnings;
use DBI;
use constant COLUMN_ID => 0;
my $dbf_directory = '/tmp/';
my $user = 'anonymous';
my $data_source_name = 'DBI:XBase:' . $dbf_directory;
my $dbh = DBI->connect($data_source_name)
or die $DBI::errstr;
my $select_sth = $dbh->prepare('SELECT * FROM data WHERE user=?')
or die $dbh->errstr;
my $delete_sth = $dbh->prepare('DELETE FROM data WHERE id=?')
or die $dbh->errstr;
$select_sth->execute($user)
or die $select_sth->errstr;
while(my $row = $select_sth->fetchrow_arrayref) {
print "Deleting row with ID: [", $row->[COLUMN_ID], "]\n";
$delete_sth->execute($row->[COLUMN_ID])
or die $delete_sth->errstr;
}
CAM::DBF
#!/usr/bin/perl use strict;
use warnings;
use CAM::DBF;
use IO::Handle;
use constant COLUMN_ID => 0;
use constant COLUMN_USER => 2;
my $dbf_filename = '/tmp/data.dbf';
my $user = 'anonymous';
my $dbf = CAM::DBF->new($dbf_filename);
foreach my $row_index (0 .. ($dbf->nrecords - 1)) {
my $row = $dbf->fetchrow_arrayref($row_index);
if($user eq $row->[COLUMN_USER]) {
print "Deleting row with ID: [", $row->[COLUMN_ID], "]\n";
$dbf->delete($row_index);
}
}
Wenn man DBD::XBase auf diese Weise verwendet wie ich es oben getan habe, also wenn man 'DELETE FROM ... WHERE ... ' fuer jeden Datensatz einzeln ausfuehrt, ist es extrem langsam.
Das Loeschen geht mit DBD::XBase aber wesentlich schneller als mit CAM::DBF wenn man 'DELETE FROM data WHERE user=?' verwendet.
Ich arbeite normalerweise nicht mit diesen Modulen, wuerde mich jedoch schon mal interessieren warum das der Fall ist.
Und Thomas, erzaehl mir nicht dass du die 'delete' Methode in der CAM::DBF-Dokumentation hast nicht finden koennen. ;-) Steht immerhin direkt im Codebeispiel, ...
Datum: 09.04.2008-20:56
