Papyrus Base

Dieses Thema im Forum "Hilfe und Support" wurde erstellt von Andreas J., 20. März 2008.

  1. Andreas J.

    Andreas J. New Member

    Hallo!

    Vielleicht kann mir hier im Forum mal jemand zu folgendem Problem einen Tipp geben.

    In einer Datenbanktabelle habe ich u.a. 2 Felder - nennen wir sie "Städte" und "Länder".
    Folgendes soll passieren: Im Feld "Länder" soll innerhalb eines Datensatzes das Kürzel 'GB' eingetragen werden, wenn der Eintrag in dem Feld "Städte" nicht 'Bremen' oder 'Berlin' lautet.

    Wie das für funktioniert, wenn ich nur einen Begriff nehme, habe ich herausgefunden:
    Ich trage als Rechenfunktion unter Feldeigenschaften folgendes ein:
    IF Städte !== 'Bremen' THEN 'GB' (aber dann wird natürlich bei den Datensätzen mit dem Eintrag 'Berlin' auch 'GB' eingetragen).

    Wie bekomme ich es jetzt hin, dass das sowohl bei 'Bremen' als auch bei 'Berlin' ausgeschlossen wird? Ich habe ein wenig mit Vergleichsoperatoren rumprobiert (OR bzw. XOR, AND), aber funktioniert hat das alles nicht.
    Da ich so gut wie keine Ahnung vom Programmieren habe und mich mit den Termini ziemlich schwer tue, hoffe ich trotzdem, dass meine Frage einigermaßen verständlich ist.

    Andreas
     
  2. dotpap

    dotpap Active Member

    Hallo Andreas J.

    Damit Ostern auch für Dich gut verläuft...;)

    Ich habe Dir eine kleine Datenbank erstellt und lade sie als ZIP-Archiv hoch. (Ich hoffe, ich die Aufgabe richtig verstanden.)
     

    Anhänge:

    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  3. Andreas J.

    Andreas J. New Member


    Ja - prima!
    Genauso meine ich es.
    Herzlichen Dank.

    Gibt es eigentlich irgendwo im Internet eine Seite, auf der solche Datenbankbefehle etwas ausführlicher erklärt werden, auch an Hand von Beispielen?
    Für einen, wie mich, ist die tabellarische Auflistung der Befehle mit den kurzen Erklärungen doch etwas zu wenig, um das dann auch umzusetzen.

    Frohe Ostern und herzliche Grüße
    Andreas
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  4. glucose

    glucose Well-Known Member

    ( IF Staedte == 'Bremen' THEN MISSING ELSE IF Staedte == 'Berlin' THEN MISSING ELSE 'GB')

    Hm, nach meinem Geschmack ist das eine recht komplizierte Logik. Warum nicht einfach so wie folgendes?

    IF NOT (Staedte == 'Bremen' OR Staedte == 'Berlin') THEN 'GB'
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  5. glucose

    glucose Well-Known Member


    Da ist nicht viel Datenbank-spezifisches in Papyrus zu finden. Du brauchst eigentlich nur eine allgemeine Einführung in ein paar Programmiergrundlagen mit Zahlen, Strings, Vergleichsoperatoren etc. Hier gibt es sowas z.B. in englisch für die Sprache Ruby: pine.fm
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  6. dotpap

    dotpap Active Member


    Hallo Andre.

    Deine Formel brilliert - wichtig ist, wir haben beide geholfen.
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  7. glucose

    glucose Well-Known Member

    Also brillant würde ich die Formel nicht nennen, zumal sie nur mit vielen Wiederholungen erweiterbar ist (wenn z.B. noch drei weitere Städte in den Vergleich rein müssen). Aber folgendes wäre u.U. eine elegante Lösung für sagen wir mehr als 3 Städte:
    IF NOT (INSTR('Bremen, Berlin', Staedte)) THEN 'GB'

    (ungetestet, müsste aber gehen)
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  8. Andreas J.

    Andreas J. New Member


    Also, in meiner Datenbank geht es tatsächlich nur um 2 Begriffe, die ausgeschlossen werden müssen (das mit den Städten habe ich als allgemeinverständliches Beispiel konstruiert). Und die Lösungen, die vorgeschlagen wurden, helfen mir. Das ist die Hauptsache.
    Ihr glaubt gar nicht, wie lange ich auf so ein Forum gewartet habe, um gerade für solche Fälle Lösungshilfen zu bekommen.

    Super und Danke
    Das wird mit Sicherheit nicht das letzte Problem sein, für das ich gerade bei Arbeit mit der Datenbank eine Lösung brauche.

    Andreas
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  9. dotpap

    dotpap Active Member



    Hallo Andre.

    Ich habe die die DB „Andreas“ um die Tabelle „StadtName“ - sie besteht aus nur einem Datenfeld „Stadt“ - erweitert.
    Dann eine Relation zum Datenfeld „Staedte“ hergestellt und Deine Formel
    // IF NOT (INSTR('Bremen, Berlin', Staedte)) THEN 'GB' //
    gecheckt. (Weil Du ja mitgeteilt hast, sie sei ungetestet - da hätte ich Nachts 01:00 Uhr auch keine Lust zu gehabt....)

    Sie funktioniert und hat intern bei mir den „Platin-Stempel“ erhalten.;)
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  10. Andreas J.

    Andreas J. New Member


    Übrigens - ich bin von Beruf Pastor! Da verläuft Ostern für mich immer gut. :) :)
    Aber das Osterei, dass Du mir jetzt ins Nest gelegt hast, hat natürlich eine ganz besondere Qualität.

    L.G
    Andreas
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  11. Errol_Flynn

    Errol_Flynn Member

    Moin,

    ich nutze mal diesen Thread für eine Formelfrage.

    Allgemein muß ich sagen, daß ich das sehr schwierig finde ... nunja.

    Also, ich möchte in einem Datenbankformular (für eine Rollenspielcharaktererschaffung) erreichen, daß in einem Feld bestimmte Werte auftauchen, wenn ich im Feld davor einen Wert eingeben habe. Konkret sieht es so aus:
    Wenn ich den Wert "1" eingebe, soll im anderen Feld eine "2" erscheinen.
    Wenn ich den Wert "2" eingebe, soll im anderen Feld eine "2" erscheinen.
    Wenn ich den Wert "3" eingebe, soll im anderen Feld eine "2" erscheinen.
    Wenn ich den Wert "4" eingebe, soll im anderen Feld eine "3" erscheinen.
    Wenn ich den Wert "5" eingebe, soll im anderen Feld eine "3" erscheinen.
    Wenn ich den Wert "6" eingebe, soll im anderen Feld eine "3" erscheinen.
    7=4
    8=4
    9=4
    usw. ...

    Wie kann ich das erreichen?

    Gruß,
    Errol :)
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  12. glucose

    glucose Well-Known Member

    ausgabe = 2 + trunc((eingabe-1) / 3)
     
  13. Errol_Flynn

    Errol_Flynn Member

    Scheint, als hätte ich's:
    IF GES = 1 THEN 2 ELSE IF GES = 2 THEN 2 ELSE IF GES = 3 THEN 2 ELSE
    IF GES = 4 THEN 3 ELSE IF GES = 5 THEN 3 ELSE IF GES = 6 THEN 3 ELSE
    IF GES = 7 THEN 4 ELSE IF GES = 8 THEN 4 ELSE IF GES = 9 THEN 4 ELSE
    IF GES = 10 THEN 5 ELSE IF GES = 11 THEN 5 ELSE IF GES = 12 THEN 5 ELSE
    IF GES = 13 THEN 6 ELSE IF GES = 14 THEN 6 ELSE IF GES = 15 THEN 6 ELSE
    IF GES = 16 THEN 7 ELSE IF GES = 17 THEN 7 ELSE IF GES = 18 THEN 7 ELSE
    IF GES = 19 THEN 8 ELSE IF GES = 20 THEN 8 ELSE IF GES = 21 THEN 8 ELSE
    IF GES = 22 THEN 9 ELSE IF GES = 23 THEN 9 ELSE IF GES = 24 THEN 9 ELSE
    IF GES = 25 THEN 10 ELSE IF GES = 26 THEN 10 ELSE IF GES = 27 THEN 10
    ENDIF

    Gruß,
    Errol :)
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  14. glucose

    glucose Well-Known Member

    Die Formel oben macht das gleiche und ist ein gutes Stück kürzer. Du müsstest sie nur an Deine Variablennamen anpassen: 2 + trunc((GES-1) / 3)
     
  15. Errol_Flynn

    Errol_Flynn Member


    Moin,

    würde ich ja gerne, aber mir wird von Dir ein leerer Beitrag angezeigt ...
    Ansonsten GERNE, HER DAMIT :)


    Gruß und schönen Sonntag,
    Errol
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  16. glucose

    glucose Well-Known Member


    Augen aufmachen! Die Formel steht in der Betreffzeile des leeren Beitrags … ;)
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  17. Errol_Flynn

    Errol_Flynn Member


    Ah, okay ... es klingt sicherlich schwach, wenn ich sage, daß das nicht sehr übersichtlich designed ist, oder? *rotwerd*

    However ... kannst Du mir die Formel auch erklären? Mein Algebra ist ein wenig eingerostet ...

    "2 + trunc((GES-1) / 3)"
    "ausgabe" brauche ich nicht?
    Und kann man Variablen nicht nur im Voreinstellungsfeld benutzen? Spielt das überhaupt eine Rolle? Gibt es eine Seite, ähnlich wie selfhtml.org, wo ich mir sowas gut beibringen kann, so für Doofis?

    Gruß,
    Errol
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  18. glucose

    glucose Well-Known Member


    Da man jeden Beitrag durch Anklicken seines Titels aufruft, dachte ich mir, dass sei auffällig genug … ;)

    trunc() ist eine Funktion, die von einer Dezimalzahl nur den Teil vor dem Komma liefert. Was also genau passiert, zeigt am besten folgende Tabelle:
    GES GES-1 (GES-1)/3 trunc((GES-1)/3) 2 + ...
    ----------------------------------------------------
    1 0 0 0 2
    2 1 0.33 0 2
    3 2 0.67 0 2
    4 3 1.00 1 3
    5 4 1.33 1 3
    6 5 1.67 1 3
    7 6 2.00 2 4
    8 7 2.33 2 4
    9 8 2.67 2 4
    10 9 3.00 3 5
    ----------------------------------------------------


    Nein, es sei denn, Du willst mit dem Ergebnis noch weiter rechnen.

    Nein, auch im Formelfeld oder in Papyrus-Dokumenten in Tabellen-Rechenfeldern oder in Reports in Datenfeldern. Überall wo papyrus etwas rechnen kann.

    Ich kenne keine. Die Papyrus-Hilfe enthält nur eine kurze Beschreibung der Funktionen. Die Verwendung orientiert sich an üblichen Programmiersprachen, wie Basic oder PHP. Du könntest also nach einem Basic- oder PHP-Kurs Ausschau halten und das dort gelernte auf Papyrus übertragen.
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017