Entwickler-Ecke
Datenbanken - Interbase: function zur Formatierung?
dirkil2 - Mo 27.12.04 23:06
Titel: Interbase: function zur Formatierung?
Ich habe in einer Tabelle eine Spalte mit einer Jahreszahl und eine Spalte mit einer Kalenderwoche. Ich will in einem Grid statt in 2 Spalten nur eine Spalte anzeigen und zwar im Format JJJJ-WW und das Ganze sortierbar machen. Die Kalenderwoche (KW) ist ein Integer und wenn ich beide Spalten einfach konkateniere mit
SELECT JAHR||'-'||KW AS COL1 FROM ...
dann klappt das mit dem Sortieren nicht, da zB 2004-41 vor 2004-7 wäre. Wenn es eine Formatierungsfunktion gäbe derart
SELECT JAHR||'-'||Format(KW,2) AS COL1 FROM ...
dann würde ich 2004-07 und 2004-41 erhalten, was richtig sortiert würde. Bin ich zu blind oder gibt es sowas nicht.
Falls es so eine Funktion nicht gibt, komme ich wohl nicht drum herum, eine UDF zu schreiben.
Udontknow - Di 28.12.04 09:26
Hallo!
In der IB_UDF.dll ist bereits die Funktion "lpad" enthalten, die dir weiterhilft, du musst sie nur entsprechend registrieren (siehe "ib_udf.sql").
Edit: Ich habe Firebird installiert, aber ich denke, das sollte auch bei dir vorhanden sein.
Cu,
Udontknow
dirkil2 - Di 28.12.04 12:26
@Andreas
Wie immer - perfekte Antwort. Genau was ich gesucht habe. Danke!
Leider habe ich Probleme, das zum Laufen zu bekommen. Ich habe das ib_udf.sql Skript ausgeführt und in IBExpert kann ich die UDFs auch sehen.
Wenn ich aber
select LPAD(KW,2,'0') from <tbl> ausführen möchte bekomme ich folg. Fehlermeldung:
Invalid token.
invalid request BLR at offset 63.
function LPAD is not defined.
module name or entrypoint could not be found.
Ich nehme an, er findet die dazugehörige DLL nicht. Ich habe schon versucht, sie in WINDOWS\system32 zu kopieren oder ins Wurzelverzeichnis von Firebird. Leider ohne Erfolg.
Was mache ich falsch?
Udontknow - Di 28.12.04 12:51
Was für eine Version nutzt du denn? Benutzt du Firebird?
Schau dir mal im IBExpert die in der DB registrierte UDF an, achte auf Groß-/Kleinschreibung des Module Entry Points. Bei mir ist er "IB_UDF_lpad". Die DLL muss bei Firebird im UDF-Verzeichnis sein.
Edit: Du musst das SQL-Skript in jeder DB laufen lassen, in der du die UDF nutzen möchtest.
Cu,
Udontknow
dirkil2 - Di 28.12.04 13:37
Zitat: |
Was für eine Version nutzt du denn? Benutzt du Firebird? |
Ich benutze sowohl Interbase 7.1 als auch Firebird 1.5.2. Dieses Problem muss ich aber für Firebird lösen.
Zitat: |
Schau dir mal im IBExpert die in der DB registrierte UDF an, achte auf Groß-/Kleinschreibung des Module Entry Points. Bei mir ist er "IB_UDF_lpad".
|
So heißt sie auch bei mir.
Zitat: |
Die DLL muss bei Firebird im UDF-Verzeichnis sein. |
Im UDF Verzeichnis sind bei mir zwei DLLS:
fbudf.dll und
ib_udf.dll. Letztere sollte wohl den Code enthalten.
Zitat: |
Edit: Du musst das SQL-Skript in jeder DB laufen lassen, in der du die UDF nutzen möchtest.
|
Ich habe nur eine Datenbank momentan; daran kann es also nicht liegen.
Hm, mir scheint, ich habe soweit alles richtig gemacht. Irgendeine Idee, was ich machen/testen könnte, um den Grund des Problems zu finden?
Udontknow - Di 28.12.04 13:41
Hmmm, wirklich merkwürdig. Du bist sicher, daß du Firebird nutzt? :) Die Unterscheidung ist ja mitunter knifflig, wenn man beides auf dem System hat.
Gehen denn die anderen registrierten Funktionen?
Probiere es mal in der Form:
Quelltext
1:
| select LPAD('98',4,'0') from RDB$DATABASE |
Cu,
Udontknow
dirkil2 - Di 28.12.04 13:53
Das Statement von Dir geht auch nicht: selber Fehler.
Was z.B. funktioniert ist:
select SUBSTR('ABC',1,1) from RDB$DATABASE
select ABS(4.4) from RDB$DATABASE
select PI() from RDB$DATABASE
select LTRIM(' JJ') from RDB$DATABASE
select ASCII_CHAR(67) from RDB$DATABASE
Ich habe die Registrierung der UDF direkt in IBExpert gemacht und nicht isql verwendet. Das sollte aber kein Problem sein, oder?
dirkil2 - So 02.01.05 01:34
Wenn ich Interbase deinstalliere und nur Firebird, dann funktioniert LPAD.
Udontknow - Mo 03.01.05 12:35
Das ist ja nun wirklich merkwürdig. Naja, Hauptsache, es klappt nun.
Cu,
Udontknow
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!