0

Parametertypen für globale Funktionen

Gibt es irgendwo eine Übersicht über erlaubte Parametertypen in globalen Funktionen? Ich möchte konkret einen Record als Parameter übergeben.

 

Viele Grüße, Nico

9 Antworten

null
    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Nico. Für einen Record mache ich immer so :

    ---

    function getName(me:TABELLENNAME) do
    me.(FELD1+FELD"´2)
    foo.....
    end

    ---

    der Aufruf wäre dann 

    getName(this) bzw. getName(first(select TABELLENNAME where Datum=today()))

     

    Leo

    • Nico_Miller
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Klasse, vielen Dank!

    • GFV
    • Detlef_Stover
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Leo.

    Ich habe dieselbe Frage.
    Da der Tabellenname unbekannt ist, benötige ich die Tabelle selber als den Typ Tabelle, Table oder wie auch immer das heißt.
    Geht das?

    • Hubner_Thomas
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo!

    Mir geht das genauso mit den Tabellen. Bei einer Tabelle kann man den Namen schon wissen, aber wenn es um verschiedene Tabellen geht…

    Beispiel: Es gibt in einer Datenbank db1 eine Anzahl n Tabellen mit Namen Tabelle_1, Tabelle_2,  … , Tabelle_n.

    Bei jeder Tabelle soll in ‚Trigger bei neuem Datensatz‘ eine globale Funktion fn1(this) aufgerufen werden und ggf. über die Tabelle sortieren.

    Mir gelingt es aber nicht, den Tabellennamen zu übergeben oder auszuwerten, so dass dieser im select Befehl verwendet werden kann.

     

    function fn1(me : TABELLE) do

      if (me.FELD) =  BEDINGUNG then

        for i in select TABELLE do

         <tu was du sollst>

        end

      end

    end

    • Leonid_Semik
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Thomas,

    so funktioniert es bei Ninox leider nicht. Ich kann mir, ehrlich gesagt, kein Szenario vorstellen wo ich dieselbe Funktion für unterschidlichen Tabellen verwende. Dafür müssen die Tabellen doch identisch sein. Und wenn die Tabellen identisch sind, dann entspricht das Datenmodell nicht den Normaliesierungsregeln. Möchte aber hier nichr den Oberguru spielen.
    Als workaround kann man sich so etwas vorstellen:
    ----
    function fn1(myTable : text,myRecord:number) do
    switch myTable do
    case "A" :
    if record(Tabelle_1,myRecord).FELD=BEDINGUNG then
    for i in select Tabelle_1 do
    <tu was du sollst>
    end
    end
    case "B" :
    if record(Tabelle_2,myRecord).FELD=BEDINGUNG then
    for i in select Tabelle_2 do
    <tu was du sollst>
    end
    end
    case "C" :
    if record(Tabelle_3,myRecord).FELD=BEDINGUNG then
    for i in select Tabelle_3 do
    <tu was du sollst>
    end
    end
    end
    end

    ---

    der Aufruf sollte dann so sein:

    fn1(tableName(this),number(Nr))

    Die Tabellennamen Kann man mit tableName(this) rausfinden. Natürlich muss man sich den Skript für jede Tabelle wiederholen. 

    Leo

    • Hubner_Thomas
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

    Danke für die schnelle Antwort.

    Wir haben in etlichen Tabellen ein gleich benanntes mit führenden Nullen versehenen Feld für eine Tabellenansicht mit Sortierung wie sie "nicht-IT" Kollegen gefällt.

    Die typische Sortierung, 1, 10, 100, 1000, 10000 bis 10009, 1001, 10010, 1002 .... führt von wieder und wieder zu Beschwerden, wird als 'falsch' betrachtet.

    Die Funktion für Auffüllen bestehender Datensätze mit führenden Nullen muss in allen betroffenen Tabellen eingefügt werden - oder als globale Funktion einmal und nur ein kleiner Funktionsaufruf bei den betroffenen Tabellen.' 

    • Leonid_Semik
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Thomas,

    where es nicht einfacher eine lpad() funktion dafür zu nehmen?

     lpad("1", 5, "0") für "00001"
    lpad("10", 5, "0") für "00010"

     

    Leo

    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Leo, gibt es tableName() wirklich oder meintest du tableId()? (Bezogen auf dein Posting von 2:31 PM.)

    • Hubner_Thomas
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Danke für den Hinweis. Leo.

    Gefordert ist ein update aller Sortierung-Zähler innerhalb einer betroffenen Tabelle, für alle Tabellen einer Datenbank, nach dem Schema: lpad(["10" bis "99"], 2, "0"), lpad (["100" bis "999"], 3, "0"), lpad(["1000" bis "9999", 4, "0") usw.

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 9Antworten
  • 650Ansichten