Thread Flat-ASCII in MySQL [Update] (15 answers)
Opened by afsmann at 2012-02-01 09:16

GwenDragon
 2012-02-02 12:07
#155825 #155825
User since
2005-01-17
14760 Artikel
Admin1
[Homepage]
user image
2012-02-01T15:01:34 afsmann
da steht "update Adressen set where Key_Adr=5673" d.h. da steht nichts hinter dem set.
Mit meinem Code und deinen Beispieldatenbanken wird eine komplette SQL erzeugt.
Wie hier:
update Adressen set Firmenname='Velag Pharma GmbH' where Key_ADR=67

Quote
Außerdem läuft die Schleife 7x durch obwohl 1x doch reicht.
Das Problem ist dieser Code-Block:
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
for ( my $i = 1 ;
            $i <= @spalte ; $i++ )    # Nochmal alle Spalten durchgehen
        {
            if ( $spkey[$i] != 0 && $sref->[$i] ne "" ) # Wenn Primärschlüssel
            {
                if ( $sptyp[$i] eq "N" )                # Wenn numerisch...
                {
                    $sql .= $spalte[$i] . "=" . $sref->[$i] . " and ";
                }       # dann anhängen "<spaltenname>=<wert> and "
                else    # ansonsten
                {
                    $sql .= $spalte[$i] . "='" . $sref->[$i] . "' and ";                    
                }       # anhängen "<spaltenname>='<wert>' and "
            }

            $sql =~ s/ and $//
              ;    # Am Ende ist hinten ein " and " zu viel - das wird gelöscht

            print $sql. "\n";
            my $sth = $dbh->prepare($sql) || die "$DBI::errstr\n";    # SQL-Statement vorbereiten...
            $sth->execute() || die "$DBI::errstr\n";    # ... und ausführen
        }

Schau mal Zeile 4 des Blocks an.
Wenn es ein Primärschlüssel ist, werden mehrere Bedingungen ans WHERE angehängt, das ist wohl so gewollt.
Dann wird der if-Block verlassen und das SQL ausgegeben bzw. in der Datenbank ausgeführt.
Das führst du aber für jede Spalte aus.

ich tippe mal drauf, dass du
Code (perl): (dl )
1
2
my $sth = $dbh->prepare($sql) || die "$DBI::errstr\n";    # SQL-Statement vorbereiten...
$sth->execute() || die "$DBI::errstr\n";    # ... und ausführen
außerhalb der for-Schleife ausführen willst.

View full thread Flat-ASCII in MySQL [Update]