DB-Abfrage / SELECT Parameter
HP-User
- perl
Salve Forumsleser,
Eine Select-Abfrage macht Probleme. Ich seh natürlich keinen Fehler in der Syntax. :-(
Hier die Konsolen Ein- und Ausgabe:
---------------------------------------------------------------------------
Bitte gesuchte Kundennummer eingeben :100100
DBD::CSV::st execute failed: Can't call method "column" on an undefined value at /usr/local/share/perl/5.10.0/SQL/Statement/Term.pm line 199, <GEN0> line 1.
[for Statement "SELECT * FROM kunden WHERE kd-nummer LIKE '100100'"] at ./EZ-DVP.pl line 486.
---------------------------------------------------------------------------
Perlcode:
%zuordnung=(
kunden => {
file => 'kunden.csv',
col_names => ['kd-nummer', 'kd-datum', 'kd-firma', 'kd-strasse', 'kd-hausnummer', 'kd-plz', 'kd-ort', 'kd-land', 'kd-ansprechpartner', 'kd-telefon', 'kd-fax', 'kd-email'],
},
);
# Verbindung aufbauen
$dbh = DBI->connect("DBI:CSV:", undef, undef, {
# Zeilenseparator
csv_eol => "\x0A",
# Spaltenseparator:
csv_sep_char => ",",
# Verzeichnis mit den Dateien
f_dir => $Bin,
# Zuordnung Dateiname -> Tabelle
csv_tables => \%zuordnung,
# bei Fehlern immer sterben:
RaiseError => 1,
}
) or die($DBI::errstr);
$sth=$dbh->prepare("SELECT * FROM kunden WHERE kd-nummer LIKE '$kdnummer'");
$sth->execute();
print qq($sth)."\n";
$sth->finish();
$dbh->disconnect();
Und ein paar Testzeilen der CSV:
--------------------------------------------------------------------------------
"kd-nummer","kd-datum","kd-firma","kd-strasse","kd-hausnummer","kd-plz","kd-ort","kd-land","kd-ansprechpartner","kd-telefon","kd-fax","kd-email"
100100,20120917,MaxTech,Musterstrasse,11,79576,"Weil am Rhein",D,"Herr Müller",123456,123456,service@maxtech.de
100100,20120917,Testshop,Testweg,13,79618,Rheinfelden,D,"Frau Tester",123456,1234567,test@tester.de
100100,20120917,kjhkjh,lkjlkj,45,78987,ölkölk,D,"Herr Lölle",321,654,654@mnbmn.de
100101,20120917,Blabla,Bluppstr.,654,98765,Dackelburg,D,"Frau Gnies",321321,321321,sfd@dgd.de
100102,20120917,ffgh,fghfh,fghfgh,fhfgh,fghfgh,fghf,fghfhfh,4646,645656,45ghjghjg21ghj
--------------------------------------------------------------------------------
Das $kdnummer hat er in der Fehlerausgabe umgewandelt in die Kundennummer 100100. Das geht. Scheint ein Select problem zu sein? Geht Select bei CSV womöglich gar nicht?
Für Ratschläge dankbar...
Grus HP-User
Hi,
Bitte gesuchte Kundennummer eingeben :100100
DBD::CSV::st execute failed: Can't call method "column" on an undefined value at /usr/local/share/perl/5.10.0/SQL/Statement/Term.pm line 199, <GEN0> line 1.
[for Statement "SELECT * FROM kunden WHERE kd-nummer LIKE '100100'"] at ./EZ-DVP.pl line 486.
Was passiert, wenn Du den Spaltennamen in die passenden Quote-Zeichen setzt? Ich vermute, daß das - als Operator interpretiert wird.
Warum machst Du eine LIKE-Abfrage, wenn Dein Suchmuster gar keine Wildcards (%, _) enthält?
cu,
Andreas
Hi MudGuard
Habs raus bekommen. Bei besagtem DBD::CSV Modul über DBI _darf(!)_ die erste Zuordnungszeile in der CSV-Datei _kein(!)_ "Minuszeichen enthalten. Also nur Wörter in einem Stück und explizit "kleingeschrieben". Du kannsz die Kopfzeile gross schreiben, übergeben wird sie immer nur in kleiner Schreibweise.
Danke und weiter gehts...
Ach, was meintest du mit "LIKE" und "%"? Ich habe hier ne Liste auf der steht:
-Select
-Delete
-Update
-Insert
Wobei ich Insert schon getestet habe - das geht einwandfrei. Sollte ich das Suchen nach der Kundennummer anders machen? Mit Like geht es jedenfalls. Aber wenn es anders besser ist - nur her mit den Tipps :-D
Gruss HP-User