Aufruf benutzerdefinierter Funktionen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Fritz5
**
Beiträge: 20
Registriert: Do, 02.07.2009 15:15

Aufruf benutzerdefinierter Funktionen

Beitrag von Fritz5 »

Hallo Experten,

ich schaffe es nicht, benutzerdefinierte Funktionen oder auch "eingebaute rechnende" Funktionen wie z.B INT (Integer Part einer Zahl) in Base aufzurufen. Ich habe keine Probleme mit z.B. Stringfunktionen wie LEFT("Titel",3) - in Zeile Feld eingegeben - , die korrekt die ersten drei Buchstaben der Einträge in der Spalte Titel ausgibt.

Die in OOo Basic definierte Funktion funktioniert einwandfrei in Calc. Hier ein - triviales - Beispiel:

Function Fctest(x AS Double)

Fctest = SQR(x) + 1

End function

Der Aufruf Fctest("Betrag") eingetragen in der Zeile Feld, wobei die Spalte Betrag das Format decimal hat, führt zu der Fehlermeldung "Access denied:...."
Bei der versuchsweisen Eingabe der eingebauten Basic Funktion Int in die Zeile Feld: Int("Betrag") bekomme ich die Fehlermeldung "Die Spalte 'Int("Betrag")' ist unbekannt."

Was mache ich falsch? Oder sind benutzerdefinierte Basic-Funktionen und nicht alle eingebauten Basic-Funktionen in Abfragen gar nicht anwendbar????

Vielen Dank für Hilfe und Tipps.

Fritz
Fritz5
**
Beiträge: 20
Registriert: Do, 02.07.2009 15:15

Re: Aufruf benutzerdefinierter Funktionen

Beitrag von Fritz5 »

?????
Was habe ich falsch gemacht?
Ist die Frage falsch gestellt?
Ist die Antwort so simpel, dass sie keiner schreiben will?
Hätte ich die Antwort in irgendwelchen Manuals selbst finden sollen?

Ich habe fleißig in verschiedenen Manuals gesucht, aber keine Antwort gefunden.

Deshalb noch einmal die Bitte um einen Tipp zur Lösung oder um einen Tipp, wo ich eventuell eine Lösung finden kann!

Danke, Fritz
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Aufruf benutzerdefinierter Funktionen

Beitrag von eBayer »

Wenn der Übergabeparameter als Double definiert ist, solltest Du auch einen entsprechenden Wert übergeben.
Das unten aufgeführte Beispiel mit Deiner Funktion liefert in Base jedenfalls richtig als Ergebnis den Wert 13.
Du solltest vielleicht mal beschreiben, wie Du in Base die Function einsetzen willst.
Gruß eBayer

Function Fctest(x AS Double)
Fctest = SQR(x) + 1
End function

Sub FuncTest
msgbox fctest(144)
end sub
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Fritz5
**
Beiträge: 20
Registriert: Do, 02.07.2009 15:15

Re: Aufruf benutzerdefinierter Funktionen

Beitrag von Fritz5 »

Erst einmal herzlichen Dank für die Reaktion!

Das einfache Beispiel läuft bei mir genauso. Das ist schon einmal gut.

Worum geht es mir wirklich? Ich benutze eine Datenbank, in der Beträge in einer Spalte "Betrag-Zahl" vorkommen. Für Berichte (Spendenquittungen) brauche ich zusätzlich den Betrag in Worten, z.B. "23,34" als "dreiundzwanzig 34/00". Eine entsprechende Funktion habe ich aus dem Internet für OOo Basic angepasst. Sie arbeitet in Calc oder in Deinem Beispiel mit der Sub funcTest mit der Funktion zwort anstelle von fctest. Jetzt möchte ich in einer Abfrage zusätzlich zu der Spalte "Betrag-Zahl" eine Spalte "Betrag-Wort" einführen und in dieser Spalte zur Berechnung des Betrages in Worten die Funktion zwort einsetzen. Ich benutze den Aufruf zwort("Betrag-Zahl") in der Zeile Feld. Dabei bekomme ich die Fehlermeldung: "Access denied:....".

Aus Testgründen habe ich dann eine Tabelle mit nur zwei Spalten (ID und Betrag-Zahl, ID als Integer und Betrag-Zahl als decimal) eingerichtet und in einer Abfrage in der dritten Spalte in der Zeile Feld verschiedene Funktionen ausprobiert.

- z.B. LEFT("Betrag-Zahl",2) funktioniert, aber
- die einfache benutzerdefinierte Funktion Fctest und auch
- die eingebaute Funktion Integer part, also INT führen zu Fehlermeldungen.

Ist vielleicht der Aufruf falsch?

Ist die Beschreibung verständlich oder sollte ich noch etwas angeben?

Dank und Gruß,

Fritz
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Aufruf benutzerdefinierter Funktionen

Beitrag von eBayer »

ich denke, Du solltest Dich mit der Doku von HSQLDB auseinandersetzen!
Sicher ist eines: Du kannst nicht einfach eine eigene Funktion schreiben, um diese dann in eine Abfrage einzubauen.
Auch ooBasic-Funktionen sind der Datenbank unbekannt. HSQLDB verfügt über eine begrenzte Anzahl von eingebauten Funktionen, die Du in der Doku nachlesen kannst. Diese sind aber wiederum sehr spezifisch und z.B. unter MySql nicht oder anders verfügbar!
Unter dem folgenden Link findest Du die Doku zur internen HSQLDB-Datenbank:
http://www.hsqldb.org/doc/guide/

Ich bin auch nicht der große SQL-Spezi.... aber für soche Zwecke verwende ich ggf. eine Hilfstabelle, welche ich nach belieben für meine Zwecke präparieren kann.
In dem Fall würde ich die Tabelle füllen und dann die variablen Werte, z.B. Betrag in Worten etc. ermitteln und in ein dafür definiertes Feld der Tabelle eintragen.
Angenehmer Nebeneffekt: Bei Berichten stößt Du nicht gleich an die Grenzen des machbaren, weil Du die Informationen vorher mundgerecht aufbereitet hast.
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Aufruf benutzerdefinierter Funktionen

Beitrag von Barlee »

Hallo Fritz,

eBayer hat vollkommen Recht. Befasse Dich mit den HSQLDB Funktionen und Stored Procedures. Eine gute Seite ist auch:
http://wiki.services.openoffice.org/wik ... Procedures
Meistens gibt es Lösungen für eigene Anforderungen durch bereits definierte Funktionen.
Funktionen wie z.B INT (Integer Part einer Zahl)
>> siehe Funktion FLOOR oder CEILING, je nach Bedarf

Gruß Barlee
Fritz5
**
Beiträge: 20
Registriert: Do, 02.07.2009 15:15

Re: Aufruf benutzerdefinierter Funktionen

Beitrag von Fritz5 »

eBayer und Barlee danke ich sehr für die Kommentare und Hinweise. Ich ahnte schon, dass mir einfach das notwendige Wissen fehlte :( . Die beiden Links werden nützlich sein. Das konkrete Problem mit der Wandlung von Zahlen in entsprechende Worte kann ich gut, wie von eBayer vorgeschlagen, lösen.

Danke und Gruß, Fritz
Antworten