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
82
83
84
85
86
87
88
89
90
00K
01ADR_L
02UPD
0320120201
0420120115
05ADAT
06Adressen
071048
086
00F
0101
02Key_ADR
031
040
05V
065
07NU1
00F
0102
02Firmenname
030
040
05V
06105
07AN1
00F
0103
02Landesname
030
041
05V
0630
07AN1
00F
0104
02Ort_Zustellung
030
041
05V
0650
07AN1
00F
0105
02Sortiername
030
040
05V
0680
07AN1
00F
0106
02URL
030
041
05V
0680
07AN1
00U
0167
02Vela GmbH
00U
0181
02ARION GmbH
05ARION
00U
01576
02Altes Werk
00U
01961
02ascle
00U
011029
02APEIRON
05
00U
011916
02AAPO
05AAPO-SPA
00U
012042
02Peter Meyer Ern\a25hrung
05Meyer
00U
012218
04Trier
00U
013085
02KAPS GmbH Deutschland
05
00E
use Data::Dumper;
print STDERR qq{DEBUG \n}, q{@spalte = }, Dumper(\@spalte), qq{\n};
2012-02-01T15:01:34 afsmannMit meinem Code und deinen Beispieldatenbanken wird eine komplette SQL erzeugt.da steht "update Adressen set where Key_Adr=5673" d.h. da steht nichts hinter dem set.
QuoteDas Problem ist dieser Code-Block:Außerdem läuft die Schleife 7x durch obwohl 1x doch reicht.
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 }
1 2
my $sth = $dbh->prepare($sql) || die "$DBI::errstr\n"; # SQL-Statement vorbereiten... $sth->execute() || die "$DBI::errstr\n"; # ... und ausführen