Re: @Christoph: Fehlfunktion bei get-Befehl - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Claus S. (1671 Beiträge) am Freitag, 15.Februar.2002, 16:17.
    Re: @Christoph: Fehlfunktion bei get-Befehl

      Hallo Christoph,

      keine Panik, es sind jeweils 75 sätze. "keine gute idee" hin oder her, wenn da ein fehler im get ist, bleibt mir nichts anderes über, es sei denn, du hast ne bessere idee.

      hier der betreffende code-schnipsel:

      <perl>
          #------------------------------------------------#
          #--SR       Importieren Datensaetze  Teil 1      #
          #------------------------------------------------#
          sub do_import
             {
              $count_tel = 0;
              $count_fax = 0;
              $count_d1 = 0;
              $count_d2 = 0;
      
              $work_blank = "";         get "Id==*", "../bgd/bgdata_imp0";
              while (get_next("../bgd/bgdata_imp0"))            {             $work_firmnam = "";             $work_firmnam = "$d0_vorname " if ($d0_vorname);             $work_firmnam .= $d0_nachname if ($d0_nachname);         $work_firmnam =~ s/ /\@\@/g; # wg. parser-fehler blanks in @ umwandeln             $work_firmsort = "";             $work_firmsort = uc($d0_nachname) if ($d0_nachname);
                  $work_strasse = "";             $work_strasse = $d0_strasse;             $work_strasse .= " " if ($d0_nr < '10');             $work_strasse .= " " if ($d0_nr > '9' && $d0_nr < '100');             $work_strasse .= $d0_nr;        $work_strasse =~ s/ /\@\@/g; # wg. parser-fehler blanks in @ umwandeln             $work_ortsteil = "";             $work_ortsteil = "$d0_ortsteil " if ($d0_ortsteil);             $work_ortsteil = " Zentrum" if (!$d0_ortsteil);
                  $work_telefon = "";             $work_telefon = $d0_telefon if ($d0_telzusatz eq "");             $work_telefax = "";             $work_telefax = $d0_telefon if ($d0_telzusatz eq "Telefax");
                  $count_tel++ if ($d0_telzusatz eq "");             $count_fax++ if ($d0_telzusatz eq "Telefax");             $count_d1++ if ($d0_telzusatz eq "D1");             $count_d2++ if ($d0_telzusatz eq "D2");             if ($d0_telzusatz eq $work_blank)                {                 put [ "d1_okey", "$d1_okey",                       "d1_firmnam", "$work_firmnam",                       "d1_firmsort", "$work_firmsort",                       "d1_firmnam2", "$d0_zusatz",                       "d1_strasse", "$work_strasse",                       "d1_ort", "$d0_ort",                       "d1_ortsteil", "$work_ortsteil",                       "d1_plz", "$d0_plz",                       "d1_vorwahl", "$d0_vorwahl",                       "d1_telefon", "$work_telefon",                       "d1_telefax", "$work_telefax",                       "d1_email", "$d0_email",                       "d1_url", "$d0_www",                       "d1_kunde", "0",                       "d1_status", "0" ],                  "../bgd/bgdata_imp1";                 }             }
              $msg = "IMP";         $cmd = "do_import_2";        }     </perl>     <perl>     #------------------------------------------------#     #--SR Importieren Datensaetze Teil 2 #     #------------------------------------------------#     sub do_import_2        {         get "d0_telzusatz==Telefax", "../bgd/bgdata_imp0";         while (get_next("../bgd/bgdata_imp0"))            {             $work_firmnam = "";             $work_firmnam = "$d0_vorname " if ($d0_vorname);             $work_firmnam .= $d0_nachname if ($d0_nachname);          $work_firmnam =~ s/ /\@\@/g; # wg. parser-fehler blanks in @ umwandeln
                  $work_strasse = "";             $work_strasse = $d0_strasse;             $work_strasse .= " " if ($d0_nr < '10');             $work_strasse .= " " if ($d0_nr > '9' && $d0_nr < '100');             $work_strasse .= $d0_nr;          $work_strasse =~ s/ /\@\@/g; # wg. parser-fehler blanks in @ umwandeln             get "d1_firmnam==$work_firmnam & d1_strasse==$work_strasse", "../bgd/bgdata_imp1";
                  $pruef_d1_firmnam = $d1_firmnam;             $pruef_work_firmnam = $work_firmnam;             $pruef_d1_strasse = $d1_strasse;             $pruef_work_strasse = $work_strasse;             $pruef_count++;             if (($d1_firmnam eq $work_firmnam) && ($d1_strasse eq $work_strasse))                {                 mod "Id==$_id",[ "d1_firmnam", "$d1_firmnam", "d1_strasse", "$d1_strasse",                                  "d1_telefax", "$d0_telefon", "d1_status", "1" ], "../bgd/bgdata_imp1";                 $msg = "IMP2";                }            }
           # $cmd = "fm_import";           $cmd = "do_korr";        }     </perl>     <perl>     #------------------------------------------------#     #--SR Korrigieren Datensaetze #     #------------------------------------------------#     sub do_korr        {         get "Id==*", "../bgd/bgdata_imp1","ergebnis";         while (get_next("ergebnis"))            {             $d1_firmnam =~ s/\@\@/ /g; # wg. parser-fehler @ wieder in blank wandeln             $d1_strasse =~ s/\@\@/ /g; # wg. parser-fehler @ wieder in blank wandeln
                  mod "Id==$_id", [ "d1_firmnam", "$d1_firmnam", "d1_strasse", "$d1_strasse" ], "../bgd/bgdata_imp1";            }         $cmd = "fm_import";        }     </perl>


      gruss claus


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Claus S. (1671 Beiträge) am Freitag, 15.Februar.2002, 12:48.
    @Christoph: Fehlfunktion bei get-Befehl

      Hallo Christoph,
      mir ist gestern eine Fehlfunktion bei dem get-Befehl aufgefallen:
      ich habe ein Template geschrieben, welches mir Daten einer Adressen-CD, die ich von einer csv-Datei in eine bp-DB kopiert habe, qualifiziert in eine andere Datenbank umsetzt. Kleines Beispiel: in der Quelldatei befinden sich zwei Datensätze, einer mit Telefonnummer, einer mit Faxnummer. In die Zieldatei kommt dann natürlich nur ein Satz. Meine "Schlüsselfelder" sind dabei Name und Strasse+Nr.
      Sobald in einem der beiden Felder durch Blank geteilte Werte vorkommen (z.B. 'Karl Müller' oder 'Hohe Strasse 5') funktioniert der get nicht mehr, d.h. er findet den Satz nicht.
      Claus C. hat mir mit einem Trick geholfen, in dem vorher alle Blanks durch @@ ersetzt wurden und hinterher das Ganze rückgängig gemacht wurde. Aber das kann es ja nicht sein.

      Gruss Claus

     Antworten

    Beitrag von MiKe (31 Beiträge) am Freitag, 15.Februar.2002, 14:21.
    Re: @Christoph: Fehlfunktion bei get-Befehl

      Hallo Claus S. / (und @Christoph)

      ich habe mit dem GET dasselbe Problem (keine Funktion bei _blanks im Feldwert) - gibts da ne bessere Lösung als den Tausch der _blanks ?

      Zwischenzeitlich - kannst Du mir den "Tausch-Trick" auch zukommen lassen ??

      Danke - Gruß Mi.Ke.

     Antworten

    Beitrag von Claus S. (1671 Beiträge) am Freitag, 15.Februar.2002, 14:35.
    Re: @Christoph: Fehlfunktion bei get-Befehl

      hallo MiKe,

      zunächst schreibe ich die daten umgewandelt in die entsprechende datei mit

      $work_feld =~ s/ /\@\@/g;  # blank in @@ umwandeln
      

      dann mache ich meine gets etc.
      und anschliessend lese ich wieder sequentiell die datei und mache alles wieder rückgängig mit

      $work_feld =~ s/\@\@/ /g;  # qq in blank umwandeln
      

      zwar müssig, aber es funzt.

      gruss claus

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 15.Februar.2002, 16:01.
    Re: @Christoph: Fehlfunktion bei get-Befehl

      Autsch & extrem serverbelastend --> 2mal die komplette Datenbank auslesen & neu schreiben!!!!!!! Keine gute Idee!!!! Nicht machen!!!!

      Fragen: a) Wie sieht denn Dein get-Befehl aus? b) Gib mal Link zu ner Beispiel-DB/Seite...

     Antworten

    Beitrag von Claus S. (1671 Beiträge) am Freitag, 15.Februar.2002, 16:17.
    Re: @Christoph: Fehlfunktion bei get-Befehl

      Hallo Christoph,

      keine Panik, es sind jeweils 75 sätze. "keine gute idee" hin oder her, wenn da ein fehler im get ist, bleibt mir nichts anderes über, es sei denn, du hast ne bessere idee.

      hier der betreffende code-schnipsel:

      <perl>
          #------------------------------------------------#
          #--SR       Importieren Datensaetze  Teil 1      #
          #------------------------------------------------#
          sub do_import
             {
              $count_tel = 0;
              $count_fax = 0;
              $count_d1 = 0;
              $count_d2 = 0;
      
              $work_blank = "";         get "Id==*", "../bgd/bgdata_imp0";
              while (get_next("../bgd/bgdata_imp0"))            {             $work_firmnam = "";             $work_firmnam = "$d0_vorname " if ($d0_vorname);             $work_firmnam .= $d0_nachname if ($d0_nachname);         $work_firmnam =~ s/ /\@\@/g; # wg. parser-fehler blanks in @ umwandeln             $work_firmsort = "";             $work_firmsort = uc($d0_nachname) if ($d0_nachname);
                  $work_strasse = "";             $work_strasse = $d0_strasse;             $work_strasse .= " " if ($d0_nr < '10');             $work_strasse .= " " if ($d0_nr > '9' && $d0_nr < '100');             $work_strasse .= $d0_nr;        $work_strasse =~ s/ /\@\@/g; # wg. parser-fehler blanks in @ umwandeln             $work_ortsteil = "";             $work_ortsteil = "$d0_ortsteil " if ($d0_ortsteil);             $work_ortsteil = " Zentrum" if (!$d0_ortsteil);
                  $work_telefon = "";             $work_telefon = $d0_telefon if ($d0_telzusatz eq "");             $work_telefax = "";             $work_telefax = $d0_telefon if ($d0_telzusatz eq "Telefax");
                  $count_tel++ if ($d0_telzusatz eq "");             $count_fax++ if ($d0_telzusatz eq "Telefax");             $count_d1++ if ($d0_telzusatz eq "D1");             $count_d2++ if ($d0_telzusatz eq "D2");             if ($d0_telzusatz eq $work_blank)                {                 put [ "d1_okey", "$d1_okey",                       "d1_firmnam", "$work_firmnam",                       "d1_firmsort", "$work_firmsort",                       "d1_firmnam2", "$d0_zusatz",                       "d1_strasse", "$work_strasse",                       "d1_ort", "$d0_ort",                       "d1_ortsteil", "$work_ortsteil",                       "d1_plz", "$d0_plz",                       "d1_vorwahl", "$d0_vorwahl",                       "d1_telefon", "$work_telefon",                       "d1_telefax", "$work_telefax",                       "d1_email", "$d0_email",                       "d1_url", "$d0_www",                       "d1_kunde", "0",                       "d1_status", "0" ],                  "../bgd/bgdata_imp1";                 }             }
              $msg = "IMP";         $cmd = "do_import_2";        }     </perl>     <perl>     #------------------------------------------------#     #--SR Importieren Datensaetze Teil 2 #     #------------------------------------------------#     sub do_import_2        {         get "d0_telzusatz==Telefax", "../bgd/bgdata_imp0";         while (get_next("../bgd/bgdata_imp0"))            {             $work_firmnam = "";             $work_firmnam = "$d0_vorname " if ($d0_vorname);             $work_firmnam .= $d0_nachname if ($d0_nachname);          $work_firmnam =~ s/ /\@\@/g; # wg. parser-fehler blanks in @ umwandeln
                  $work_strasse = "";             $work_strasse = $d0_strasse;             $work_strasse .= " " if ($d0_nr < '10');             $work_strasse .= " " if ($d0_nr > '9' && $d0_nr < '100');             $work_strasse .= $d0_nr;          $work_strasse =~ s/ /\@\@/g; # wg. parser-fehler blanks in @ umwandeln             get "d1_firmnam==$work_firmnam & d1_strasse==$work_strasse", "../bgd/bgdata_imp1";
                  $pruef_d1_firmnam = $d1_firmnam;             $pruef_work_firmnam = $work_firmnam;             $pruef_d1_strasse = $d1_strasse;             $pruef_work_strasse = $work_strasse;             $pruef_count++;             if (($d1_firmnam eq $work_firmnam) && ($d1_strasse eq $work_strasse))                {                 mod "Id==$_id",[ "d1_firmnam", "$d1_firmnam", "d1_strasse", "$d1_strasse",                                  "d1_telefax", "$d0_telefon", "d1_status", "1" ], "../bgd/bgdata_imp1";                 $msg = "IMP2";                }            }
           # $cmd = "fm_import";           $cmd = "do_korr";        }     </perl>     <perl>     #------------------------------------------------#     #--SR Korrigieren Datensaetze #     #------------------------------------------------#     sub do_korr        {         get "Id==*", "../bgd/bgdata_imp1","ergebnis";         while (get_next("ergebnis"))            {             $d1_firmnam =~ s/\@\@/ /g; # wg. parser-fehler @ wieder in blank wandeln             $d1_strasse =~ s/\@\@/ /g; # wg. parser-fehler @ wieder in blank wandeln
                  mod "Id==$_id", [ "d1_firmnam", "$d1_firmnam", "d1_strasse", "$d1_strasse" ], "../bgd/bgdata_imp1";            }         $cmd = "fm_import";        }     </perl>


      gruss claus

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 15.Februar.2002, 20:36.
    Re: @Christoph: Fehlfunktion bei get-Befehl

      > keine Panik, es sind jeweils 75 sätze. "keine gute idee" hin oder her, wenn da ein fehler im get ist, bleibt mir nichts anderes über, es sei denn, du hast ne bessere idee.
      

      Solange Deine Programme nicht auf einem eigenen Server laufen, solltest Du schon dafür Sorge tragen diesen im Interesse aller nicht unnötig zu beanspruchen...

      Bessere Idee: Klar, das gehört schleunigst verbessert, das darf nicht sein ;-)

      Ich wollte den Workaround garnich haben, sondern meine Frage war wie Dein eigentlicher "get"-Befehle aussieht, also der mit dem die Abfrage klappen _sollte_, aber nicht tut... Und dann wäre ein Link zu der entsprechenden DB auch ganz prima gewesen, damit ich gleich mit der richtigen DB testen kann...

      Hab das nämlich jetzt nachgestellt und kanns (leider & natürlich ;-) ) nich nachvollziehen (hab ich was falsch verstanden?):

      Hier die Abfrage & Datenbank:

      http://baseportal.de/cgi-bin/baseportal.pl?htx=/baseportal/test3/blanktest

      Abfrage:

      get "Name==!Karl\\ Mueller";
      

      und als Ergebnis kommt eben der Eintrag mit "Karl Mueller".......

     Antworten

    Beitrag von MiKe (31 Beiträge) am Samstag, 16.Februar.2002, 17:20.
    Re: @Christoph: Fehlfunktion bei get-Befehl

      Hallo Christoph,

      wie sieht denn der GET Befehl in folgendem Fall aus :
      In einer Variablen steht ein Ausdruck mit keinem oder auch mehreren Blanks. Entsprechend dem Wert der Varuablen gibt es auch ein Datenbankfeld mit diesem Wert - also in der DB gibt es ein Feld NAME ("Karl Mueller") - in der Variablen steht:
      $v = "Karl Mueller";
      get "Name==!$v";  --> so funktionierts nicht !!
      

      Gruß Mi.Ke.

     Antworten

    Beitrag von Sander (8133 Beiträge) am Samstag, 16.Februar.2002, 17:35.
    Re: @Christoph: Fehlfunktion bei get-Befehl

      So gehts:

      $v = "Karl\\ Mueller";
      get "Name==!$v";
      

      Sander

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Samstag, 16.Februar.2002, 18:21.
    Re: @Christoph: keine Fehlfunktion bei get-Befehl ;-)

      Um Sanders Antwort noch ein bisschen zu vertief(schne)en ;-) :

      Leerzeichen sind "Trenner", die die Abfragen voneinander trennen - tauchen Sie in Feldnamen oder Abfragewerten auf, müssen sie deshalb besonders gekennzeichnet werden. In Perl, UNIX & baseportal geschieht dies, indem man ein \ voranstellt. Wäre die Abfrage im HTML-Code würde eins reichen:

      <do action=all Name==!Karl\ Mueller>
      

      Innerhalb des Perl-Codes braucht es _zwei_, weil hier 2 "Parser" (das sind Programme die die Befehle analysieren) am Werk sind: Erst Perl (das wandelt das \\ in ein einfaches \ um) und dann baseportal (das erkennt damit das Leerzeichen als Teil der Abfrage und _nicht_ als Trenner). Hier sieht man das Schritt für Schritt:

      $v="Karl\ Mueller";
      out "v=$v<br>";
      $v="Karl\\ Mueller";
      out "v=$v<br>";
      

      Ausgabe müsste sein (nich getestet ;-) ):

      v=Karl Mueller
      v=Karl\ Mueller

      Eine allgemeine Vorgehensweise, wenn man Variablen an Abfragen übergibt will (und üblicherweise weiss man ja nicht, was da drin ist), ist es, die Leerzeichen da drin zu wandeln und zwar so:

      $v="Karl Mueller";
      $v=~ s/ /\\ /g;
      get "Name==!$v";
      

      Eine andere Möglichkeit ist es, "get" anders aufzurufen, ohne den baseportal-Parameter-Parser zu durchlaufen und zwar so:

      $v="Karl Mueller";
      get ["Name", "==!", $v];
      

      Näheres s. Doku...

      Soooooo, ich hoffe, das Thema ist damit erschöpfend behandelt, ausser Claus S. hat noch etwas anderes entdeckt (einen wirklichen Fehler, ich hoffe nicht! ;-) )... ;-)

     Antworten


     
 Liste der Einträge von 50251 bis 50401:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.06s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!