perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 22
Click for quality!




11.02.2012 / 18:04

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragDatensätze löschen DBase
Seitenanfang
Hallo,

habe eine DBF-Datei und möchte diese Datensätze löschen.

Wie kann ich das anstellen?

Ich habe es mit CAM::DBF probiert. Da finde ich aber keinen passenden Befehl zum Löschen der Datensätze.

Mit DBI:XBase bin ich bis jetzt noch nichtmal auf die DB gekommen. Hat jemand eine Idee?

Danke Thomas

Datum: 09.04.2008-14:58

Beitragre: Datensätze löschen DBase
Seitenanfang
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

Beitragre: Datensätze löschen DBase
Seitenanfang
Hallo dash,

vielen Dank für die Codebeispiele. Ich hatte es gestern nichtmal geschafft, die DBF-Datei mit XBase auszulesen.

Wir machen ne ganze Menge an Faxmailings mit FritzFax in meiner Firma.

FritzFax hat als Datenbasis eine DBF-Datenbank.

In der stehen die Informationen zu den Mailings.

Wir Drucken nach Beendigung eines Mailings das Journal aus und sichern die DBF-Datenbank.

Dies sind alles Einzelschritte, die ich mit einem Programm erledigen möchte.

Das Programm soll die DBF-Datei auslesen und sortiert nach versandten und nicht versandten Faxen als PDF ausdrucken.

Danach sollen die Daten eventuell in eine Excel-Tabelle geschrieben werden, damit man zur Not noch nach Faxnummern recherchieren kann.

So soll es mal werden.

Grüße Thomas

Datum: 10.04.2008-10:28

-






-
-