für folgendes Problem suche ich eine Lösung, wenn es denn eine gibt (gefunden habe ich im Forum nichts. Vielleicht habe ich aber auch nur die falschen Suchbegriffe eingegeben).
Beispiel: In einer Datenbank befindet sich ein Feld A, in dem in einer Combox alternativ z.B. Städte ausgewählt werden können. Nun möchte ich, wenn ich Stadt 1 ausgewählt habe, dass in Feld B vorher festgelegte Informationen wie z.B. die Anzahl der Einwohner oder Sehenswürdigkeiten dieser Stadt erscheinen. Also eine automatisierte Wenn>Dann-Funktion (wenn Berlin in Feld A ausgewählt wird, dann schreibe in Feld B »Liegt an der Spree«)
Geht so etwas und wenn ja, wie?
Mein Dank schon jetzt an die Datenbankexperten, die so etwas wissen.
klassischerweise ist der Lösungskandidat für derlei Prozeduren eine If-Then-Schleife (ggf. noch mit Else-Ergänzung). Ob P10 eine (Programmier-)Ebene zur Verfügung stellt, wo das realisiert werden könnte, weiß ich aber leider nicht.
“If-Then-Else” / “Wenn-Dann” ist keine Datenbank-Struktur.
D.h. es benötigt eine Programmiersprache und nicht nur eine Datenbank …
Dafür müßtest Du sehr tief Einsteigen und programmieren können - falls Papyrus dafür eine Schnittstelle zur Verfügung stellt.
Ein Datenbank-Entwurf dafür ist machbar und auch die Programmierung. Ich wüßte z.B. wie das in SQL und PHP geht. Ob Papyrus die Funktionalität und Schnittstellen mit anbietet weiß ich nicht, denn so tief bin ich noch nicht eingestiegen. Bisher werkel ich noch viel an meiner Hompage (Überarbeitung und SEO)
falls die DB in P10 Abfrage-Strukturen bereithält (auf SQL-Grundlage o.ä.) ließen sich darin schon If-Then-Else-Bedingungen formulieren und dann über Aktualisierung auch die Ergebnisse übertragen, wie es sich @Zweyer wohl wünscht. Ich habe aber keine Ahnung, ob P10 das bereithält.
Vielleicht kann ja @Ulli darüber Auskunft erteilen.
Das lässt sich normal mit einer klassischen SQL-Abfrage mit SELECT und einer WHERE-Clausel gestalten. Soweit ich das aber sehe, gibt es in Papyrus keine Schnittstelle, um SQL-Abfragen absetzen zu können :(, zumal die Daten anscheinend auch nur in einer XML-Struktur abgelegt sind.
ich habe mich mal durch das Handbuch gekämpft, um dazu fündig zu werden (oder eben nicht). Auf S. 370 (38.3.2 “Rechenfeld” Dialogseite), Thema Feld-Berechnungen, ist tatsächlich eine klassische If-Then-Else-Schleife angeführt. Prinzipiell scheinen also mit derlei SQL-Anweisungen Datenmanipulationen möglich. Ich habe jetzt aber nicht recherchiert, ob das spezielle Anliegen von @Zweyer sich auch bewältigen läßt.
Der entscheidende Punkt dürfte sein, auf welche Feldarten solche Anweisungen anwendbar sind. Wenn nicht nur Zahlen- oder Währungsfelder dafür geeignet sind, sondern auch Textfelder, würde es wohl gehen. Dazu müßte sich allerdings das Papyrus-Team äußern. Ich weiß es nicht und will mich da auch nicht nähers einarbeiten, weil ich selbst die DB sowieso nicht nutze. Hab dafür eine eigene, die ich speziell auf meine Bedürfnisse zugeschnitten und durchprogrammiert habe (im Rahmen einer ziemlich komplexen – seit Studienjahren immer wieder erweiterten – Literatur-, Bibliographie- und Zettelkasten-Verwaltung mit allerlei Schnickschnak wie Citavi-u.ä.-Anbindung usw. usf.)
In Feld B wird folgende Formel eingetragen:
IF A : ‘Berlin’ THEN ‘Liegt an der Spree’ ELSE
IF A : ‘Hamburg’ THEN ‘Liegt an der Elbe’ ELSE
IF A : ‘Hannover’ THEN ‘Liegt an der Leine’ …
In Feld C:
IF A : ‘Berlin’ THEN ‘Ist die Hauptstadt’ …
Das ist im Prinzip richtig, würde aber in der Papyrus Base Programmierung nur Fehler produzieren.
Ich würde Feld B folgendermaßen programmieren.
+(if a=‘berlin’ then
+‘Liegt an der Spree’
endif)
Ähnlich dann für andere Städte
Das sieht auf den ersten Blick umständlich aus, ich behalte aber in dieser Form leichter die Übersicht, wenn ich intensivere verschachtelte IF-THEN-Abfragen mache. Bitte immer beachten: bei mehrern Programmierungsbefehlen muss immer ein ‘+’ vor dem Befehl stehen, da der Interpreter sonst meckert!
Die obige Abfrage kann man auch einfacher darstellen, wenn du ausschließlich diese Abfrage machst:
(IF a=‘berlin’ THEN +'Liegt an der Spree)
Mit Klammer kann ‘ENDIF’ weggelassen werden.
Danke Gutie für die Ergänzung. Habe mein IF/THEN-Wissen nur aus dem Papyrus-Handbuch. Da habe ich nichts mit + gefunden. Hast du einen Literaturvorschlag, der da weiterhilft?
Davon habe ich noch nichts bemerkt.
Ich habe bei mir z.B. folgendes in einem Feld der Personen-Tabelle:
IF TRIM(FigurArt) = ‘Protagonist’ THEN ‘1’
ELSE IF TRIM(FigurArt) = ‘Antagonist’ THEN ‘1’
ELSE IF TRIM(FigurArt) = ‘Hauptfigur’ THEN ‘2’
ELSE IF TRIM(FigurArt) = ‘Wichtige Figur’ THEN ‘3’
ELSE IF TRIM(FigurArt) = ‘Nebenfigur’ THEN ‘4’
ELSE IF TRIM(FigurArt) = ‘Statist’ THEN ‘5’
Dies verursacht keinerlei Fehler.
Ein ‘+’-Zeichen ist lediglich dort notwendig, wo das nach dem THEN eingetragene mit dem bereits im Feld vorhandenen verknüpft werden soll.
Zum Beispiel, wenn durch mehrere Abhängigkeitsprüfungen, weitere Daten dazugetragen werden sollen.
Aus Sicht eines Datenbankers/Programmierers gehört an den Schluss ein ENDIF.
Bei Papyrus ist das ENDIF optional.
Übrigens ist ein Klammern mit () nur bei mehreren verschachtelten IF … THEN notwendig.
OK @Waba, da ich immer wieder komplexere Porgrammierungen in meinen Datenbank-Anweisungen habe, habe ich mir das Klammern und das ‘+’ angewöhnt, immer zu setzen. Dann gibt es besimmt keine Fehler.
Denn: wenn man z.B. trim(a+’ 'b) schreibt, gibt es eine Fehler. Vor b mus eben auch ein ‘+’ stehen.
Da mir das sehr häfig aufgefallen ist, dass ein fehlendes ‘+’ Fehler verursacht, mache ich es daher immer.
Übrigens: Ich schreibe meine Befehle immer in eine neuen Zeile und ende auch mit ‘ENDIF’ (Habe ich mal so gelernt…), selbst wenn ich Klammern setze. Das macht es für mich übersichtlicher bei Schachtelungen usw.
Hallo @Gutie ,
Das ist doch klar, du scheinst ein Profi zu sein und als solcher hatte ich es früher ebenfalls so gehalten.
Heutauche halte ich mich bei Papyrus an die hier gegebenen Möglichkeiten. PAP bietet ja nur sehr limitierte Möglichkeiten bezüglich verfügbaren Programmier-Befehlen. Was ja hier für wahrscheinlich über 95% der User auch genügend ist.
Den Verknüpfungsoperator ‘+’ zu verwenden ist in deinem Beispiel natürlich richtig. Mehrere Strings oder Zahlen müssen ja verknüpft werden.
Dass mehrere ELSE verwendet werden können, hatte mich auch erstaunt. Ich hatte das aus irgend einem Datenbankbeispiel erfahren. Mir kommt es wie eine verkapte ‘Select Case’-Anweisung vor. Bietet aber für den wenig Geübten eine klare Lesbarkeit.
Gruss und schreib weiter Professionell.
Das könnte man auch sehr schön über eine Relation lösen. Alle relevanten Städte mit ihren zugehörigen Daten würde man in eine Tabelle „Städte“ stecken und dann im Feld A den Namen der Stadt verknüpfen (anstelle einer Combobox) und im Feld B die zugehörige Information aus der gleichen Verknüpfung ziehen.
Hi glucose, bastele gerade an solchen Relationen. Probleme habe ich mit dem Aufruf der weiteren Zuweisungen. Also speziell der Zuweisung an das Feld B in deinem Beispiel- Könntest du vielleicht hier noch einmal weiterhelfen?
mfg os|<ar