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
Aufruf benutzerdefinierter Funktionen
Moderator: Moderatoren
Re: Aufruf benutzerdefinierter Funktionen
?????
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
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
Re: Aufruf benutzerdefinierter Funktionen
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
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
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
Re: Aufruf benutzerdefinierter Funktionen
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
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
Re: Aufruf benutzerdefinierter Funktionen
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
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
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
Re: Aufruf benutzerdefinierter Funktionen
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.
Gruß Barlee
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.
>> siehe Funktion FLOOR oder CEILING, je nach BedarfFunktionen wie z.B INT (Integer Part einer Zahl)
Gruß Barlee
Re: Aufruf benutzerdefinierter Funktionen
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

Danke und Gruß, Fritz