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
-
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
-
Klasse, vielen Dank!
-
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? -
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
-
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
-
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.'
-
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
-
Hallo Leo, gibt es tableName() wirklich oder meintest du tableId()? (Bezogen auf dein Posting von 2:31 PM.)
-
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 3 JahrenZuletzt aktiv
- 9Antworten
- 673Ansichten