Re: Re: Re: Re: Re: Re: Re: Re: Datenbankausgabe-Problem - 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 2Pex (38 Beiträge) am Freitag, 18.Januar.2008, 12:39.
    Re: Re: Re: Re: Re: Re: Re: Re: Datenbankausgabe-Problem

      Mir war anfangs nicht klar was du mit der wiederholten Abfrage meintest.

      Damit ist das Script zum Weinkeller also doch richtig und ich hatte es beim Umschreiben uneffektiv gemacht. Aber jetzt ist ja alles klar, vielen Dank nochmal.


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von 2Pex (38 Beiträge) am Donnerstag, 17.Januar.2008, 12:09.
    Datenbankausgabe-Problem

      Es wird immer nur der erste Eintrag aus der Datenbank gezeigt und das verstehe ich nicht. Eigentlich sollte doch über
      while(get_next "Taschenkunst")
      
      jeder Eintrag der Datenbank angezeigt werden.

      <perl>
      # Schleife starten
      get "", "Taschenkunst";
      while(get_next "Taschenkunst"){
      

      #ID für DB=Taschenkunst zwischenspeichern, damit nachher der Link auf die Detailseite funktioniert
      $IDTEMP=$Id;
      # IDs der mit Relationsfeldern verbundenen Datanbanken holen
      get "Id==$Titel","Taschenkunst";
      get "Id==$Produzent","Produzent";
      get "Id==$Nation","Nation";
      get "Id==$Technik","Taschenkunst";
      get "Id==$Material","Taschenkunst";
      

      #Wechsel der Hintergrundfarbe
      if ($cnt & 1)
         { $col="153"; }
        else
         { $col="255"; }
      

      $cnt=$cnt+1;

      #Ausgabe der Tabellenzeile für aktuellen Datensatz
      out <<EOF;
      

      <tr>

      <td
      style="width: 300px; height: 25px; background-color: rgb(204, 204, $col); vertical-align: center>
      <font face="Verdana" size="1"><b><a href="http://www.baseportal.de/cgi-bin/baseportal.pl?htx=/2pex/taschenkunst/Details&Id==$IDTEMP">$Titel</a></b></font>
      </td>
      

      </tr>
      </table>
      EOF
      }
      </perl>
      

     Antworten

    Beitrag von sebastian (533 Beiträge) am Donnerstag, 17.Januar.2008, 12:29.
    Re: Datenbankausgabe-Problem

      hallo mache mal aus

      while(get_next "Taschenkunst"){
      

      folgendes

      while(get_next("Taschenkunst")){
      

     Antworten

    Beitrag von 2Pex (38 Beiträge) am Donnerstag, 17.Januar.2008, 13:29.
    Re: Re: Datenbankausgabe-Problem

      Leider keine Veränderung. Ich habe als Vorlage den Weinkeller aus der Bib verwendet und so funktiomiert es auch. Beim umschreiben muß ich dann wohl irgendeinen Fehler gemacht haben, aber ich stochere da wirklich im Trüben.

     Antworten

    Beitrag von Sander (8133 Beiträge) am Donnerstag, 17.Januar.2008, 13:30.
    Re: Re: Datenbankausgabe-Problem

      ne, die Schreibweise ohne Klammern geht auch. Man kann in Perl in den meisten Fällen die Klammern bei der Funktion weglassen.

     Antworten

    Beitrag von Sander (8133 Beiträge) am Donnerstag, 17.Januar.2008, 13:28.
    Re: Datenbankausgabe-Problem

      das ist immernoch unfug:

      get "", "Taschenkunst";
      while(get_next "Taschenkunst"){
      

      #ID für DB=Taschenkunst zwischenspeichern, damit nachher der Link auf die Detailseite funktioniert

      $IDTEMP=$Id;# IDs der mit Relationsfeldern verbundenen Datanbanken holen
      get "Id==$Titel","Taschenkunst";
      get "Id==$Produzent","Produzent";
      get "Id==$Nation","Nation";
      get "Id==$Technik","Taschenkunst";
      get "Id==$Material","Taschenkunst";
      

      Id ist eine Zahl, du versuchst einen Titel, Produzent... in der Id abzufragen!!!

      desweiteren immernoch 3 gets auf die Db, dessen Daten du eh schon im originalen Schleifendurchlauf hast.

      Das funktioniert so nicht.
      Es wird nur ein DS angezeigt, weil get_next "Taschenkunst" mit den Abfragen innerhalb der Schleife überschrieben wird. Dort fragst du ja die gleiche db ab. In dem Falle benötigst du beim get... get_next eine Ergebnisangabe. Schau dir den Teil mal in der Doku an.
      Aber nochmal, in dem Falle hier baust du nur ein Speicher/Resourcenfresser vom feinsten ohne das ein ordentliches Ergebnis kommen wird. Wenn du das so startest, dann werden dir die anderen User danken ;)

      Lass die abfragen an Taschenkunst raus und verbinde die anderen Relationen richtig (nicht Id==), dann passt das sicher besser.

     Antworten

    Beitrag von 2Pex (38 Beiträge) am Donnerstag, 17.Januar.2008, 14:20.
    Re: Re: Datenbankausgabe-Problem

      Die Doku hatte ich mir bereits angeschaut, aber mein (erstes) Ergebnis war nicht richtig.

      Nach

      get "Id==*", "Produzent";
      while(get_next("Produzent"))
      {
        out "Produzent: $Produzent<br>";
        get "Titel==$Titel", "Taschenkunst";
        out "Titel: $Titel<br>";
        out "Jahr: $Jahrgang<p>";
      }
      


      wird jedem Produzenten der vorletzte Titel aus der DB Taschenkunst zugeordnet, der letzte Titel hat im Feld "Jahrgang" keinen Eintrag und wird deshalb nicht zugeordnet, was aber auch nicht sein darf.
       
      Produzent: Olsowski
      Titel: Blume
      Jahr: 2006

      Produzent: 2Pex
      Titel: Blume
      Jahr: 2006

      Produzent: arteurope
      Titel: Blume
      Jahr: 2006

      Mir ist schon klar, daß ich die baseportal-Abfragefunktionen nicht wirklich drauf habe, aber mit deiner Hilfe doch sicherlich bald. Und deshalb gleich noch die Frage nach den Relationen. Eigentlich müsste es doch sehr sinnvoll sein eine Relationskette, Nation - Produzent - Produkt zu bilden (wobei die Produkte immer nur einen Produzenten haben)

      Wenn doch diese Weinkellervorlage in derr Bib nicht richtig ist, sollte das irgendwie gekennzeichnet werden als "entwicklungsbedürftig" und der entsprechende Teil, wir kennen ihn ja jetzt, markiert werden.

     Antworten

    Beitrag von Pouraga (1396 Beiträge) am Donnerstag, 17.Januar.2008, 18:34.
    Re: Re: Re: Datenbankausgabe-Problem

      Vermutlich hast du den Begriff relation falsch verstanden, was du dort els Beipiel schreibst sind ganz normale Datensätze. Wenn Blume die einzigste information ist, die es zu dem Titel geben soll, dann ist alles in einer Datenbank schon an seinem richtigen Platz. Selbst wenn mehrere Produzenten den selben Titel produzieren, sollten sich die weitere Inhalt zum Titel doch unterscheiden (sonnst nennt man das Plagiat). Was du meinst ist also eine 1 zu 1 Relation. Das wird Tupel genannt und lässt sich tabellarisch darstellen.

      ID Produzent Titel Jahr
      1 Olsowski Blume 2006
      2 2Pex Blume 2006
      3 arteurope Blume 2006


      EINE Datenbank bringt also schon alles mit was du brauchst um eine eindeutige Relation zwischen diese Daten herzustellen. Wenn hier im Forum von relation gesprochen wird dann ist eine Verbindung von unterscheidlichen Datensätzen gemeint. Diese Notwendigkeit sehe ich bisher nicht bei dir, weil in deinen Ausführungen kein Datenfeld bei dir eine tiefere Ebene benötigt.


      Beispiele:

      get "Produzent==2Pex", "Produzent";
      while(get_next("Produzent"))
      {out "$Titel<br>";}
      ->Alle Titel von 2pex
      

      get "Nation==Deutschland", "Produzent";
      while(get_next("Produzent"))
      {out "$Produzent<br>";}
      ->Alle Produzenten aus Deutschland
      

      usw.

     Antworten

    Beitrag von 2Pex (38 Beiträge) am Donnerstag, 17.Januar.2008, 22:01.
    Re: Re: Re: Re: Datenbankausgabe-Problem

      Also erstmal vielen Dank und es ist natürlich ganz einfach.


      <perl db=DeineDatenbank>
      

      #Kopfzeile der Tabelle ausgeben
      out <<EOF;
      <p>
      <table style="width: 500; text-align: left; table-layout:fixed"; border="0"; cellpadding="0" cellspacing="0" font face="Verdana" color="white" size="1" align="center">
      <tr>
      <td style="width: 150px; height: 25px; background-color: rgb(0, 0, 0); vertical-align: center">
      <font face="Verdana" color=#ffffff size="2"><b>Titel</b></font>
      </td>
      </tr>
      </table>
      EOF
      # Schleife starten
      get "", "DeineDatenbank";
      while(get_next "DeineDatenbank"){
      #ID für DB=DeineDatenbank zwischenspeichern, damit nachher der Link auf die Detailseite funktioniert
      $IDTEMP=$Id;
      

      #Wechsel der Hintergrundfarbe
      if ($cnt & 1)
         { $col="153"; }
        else
         { $col="255"; }
      

      $cnt=$cnt+1;
      out <<EOF;
      

      <table style="width: 500; text-align: left; table-layout:fixed"; border-collapse:collapse"; border="0" cellpadding="0" cellspacing="0"border-collapse:collapse" >
      <tr>
      

      <td
      style="width: 150px; height: 25px; background-color: rgb(204, 204, $col); vertical-align: center; >
      <font face="Verdana" size="1"><b>
      <a href="http://www.baseportal.de/cgi-bin/baseportal.pl?htx=/Anmeldename/event_DeinOrdner/Details&Id==$IDTEMP">$Titel</a>
      </b></font>
      </td>
      </tr>
      </table>
      EOF
      </perl>
      

      Die Tabelleneinträge erscheinen in dem von mir gewünschten look, der Titel ist mit einer Detailsseite verlinkt, (die alle Einträge zu einem Titel anzeigt) und alle Titel werden auch endlich angezeigt. Dies nun so ausführlich, weil ich glaube, daß es denen, die an dieser Stelle haken sonst nicht so einfach verstehen würden.

      So und jetzt nochmal zu den Relationen.
      Das ist schön für den User wenn ein Formular alle Nationen anbietet, ca 270, und das läßt sich nicht über ein Optionsfeld realisieren, ungeschickt wäre in meinem Fall auch ein <form> selbst zu erstellen, denn das ist ja gerade so toll an baseportal, daß man direkt in die Datenbank schreibt.

      Jemand der im Zuge des nicht ankommen wollenden Aufschwungs z.B. nach Schweden zieht, würde für jeden einzelnen Eintrag nun die Nationalität neu eintragen, sind wir ehrlich - würde er nicht, eine inkonsistente Datenbank wäre die Folge. Wie wichtig dies nun für mein Projekt ist, sei dahingestellt, aber es wäre doch ganz bestimmt richtiger hier eine Relation einzubauen. Lasse ich den code so, wie er jetzt ist und verbinde die Datenbank über ein Relationsfeld mit einer Datenbank "Nationen" in der dann alle Länder als Einzeleinträge eingetragen sind,erscheint nicht etwa der ausgewählte Ländername, sondern nur eine Zahl, für Albanien 1 und für Zambia 270. Und jetzt meine Frage: Wie programmiert man das richtig? Oder geht das etwa mit baseportal nicht effektiv?

     Antworten

    Beitrag von Pouraga (1396 Beiträge) am Donnerstag, 17.Januar.2008, 22:43.
    Re: Re: Re: Re: Re: Datenbankausgabe-Problem


      >Jemand der im Zuge des nicht ankommen wollenden Aufschwungs z.B. nach Schweden zieht, würde für jeden einzelnen Eintrag nun die Nationalität neu eintragen, sind wir ehrlich - würde er nicht, eine inkonsistente Datenbank wäre die Folge.
      

      Und nu stellen wir uns vor das ihn jemand unter der alten Nationalität finden will, weil er noch nichts von dem Umzug weiss. Dann müsste die alten Einträge in der DB bleiben und nur die aktuellen angezeigt werden mit einer History.

      Wie du es Ausgibst ist deine Sache. Nur halte die Datenbank simpel und gefüllt. ;)


      Die Zahl ist die Id des Eintrages in der anderen datenbank, damit muss man eine neue Abfrage machen um an den Inhalt zu kommen.

      Du kannst dir auch ruhig eine Formular selber basteln, und dort in das option feld eine auswahl aus einer anderen DB integrieren. Aber schreib dann den Namen des Landes z.B. direkt in die Datenbank. Das verzögert zwar das selten genutzte Formular, aber beschleunigt die Ansicht. Vor allem wenn mehrere Einträge geichzeit angezeigt werden sollen, multipliziert sich das.

      Wenn sich denn doch mal eine schreibweise einer Nationalität ändern sollt mach dir ein kleines template mit ->mod "Nationalität==alte",["Nationalität","neue"]

      Oder mache es einfach wie du willst ;)

     Antworten

    Beitrag von 2Pex (38 Beiträge) am Donnerstag, 17.Januar.2008, 23:04.
    Re: Re: Re: Re: Re: Re: Datenbankausgabe-Problem

      Jou,jou .. aber

      get "Id==$Nation","Nation"; 
      

      so hatte ich es und Sander schreibt: "...verbinde die anderen Relationen richtig (nicht Id==)..."

      Ja wie denn dann?
      Nur das wir uns verstehen, so funktioniert es, aber möglicherweise zu resorcenfressend und laut Sander einfach nicht richtig.

     Antworten

    Beitrag von Sander (8133 Beiträge) am Donnerstag, 17.Januar.2008, 23:46.
    Re: Re: Re: Re: Re: Re: Re: Datenbankausgabe-Problem

      Resourcenfressend ist die Abfrage des gleichen DS aus der gleichen DB innerhalb der Schleife.
      Hattest du das Feld Nation als Relationsfeld angelegt? Dann zieh ich meine Aussage zu dieser DB zurück. Dann muß die in form von Id==Nation geholt werden.

     Antworten

    Beitrag von 2Pex (38 Beiträge) am Freitag, 18.Januar.2008, 12:39.
    Re: Re: Re: Re: Re: Re: Re: Re: Datenbankausgabe-Problem

      Mir war anfangs nicht klar was du mit der wiederholten Abfrage meintest.

      Damit ist das Script zum Weinkeller also doch richtig und ich hatte es beim Umschreiben uneffektiv gemacht. Aber jetzt ist ja alles klar, vielen Dank nochmal.

     Antworten


     
 Liste der Einträge von 11400 bis 11550: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.10s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!