DbLookup: Ansicht liefert nicht die aktuellen Daten

  • Zitat


    taurec schrieb:
    Auch bei einem DBColumn kannst du einen Schlüssel angeben


    In meiner Designer Hilfe steht:


    @DbColumn( class : cache ; server : database ; view ; columnNumber )


    Wo kann man da einen Schlüssel angeben? :-?

  • Zitat


    taurec schrieb:
    Sorry, mein Fehler


    Aber du kannst ja noch ein @trim(@Right(Values;"Wert")) machen, dann hättest du auch nur die die mit einem bestimmten Wert anfangen


    Verstehe ich jetzt nicht. Ich hab in der Ansicht nachher bspw. folgende Werte:


    05/ZX/0001
    05/GH/1236
    05/GH/1235
    05/GH/1234
    04/GH/1235
    05/AB/1024
    05/AB/1023
    05/AB/1022


    Aufbau JJ/MM/ZZZZ (J=Jahr, M=Kürzel Mitarbeiter, ZZZZ=Zähler für das Jahr und den Mitarbeiter)


    Wenn ich nun das aktuelle Maximum für das Jahr 2005 und Mitarbeiter GH haben will, müsste 1236 rauskommen. Ich hab das dann einfach mit mehreren Spalten in der Tabelle gelöst. Angezeigt werden momentan nur Dokument mit Zahl aktuellen Jahr. In der ersten Spalte habe ich das Kürzel sortiert. Dann kann ich mir mit @DbLookup einfach die Werte für einen Mitarbeiter holen, bspw. GH. Das Ergebnis wäre dann eine Liste:


    1236:1235:1234


    Dann nehme ich mir das erste Element, zähle es um eines hoch und baue meinen neuen Zähler:


    05/GH/1237

  • Dann sagst du @Trim(@Right(Werte aus dem DBColumn;"05/GH/")) und nimmst davon dann das erste Element.


    Die Formel macht eigentlich nichts anderes als aus deiner kompletten Liste, nur noch das rechts von dem angegebenen Wert zu extrahieren.
    Ist der in einer Zeile nicht drin kommt ein Leertext zurück.
    Die Leertexte entfernt man mit @trim und somit bleiben dann nur noch die Zahlen in den zeilen übrig, in denen am Beginn "05/GH/" steht

  • Zitat


    taurec schrieb:
    Dann sagst du @Trim(@Right(Werte aus dem DBColumn;"05/GH/")) und nimmst davon dann das erste Element.


    Die Formel macht eigentlich nichts anderes als aus deiner kompletten Liste, nur noch das rechts von dem angegebenen Wert zu extrahieren.
    Ist der in einer Zeile nicht drin kommt ein Leertext zurück.
    Die Leertexte entfernt man mit @trim und somit bleiben dann nur noch die Zahlen in den zeilen übrig, in denen am Beginn "05/GH/" steht


    Okay, werde ich mal ausprobieren. In der Hoffnung, dass ich dann die aktuellen Werte aus der Ansicht bekomme. Aber soweit mal: Schankedön. :)

    • Offizieller Beitrag

    also dann muss an der DB irgend etwas anders sein als bei anderen DBs.


    Benutze ich einen DBColumn oder DBLookup, dann werden immer die aktuellen Werte ausgelesen. Kannst Du nicht mal eine neue leere DB anlegen und ein Grundgerüst für die Funktion nachbauen (Nix reinkopieren) und dann probieren, ob es in der neuen DB funktioniert?


    Liegt die DB auf einem Server oder lokal?


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • So, habe das Problem gelöst.


    Die alte Variante mit der Formelsprache:

    Code
    REM {Kuerzel bestimmen};_Name := ADM;_List := @Explode(_Name; " ");_Kuerzel := @If(@Count(_List) = 1; @UpperCase(_Name);@UpperCase(@Left(_List[1]; 1)) + @UpperCase(@Left(_List[@Count(_List)]; 1)));REM {Jahr bestimmen};_Jahr := @Right(@Text(@Year(@Today)); 2);REM {Naechste Nummer bestimmen};_Nummern := @DbLookup("": "NoCache"; ""; "AngebotsnummerView"; _Kuerzel; 2);_Nummer := @If(@Elements(_Nummern) > 0; _Nummern[1]; @IsNull(_Nummern); "1"; _Nummern);_Neue_Nummer := @If(@IsNumber(@TextToNumber(_Nummer)); @TextToNumber(_Nummer) + 1; 1);_Volle_Nummer := @If(@Length(@Text(_Neue_Nummer)) = 1; "000" + @Text(_Neue_Nummer);@Length(@Text(_Neue_Nummer)) = 2; "00" + @Text(_Neue_Nummer);@Length(@Text(_Neue_Nummer)) = 3; "0" + @Text(_Neue_Nummer);@Text(_Neue_Nummer));FIELD Angebotsnummer :=@If(@IsNull(Angebotsnummer) | Angebotsnummer = ""; _Jahr + "/" + _Kuerzel + "/" + _Volle_Nummer; Angebotsnummer);@Success



    Die neue und funktionierende Variante mit Lotus Script.



    Wobei Source.EditMode And Source.IsNewDoc wahrscheinlich doppelt gemobbelt ist.