User since
2003-08-04
14371
Artikel
ModeratorIn
Bei einem
join muss ein
on genommen werden.
Also [sql]SELECT * FROM Tabell1 JOIN Tabelle2 ON Tabell1.ID = Tabelle2.ID[/sql]
User since
2005-08-17
1420
Artikel
BenutzerIn
Oder wenn das Feld, ueber das gejoined werden soll in beiden Tabellen gleich heisst USING:
[sql]SELECT Tabelle1.Kundennummer, Tabelle1.Name,
Tabelle1.Telefon, Tabelle2.Rechnungsbetrag FROM Tabelle1 JOIN Tabelle2 USING(Kundennummer)[/sql]
Oder du schreibst:
[sql]SELECT Tabelle1.Kundennummer, Tabelle1.Name,
Tabelle1.Telefon, Tabelle2.Rechnungsbetrag
FROM Tabelle2,Tabelle1 WHERE Tabelle2.Kundennummer = Tabelle1.Kundennummer[/sql]
User since
2006-04-07
150
Artikel
BenutzerIn
Hallo
Jetzt bekomme ich folgende Fehlermeldungen
Global symbol "$sth" requires explicit package name at F:/Apache2/cgi-bin/daba71.cgi line 30.
Global symbol "$sqlStatement" requires explicit package name at F:/Apache2/cgi-bin/daba71.cgi line 30.
Global symbol "$sth" requires explicit package name at F:/Apache2/cgi-bin/daba71.cgi line 30.
syntax error at F:/Apache2/cgi-bin/daba71.cgi line 41, near "center>"
(Might be a runaway multi-line ~~ string starting on line 30)
Global symbol "@data" requires explicit package name at F:/Apache2/cgi-bin/daba71.cgi line 51.
Global symbol "$sth" requires explicit package name at F:/Apache2/cgi-bin/daba71.cgi line 51.
Search pattern not terminated at F:/Apache2/cgi-bin/daba71.cgi line 60.
Hier das aktuelle Script:
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
91
92
93
94
95
#! f:/Perl/bin/perl
use strict;
use CGI qw(:standard);
use DBI;
use CGI::Carp qw/fatalsToBrowser/;
my $dbh = DBI->connect('DBI:ODBC:driver=Microsoft Access-Treiber (*.mdb); dbq=Kunden.mdb') or die $DBI::errstr;
my $cgi = CGI->new();
my %params = $cgi->Vars();
print $cgi->header();
if ( exists $params{suchanfrage} ) { &Suche ($cgi, \%params) }
elsif( exists $params{eintrag} ) { &Eintragen($cgi, \%params) }
print $cgi->end_html();
# ------------------------------------------------------------
sub Suche {
my ($cgi, $params) = @_;
my $dbh = &ConnectToDB();
$cgi->start_html('Antwort');
my $sqlStatement = qq~SELECT Tabelle1.Kundennummer, Tabelle1.Name,
Tabelle1.Telefon, Tabelle2.Rechnungsbetrag FROM Tabelle1 JOIN Tabelle2 USING(Kundennummer)
my $sth = &FireSql($dbh, $sqlStatement);
if ($sth->rows < 1) {
print $cgi->p("Keine Daten gefunden");
return;
} # if
print qq~
<center>
<h1>Suchergebnis:</h1>
<hr />
<table border="2">
<tr>
<td width="200"><b>Kundennummer:</b></td>
<td width="200"><b>Adresse:</b></td>
<td width="200"><b>Name:</b></td>
<td width="200"><b>Telefonnummer:</b></td>
<td width="200"><b>Rechnungsbetrag:</b></td>
</tr>\n~;
while( my @data = $sth->fetchrow() ) {
printf qq~
<tr>
<td><b>%s</b></td>
<td><b>%s</b></td>
<td><b>%s</b></td>
<td><b>%s</b></td>
</tr>\n~,
@data[0, 1, 2, 3];
} # while
$sth->finish();
$dbh->disconnect();
} # Suche
# ------------------------------------------------------------
sub Eintragen {
} # Eintragen
# ------------------------------------------------------------
sub ConnectToDB {
my $dsn = "DBI:ODBC:Kunden";
my $dbh = DBI->connect($dsn)
or die "Error: couldn't connect to '$dsn': $DBI::errstr\n";
return $dbh;
} # ConnectToDb
# ------------------------------------------------------------
sub FireSql {
my ($dbh, $sqlStatement, @values) = @_;
my $sth = $dbh->prepare($sqlStatement)
or die "Error: couldn't prepare sql: $DBI::errstr\n$sqlStatement\n";
$sth->execute(@values)
or die "Error: couldn't execute sql: $DBI::errstr\n$sqlStatement\n";
return ($sth);
} # FireSql
# ------------------------------------------------------------
Vielen Danke für eure Hilfe
lolipop 999
User since
2006-11-29
340
Artikel
BenutzerIn
In allen Fehlermeldungen mit 'global symbol' benutzt du eine Variable die du nicht vorher deklariert hast.
Das liegt wohl daran, dass ein '~' am Ende von deinem print() fehlt.
Daher auch der Syntax error nehme ich mal an.
Das ganze wird dir am Ende auch noch gesagt: 'search pattern not terminated', jedenfalls würde ich sagen, dass es auch von dem fehlenden ~ kommt.
MfG PerlProfi
User since
2003-08-04
14371
Artikel
ModeratorIn
my $sqlStatement = qq~SELECT Tabelle1.Kundennummer, Tabelle1.Name,
Tabelle1.Telefon, Tabelle2.Rechnungsbetrag FROM Tabelle1 JOIN Tabelle2 USING(Kundennummer)
muss mit
~; abgeschlossen werden...
my $dsn = "DBI:ODBC:Kunden";
my $dbh = DBI->connect($dsn)
or die "Error: couldn't connect to '$dsn': $DBI::errstr\n";
Wie man richtig zu ner Access-Datenbank verbindet habe ich Dir auch schon gezeigt...
User since
2006-04-07
150
Artikel
BenutzerIn
so jetzt bekomme ich eine weiße Seite
keine errors gar nix
Hier mein Code:
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
91
92
93
94
95
96
97
#! f:/Perl/bin/perl
use strict;
use CGI qw(:standard);
use DBI;
use CGI::Carp qw/fatalsToBrowser/;
my $dbh = DBI->connect('DBI:ODBC:driver=Microsoft Access-Treiber (*.mdb); dbq=Kunden.mdb') or die $DBI::errstr;
my $cgi = CGI->new();
my %params = $cgi->Vars();
print $cgi->header();
if ( exists $params{suchanfrage} ) { &Suche ($cgi, \%params) }
elsif( exists $params{eintrag} ) { &Eintragen($cgi, \%params) }
print $cgi->end_html();
# ------------------------------------------------------------
sub Suche {
my ($cgi, $params) = @_;
my $dsn = "DBI:ODBC:Kunden";
my $dbh = DBI->connect($dsn)
or die "Error: couldn't connect to '$dsn': $DBI::errstr\n";
$cgi->start_html('Antwort');
my $sqlStatement = qq~SELECT Tabelle1.Kundennummer, Tabelle1.Name,
Tabelle1.Telefon, Tabelle2.Rechnungsbetrag FROM Tabelle1 JOIN Tabelle2 USING(Kundennummer)~;
my $sth = &FireSql($dbh, $sqlStatement);
if ($sth->rows < 1) {
print $cgi->p("Keine Daten gefunden");
return;
} # if
print qq~
<center>
<h1>Suchergebnis:</h1>
<hr />
<table border="2">
<tr>
<td width="200"><b>Kundennummer:</b></td>
<td width="200"><b>Adresse:</b></td>
<td width="200"><b>Name:</b></td>
<td width="200"><b>Telefonnummer:</b></td>
<td width="200"><b>Rechnungsbetrag:</b></td>
</tr>\n~;
while( my @data = $sth->fetchrow() ) {
printf qq~
<tr>
<td><b>%s</b></td>
<td><b>%s</b></td>
<td><b>%s</b></td>
<td><b>%s</b></td>
</tr>\n~,
@data[0, 1, 2, 3];
} # while
$sth->finish();
$dbh->disconnect();
} # Suche
# ------------------------------------------------------------
sub Eintragen {
} # Eintragen
# ------------------------------------------------------------
sub ConnectToDB {
my $dsn = "DBI:ODBC:Kunden";
my $dbh = DBI->connect($dsn)
or die "Error: couldn't connect to '$dsn': $DBI::errstr\n";
return $dbh;
} # ConnectToDb
# ------------------------------------------------------------
sub FireSql {
my ($dbh, $sqlStatement, @values) = @_;
my $sth = $dbh->prepare($sqlStatement)
or die "Error: couldn't prepare sql: $DBI::errstr\n$sqlStatement\n";
$sth->execute(@values)
or die "Error: couldn't execute sql: $DBI::errstr\n$sqlStatement\n";
return ($sth);
} # FireSql
# ------------------------------------------------------------
Danke für die Hilfe
lolipop 999
User since
2003-08-04
14371
Artikel
ModeratorIn
[quote=renee,10.12.2006, 16:43]Ja, ich würde sagen, dass es weder
$params{suchanfrage} noch
$params{eintrag} gibt... Deswegen sollte man immer einen
else-Zweig machen...
Probiermal was passiert, wenn Du in der Konsole
skript.cgi suchanfrage=hallo eingibst oder
skript.cgi eintrag=neu...[/quote]
Ich wiederhole mich nur ungerne! Du musst langsam mal anfangen, die Antworten auf Deine Fragen zu posten, sonst bekommst Du bald gar keine Antworten mehr!
User since
2006-04-07
150
Artikel
BenutzerIn
Ja das mit Konsole habe ich ehgemacht
aber ich weiß nicht wie ich hier eine else schleife mache
danke für die hilfe
lolipop 999
User since
2003-08-04
14371
Artikel
ModeratorIn
So wie Du
if und
elsif gemacht hast, machst Du noch ein
else hintendran...
Und wie hast Du es in der Konsole aufgerufen? Und was war das Ergebnis? Lass Dir doch bitte nicht alles "aus der Nase ziehen"!