Aufzählung in Datenbank

Dieses Thema im Forum "Hilfe und Support" wurde erstellt von blake, 12. April 2008.

  1. blake

    blake Member

    Hilfe. Möchte die Datensätze nach eigenen Kriterien sortieren, so wie nach Datensatznummer, aber 1. nach eigenen Kriterien und 2. nicht alle auf einmal. Jetzt suche ich nach einer Formel, ähnlich wie bei der Erzeugung der Rechnungsnummer über Variablen: Die Formel soll dem ersten (markierten) Datensatz z. B. eine 1 geben, bei jedem weiteren (markierten) dann eins höher zählen, 2,3,4...usw.

    Geht das? Wenn ja wie?

    Schon mal Danke fürs lesen
     
  2. dotpap

    dotpap Active Member



    Hallo blake.

    Mir ist nicht bekannt, dass in BASE das Markieren eines Datensatzes so etwas in Gang setzen kann, wie es Dir vorschwebt.
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  3. blake

    blake Member

    Nein, das markieren nicht, aber markieren und dann "Global ersetzen". Hab ich irgendwie gar nicht erwähnt, man sieht, wie verzweifelt ich war. Bei "Global ersetzen" kann ich ja auch Formeln eingeben, aber manche Funtionen (wie Tabellenzeilen) kann man hier nicht nutzen. Gibts trotzdem eine Lösung?
     
  4. dotpap

    dotpap Active Member

    Hallo blake.

    Du möchtest also den Dialog „Global ersetzen ...“ nutzen, um den Wert eines Datenbankfeldes zu ändern, um dann danach im Datenbestand sortieren zu können?

    Beispiel:
    Gebaude Ort Status Sortierkriterium
    HausX Musterort Vermietet 1
    HausY Musterstadt Vermietet 1
    HausZ Musterdorf Vermietet 1

    Im Beispiel wäre es also das Feld „Sortierkriterium“.
    Die Werte für „Sortierkriterium“ kennst nur Du und sie können sich auch ändern.

    Um zu dieser Tabellen-Anzeige (wie oben dargestellt) zu gelangen könnte man wie folgt vorgehen:

    Über die Suche lässt man sich alle Häuser anzeigen.

    Dann wird Dialog „Global ersetzen ...“ aufgerufen.

    Dort wählt man unter „Setze Feld“ das Datenbankfeld „Sortierkriterium“ aus und hinterlegt es.

    In das Feld „Auf Wert bzw. Ausdruck“ kommt der String ‚1‘.

    Im Options-Bereich „Datensätze“ wird die Option „Alle in Liste“ gewählt.

    Und ist die CheckBox „Vorschau“ aktiv, so sollte man o. g. Darstelung erhalten.

    Zurück zum Dialog „Global ersetzen ...“:
    Du könntest natürlich auch bei geöffnetem Dialog „Global ersetzen ...“ Datensätze markieren und dann weiter im Dialog (wie oben beschrieben) vorgehen.

    Du könntest also nach Übernahme der Änderungen Deinen Datenbestand nach "1" sortieren.

    Kommen wir jetzt der Sache etwas näher?
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  5. blake

    blake Member

    Ja!
    Wenn ich dein Beispiel richtig verstehe, will ich aus

    HausX Musterort Vermietet 1
    HausY Musterstadt Vermietet 1
    HausZ Musterdorf Vermietet 1

    HausX Musterort Vermietet 1
    HausY Musterstadt Vermietet 2
    HausZ Musterdorf Vermietet 3

    machen.

    Bei Datensätzen geht das ja mit der Rechnungsnummer, aber ich wills nachträglich manchen (Hintergrund ist die Sortierreihenfolge von Verkaufsartikeln für einen Onlineshop). Ich frage mich, ob ich dafür jetzt eine "Sortiervariable" erstellen muss und die dann hochzählen lasse (wenn das überhaupt geht) oder ob ich auch im "Global ersetzen" Formelfenster eine Formel eingeben kann, die das für mich erledigt.
     
  6. dotpap

    dotpap Active Member

    Hallo blake.

    Ich denke wir sollten erst einmal etwas trennen.

    „Gobal ersetzen ...“ hilft Werte zu erzeugen und sie in die Datenbank zu schreiben. Das Gute an der Sache ist, dass man sogar noch Bedingungen festlegen kann, unter welchen es zum Ersetzen kommen soll (oder nicht).

    Die Sortierung kann dann nur mit dem dafür vorgesehenen komfortablen Dialog erfolgen.

    Möglicherweise bist Du ja gerade dabei etwas zu konstruieren, was es dir erlauben soll, Gruppen zu bilden.
    Beispiel:
    Bis 20 verkaufte Artikel -> Ersetze zu 1
    Bis 30 verkaufte Artikel -> Ersetze zu 2
    Bis 40 verkaufte Artikel -> Ersetze zu 3

    Würde jetzt in die Sortierung gegangen, böte sich eine Sortiersicht auf die Daten, die sonst so nicht zu erreichen gewesen wäre.

    Schleifen in BASE sind meiner Ansicht nach nicht möglich.
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  7. blake

    blake Member

    Ne, die einzige Bedingung ist die aktuelle Sortierung, also wie die Artikel JETZT in der Liste stehen. Durch Ausbelenden von Datensätzen, alphabetische Sortierung usw. Habe ich die Liste schon soweit angepasst, das die Reihenfolge meinen Wünschen entspricht. z. B.:

    Bezeichnung
    Haus Ahr
    Haus Betadin
    Haus Gerold
    Haus Mis

    Um diese Reihenfolge für die Zukunft festzulegen, brauche ich einen Sortierschlüssel, nachdem Papyrus zukünftig diese Reihenfolge erzeugt:

    ArtNr Bezeichnung
    005 Haus Ahr
    006 Haus Betadin
    007 Haus Gerold
    008 Haus Mis

    Kommen neue Artikel dazu, wiederhole ich die Nummerierung gegebenenfalls, der Witz ist, das ich auf diesem Weg eine andere, als die alphabetische Sortierung erzeugen kann, in dem ich die Formel nur auf einen Teil der Datensätze ausführe und den Startwert selbst bestimme:

    ArtNr Bezeichnung
    001 Zimmer 1
    002 Zimmer 8
    003 Zimmer 11
    005 Haus Ahr
    006 Haus Betadin
    007 Haus Gerold
    008 Haus Mis

    Ich unterstelle Papyrus mal, das es bei der Ausführung von Global ersetzen die Liste von oben nach unten abarbeitet (irgendeine Reihenfolge muss es ja geben) und möchte die Datensätze 1,2,3,usw sortieren. Also ein individuelle Sortierschlüssel, der mir gleichzeitig als Artikelnummer dienen soll.
    Habe es jetzt mal selbst mit LET ArtNr = ArtNr + 1 RETURN ArtNr versucht, bekomme dann aber die Meldung: ...LET ist hier nicht erlaubt, nur öffnende Klammer, Wert oder Funktion.
    Lasse ich LET weg (ArtNr + 1 RETURN ArtNr), kommt die Meldung Operator erwartet statt "RETURN". In der Hilfe steht bezüglich der Möglichkeiten von Global ersetzen aber: Das können so einfache Sachen sein wie "Ersetze in Feld x alle Strings "Verkäufer" durch "Lieferant", aber auch komplexe Bedingungen, da Ihnen in diesem Dialog die gesamten Möglichkeiten von Papyrus' Rechenmöglichkeiten zur Verfügung stehen.. Bekomme ich die Fehlermeldung nun, weil ich die Formel falsch geschrieben habe, oder weil diese Möglichkeit hier nun doch nicht besteht?

    Noch schöner wäre es aber, hierfür keine Variable erzeugen zu müssen, sondern den Dialog alleine rechnen zu lassen (eine solche Variable brauche ich ja sonst nicht). Das was ich will, kann man in jeder Tabellenkalkulation sehen, wenn man in ein Feld eine 1 schreibt, das Feld markiert, und dann über die darunterliegenden Felder zieht. Dann erzeugt die Tabellenkalkulation automatisch eine Nummerierung, 1,2,3,4 usw.
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  8. dotpap

    dotpap Active Member

    Hallo blake.

    Wenn ich in den Eigenschaften von BASE mit Variablen arbeite kommt hin und wieder die gleiche Fehlermeldung vom Formelinterpreter. Immer war eine nicht ganz korrekte Formel daran Schuld! Mit an Sicherheit grenzender Wahrscheinlichkeit wird Deine Formeleingabe irgendwo nicht ganz korrekt sein. Meine bisherigen Erfahrungen mit BASE besagen, dass im Dialog "Global ersetzen ..." die BASE-Rechenfunktionaltät zur Verfügung steht.

    Ich habe Dir mal eine Bilddatei "blake_Sortierung_1" angehängt. Sie zeigt einen Lösungsvorschlag. Reicht das schon für Deine Belange? Ist etwas nicht beachtet worden? Sind Grenzen vom Ganzen feststellbar?

    blake_Sortierung_1.jpg
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  9. blake

    blake Member

    Mensch, danke für deine Mithilfe, aber leider isses das noch nicht:
    Es geht ja eben darum, das ich die laufende Nummer noch nicht habe. Ich will Sie ja ERZEUGEN. Ob die dann eins höher oder niedriger ist, ist dann eigentlich egal.

    Ich habe 1500 Verkaufsartikel, von denen ich ca. 800 im dem Onlineshop stellen möchte. Da müsste ich in jeden Datensatz "von Hand" die nächstehöhere Nummer eingeben...
    Die Artikel haben Nicht-Sortierfähige Datensatznummern, weil ich sie nicht chronologisch nach Eingabe sortieren will. Die HABEN auch schon Artikelnummern, aber zum Teil doppelte, weils bisher egal war, ob der Artikel blau oder rot war, er kostet dasselbe. Für den Onlineshop und die Sortierung braucht jeder Artikel JETZT aber eine eigene (aufsteigende) Nummer.

    Probier bitte nicht weiter, reicht, wenn ich meine Zeit damit verschleuder... Wenn jetzt keiner ein Lösung WEISS, dann gehts schneller, wenn ich alle Datensätze in eine Tabellenkalkulation exportiere, Nummeriere, und wieder importiere. Nur sind dann meine Verknüpfungen weg, das würd ich gern vermeiden, abgesehen von dem Zeitaufwand, denn das geht bei meinem Erfahrungsschatz nicht gleich beim ersten mal gut.
     
  10. dotpap

    dotpap Active Member

    Hallo blake.

    Ich habe versucht im Dialog "Global ersetzen ..." mit einer Formel (die sonst um eins Hochzählt) wenigstens eine laufende Nummer im Datenbankfeld "LfdeNr" quasi zu ersetzen - klappt nicht. Ich kiege hier die gleichen Fehlermeldung wie Du sie auch bekommen hast.
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
  11. blake

    blake Member

    Na, dann mach ich mich morgen mal ans exportieren...

    Wenn ich damit fertig bin, kommt garantiert einer mit der Lösung für das Problem, kennt man ja... :rolleyes:

    Aber dann weiss (hoffentlich) wenigstens der nächste, wie man sich den Aufwand sparen kann.

    Vielen Dank für die Mitarbeit. Ist ja immerhin auch ein Ergebnis, das zwei von zwei probierenden zu keiner Lösung gekommen sind.
     
    Zuletzt von einem Moderator bearbeitet: 2. Mai 2017
    mendel gefällt das.