Schrift
[thread]10699[/thread]

Einträge in Datenbank loeschen



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
rooky
 2007-10-31 23:40
#101625 #101625
User since
2007-10-25
38 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen ich habe eine Datendank-Datei in der Einträge gelöscht werden müssen. Sie sieht so aus:


Code: (dl )
1
2
2;;Prof. Dr.-Ing.;;;;Name;;Fachhochschule Kiel;;Fachbereich Bauwesen;;;;;;Lorenz-von-Stein-Ring Haus-nr;;24340 Eckernf&#65533;de;;;;;;;;;;;;;;;;;;;;;;;;
3;;Prof. Dr.-Ing.;;Vorname;;Nachname;;ETH Zrich;;Institut fr Geotechnik;;;;;;H&#65533;ggerberg;;CH-8093 Zrich;;Tel-Nr.;;;;;;Tel-Nr.;;;;;;;;;;;;;;;;

Es wurde ein Skript geschrieben um in die Datenbank Daten einzutragen, zu aktualisieren, zu löschen etc. Die Funktion zum loeschen funtioniert aber nicht, wenn man den Namen einer Person eingibt, der geloescht werden muss passiert nichts, nur die Fehlermeldung
Code: (dl )
Die Datei konnte nicht geöffnet werden
wird angezeigt.

Hier die Funtion zum loeschen
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
read_input();

$field[0] = $query{'id'};
$field[1] = $query{'titel'};
$field[2] = $query{'vorname'};
$field[3] = $query{'name'};
$field[4] = $query{'firma'};
$field[5] = $query{'abteilung'};
$field[6] = $query{'kategorie'};
$field[7] = $query{'vermerke'};
$field[8] = $query{'dienststrasse'};
$field[9] = $query{'dienstort'};
$field[10] = $query{'dienst_tel_1'};
$field[11] = $query{'dienst_tel_2'};
$field[12] = $query{'dienst_mobiltel'};
$field[13] = $query{'dienst_fax'};
$field[14] = $query{'dienst_email'};
$field[15] = $query{'webseite'};
$field[16] = $query{'privat_strasse'};
$field[17] = $query{'privat_ort'};
$field[18] = $query{'privat_tel_1'};
$field[19] = $query{'privat_mobiltel'};
$field[20] = $query{'privat_fax'};
$field[21] = $query{'privat_email'};

#********************************************************************
# Tabellenkopf für die HTML-Ausgabe aller/der gefundenen Einträge
#********************************************************************

$table_head ="<TR BGCOLOR=\"silver\">\n"
        . "<TD NOWRAP>NR</TD>\n"
        . "<TD NOWRAP>TITEL</TD>\n"
        . "<TD NOWRAP>VORNAME</TD>\n"
        . "<TD NOWRAP>NAME</TD>\n"
        . "<TD NOWRAP>FIRMA/INSTITUT</TD>"
        . "<TD NOWRAP>ABTEILUNG</TD>\n"
        . "<TD NOWRAP>KATEGORIE</TD>\n"
        . "<TD NOWRAP>VERMERKE</TD>\n"
        . "<TD NOWRAP>STRASSE</TD>\n"
        . "<TD NOWRAP>ORT</TD>\n"
        . "<TD NOWRAP>TELEFON 1</TD>\n"
        . "<TD NOWRAP>TELEFON 2</TD>\n"
        . "<TD NOWRAP>MOBILTELEFON</TD>\n"
        . "<TD NOWRAP>FAX</TD>\n"
        . "<TD NOWRAP>EMAIL</TD>\n"
        . "<TD NOWRAP>WEBSEITE</TD>\n"
        . "<TD NOWRAP>STRASSE (privat)</TD>\n"
        . "<TD NOWRAP>ORT (privat)</TD>\n"
        . "<TD NOWRAP>TELEFON (privat)</TD>\n"
        . "<TD NOWRAP>MOBILTELEFON (privat)</TD>\n"
        . "<TD NOWRAP>FAX (privat)</TD>\n"
        . "<TD NOWRAP>EMAIL (privat)</TD>\n"
        . "</TR>\n";


sub del_entry_db # ( id )
{
        my $del_id = $_[0];

        open (DATEI, "<adress.db") ||
                die "Die Datei konnte nicht geöffnet werden!\n";
        my @datei = <DATEI>;
        close DATEI;

        open (DATEI, ">adress.db") ||
                die "Die Datei konnte nicht geöffnet werden!\n";

        foreach (@datei){
                chop;
                # extract id
                @entry = split(/;;/, $_);
                if( $entry[0] eq $del_id ) {
                }
                else {
                        print DATEI "$_\n";
                }
                #push @new, [$str];
        }

        close DATEI;
}
Kann einer von euch hier drin einen Fehler entdecken.

Danke im Voraus

P.S. Das ganze Skript steht zur Verfügung falls ihr alles braucht. Ziemlich lang aber
Ronnie
 2007-10-31 23:56
#101626 #101626
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Na ja, von jeder Menge stilistischer Dinge abgesehen, probier besser mal or die statt || die. Und gib auch die eigentliche Fehlermeldung mit aus, die in $! steht. Ansonsten macht es sicher Sinn, ein Modul wie Text::CSV_XS oder noch sinnvoller DBD::CSV zu verwenden!

EDIT: Wo ich mir die Beispieldaten so betrachte: Arbeitest du zufällig für einen Ingenieursdienstleister mit drei Buchstaben?!
rooky
 2007-11-01 00:59
#101627 #101627
User since
2007-10-25
38 Artikel
BenutzerIn
[default_avatar]
Hallo Ronnie und danke für die schelle Antwort. Also das Skript habe ich nicht geschrieben, ein Student vor mir hat das aus einer Zeitschrift abgeschrieben hat man mir erzählt. Aber die Löschfunktion hat nie funktioniert. Ich werde mir die Module angucken, danke für den Tipp.

EDIT: Ich arbeite als studentische Hilfskraft an der Uni ;-)
pq
 2007-11-01 01:28
#101628 #101628
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
sind die beispieldaten anonymisiert?
wenn nicht, bitte nachholen. danke.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
rooky
 2007-11-01 01:38
#101629 #101629
User since
2007-10-25
38 Artikel
BenutzerIn
[default_avatar]
Hallo Ronnie anscheinend muss ich mit den Modulen alles wieder programmieren. Ich habe gerade mit perl angefangen somit musste ich jede paar minute im Forum um Hilfe bitten. Ich weiss ihr seid Hilfbereit aber vielleicht ist dass hier einfacher den Fehler im Skript zu finden. Ich hoffe dass mir jemand helfen kann

Danke
Struppi
 2007-11-01 10:36
#101631 #101631
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Ronny hat dir noch einen viel wichtigeren Tipp gegeben, als das mit den Modulen.
topeg
 2007-11-01 10:39
#101632 #101632
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Ich habe die Funktion mal etwas umgeschrieben, damit sie Meldungen ausgibt, die man nutzen kann.
An sich war der Code in Ordnung, nur sollte man die Module "strict" und "warnings" benutzen. Siehe Wiki:UseStrict
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sub del_entry_db # ( id )
 {
         my $del_id = $_[0];
         my $db_file='adress.db'; # da vertippt man sich nur einmal :)

         warn "Zu löschende ID: $del_id\n"; # < Testausgaben Kann auskommentiert werden.

         open (DATEI, '<', $db_file) ||
                 die "Die Datei \"$db_file\" konnte nicht gelesen werden! Fehler:($!)\n";
         my @datei = <DATEI>;
         close DATEI;
         chomp($datei);

         open (DATEI, '>', $db_file) ||
                 die "Die Datei \"$db_file\" konnte nicht geschrieben werden werden! Fehler:($!)\n";
         foreach my $line (@datei){
                 # extract id
                 my @entry = split(/;;/, $line);
                 if($entry[0] ne $del_id){
                         print DATEI "$line\n";
                 }
                else{ warn "ID gefunden: \"$line\"\n"; } # < Testausgabe kann auskommentiert werden.
         }
         close DATEI;
 }
pq
 2007-11-01 10:55
#101635 #101635
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
topeg+2007-11-01 09:39:49--
Code (perl): (dl )
1
2
         open (DATEI, '<', $db_file) ||
                 die "Die Datei \"$db_file\" konnte nicht gelesen werden! Fehler:($!)\n";

brr. augenkrebs.
Code (perl): (dl )
1
2
3
4
5
         open DATEI, '<', $db_file or
                 die "Die Datei '$db_file' konnte nicht gelesen werden! Fehler:($!)\n";
# oder
         open DATEI, '<', $db_file or
                 die qq#Die Datei "$db_file" konnte nicht gelesen werden! Fehler:($!)\n#;

es sei denn natuerlich, du bist ein backslash-fan. ich jedenfalls nicht (ich war hoechstens frueher
mal fan von slash...)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
topeg
 2007-11-01 11:00
#101636 #101636
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Besserwisser... :-)
rooky
 2007-11-01 11:53
#101641 #101641
User since
2007-10-25
38 Artikel
BenutzerIn
[default_avatar]
Hallo ihr beiden und danke für die schnelle Hilfe. Mit dem backslash habt ihr beide Recht ;-)

Danke nochmal
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2007-10-31 23:40.