HP-User: DB-Abfrage / SELECT Parameter

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

  1. 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

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. 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