Hallo Experten, wer kann mir sagen, ob es in Base möglich ist, benutzerdefinierte Funktionen zu erstellen, die nicht nur aus Kombinationen von den eingebauten Funktionen bestehen, also z.B. Basic Macro Funktionen, die in Calc gut funktionieren? Ein Beispiel ist die Umrechnung einer Zahl in das entsprechende Wort (z.B. Eingabe: 12, Ausgabe: zwölf)
Wenn das möglich ist, wo finde ich eine "Gebrauchsanleitung" für die Erstellung und Anwendung solcher Funktionen?
Vielen Dank für jeden Rat!!
Gruß, Fritz
Ratschlag gesucht!!
Moderator: Moderatoren
Re: Ratschlag gesucht!!
Natürlich geht das.... Du kannst beliebige Funktionen selbst entwickeln und dann in Deiner Anwendung verwenden... Mit Parameterübergabe oder ohne - ganz wie Du es brauchst.
ich denke, eine sehr gute Quelle für dieses Thema findest Du hier: http://www.pitonyak.org/oo.php
Gruß eBayer
ich denke, eine sehr gute Quelle für dieses Thema findest Du hier: http://www.pitonyak.org/oo.php
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: Ratschlag gesucht!!
Hallo eBayer, erst einmal vielen Dank für die schnelle Antwort mit der Mitteilung, dass mein Problem grundsätzlich in Base lösbar ist. Mit meinen noch etwas laienhaften Versuchen war ich erst einmal festgefahren.
Ich werde mich jetzt an den genannten Text heranmachen. Hoffentlich komme ich klar, wenn nicht.... dann werde ich hier wohl wieder fragen und hoffe auf Hilfe. Noch einmal vielen Dank und Gruß, Fritz

Ich werde mich jetzt an den genannten Text heranmachen. Hoffentlich komme ich klar, wenn nicht.... dann werde ich hier wohl wieder fragen und hoffe auf Hilfe. Noch einmal vielen Dank und Gruß, Fritz
Re: Ratschlag gesucht!!
Hallo eBayer, ich bin doch nicht mit der nutzerdefinierten Funktion weitergekommen. Um zu erklären was, mein Problem ist, hier ein stark vereinfachtes Beispiel:
In einer Tabelle:
ID Zahl
1 25
2 6,15
soll auf die Spalte "Zahl" eine Funktion angewandt werden und das Ergebnis in einer neuen Spalte gezeigt werden. Mit vorgegebenen Funktionen aus Base geht das problemlos, z.B. mit der Wurzelfunktion SQRT. Mit
SELECT "ID", "Zahl", SQRT( "Zahl" ) AS "Wurzel" FROM "TestTabelle" AS "TestTabelle"
ergibt sich das gewünschte Abfrageergebnis:
ID Zahl Wurzel
1 25 5
2 6,15 2,48
Dasselbe Vorgehen mit mit der Abfrage
SELECT "ID", "Zahl", ZWort( "Zahl" ) AS "Zahl_in_Wort" FROM "TestTabelle" AS "TestTabelle"
wobei ZWort die unten angegebene nutzerdefinierten Funktion ist , führt zu einer Fehlermeldung. Die Funktion ZWort funktioniert in calc einwandfrei.
Nach allen Recherchen habe ich jetzt den Eindruck, dass nutzerdefinierte Funktionen in Abfragen doch nicht eingesetzt werden können. Oder habe ich etwas falsch gemacht??
Viele Grüße, Fritz
Hier die Funktion ZWort:
____________________________________________________________
'In Anlehnung an eine Klassenprogrammierung von Hans W. Hofmann
Function ZWort(dZahl As Double, Optional bln As Boolean)
'bln nicht angegeben: "xx/00" wird angegeben. bln = 0: Bruchteilangabe
'wird unterdrückt
Dim dRest As Double
dRest = Fix((dZahl - Fix(dZahl)) * 100 +0.5)
dZahl = Fix(dZahl)
BisNeunzehn = Array("", "ein", "zwei", "drei", "vier", _
"fünf", "sechs", "sieben", "acht", "neun", "zehn", _
"elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", _
"sechzehn", "siebzehn", "achtzehn", "neunzehn")
Zehner = Array("", "zehn", "zwanzig", "dreißig", _
"vierzig", "fünfzig", "sechzig", "siebzig", _
"achtzig", "neunzig")
Tausender = Array("", "tausend", "millionen", "milliarden")
If dRest = 0 Then
ZWort = Textt(dZahl)
Else
If bln Then
ZWort = Textt(dZahl) & " " & dRest & "/00"
Else
ZWort = Textt(dZahl)
End If
End If
End Function
Private Function Wort(wert As Integer) As String
Dim h As Integer
h = wert Mod 100
If h < 20 Then
Wort = BisNeunzehn(h)
Else
Wort = BisNeunzehn(h Mod 10) & IIf(h Mod 10 > 0, "und", "") & _
Zehner(Int(h / 10))
End If
h = (wert Mod 1000 - h) / 100
If h > 0 Then Wort = BisNeunzehn(h) & "hundert" & Wort
End Function
Private Function Textt(wert As Double)
Dim l As Integer, i As Integer, p As Integer
If InStr(1, Str(wert), ",") = 0 And InStr(1, Str(wert), ".") = 0 Then
For i = 1 To 1 + Int(Len(Str(wert)) / 3)
p = Val("0" & Mid("000" & Str(wert), _
Len("000" & Str(wert)) - i * 3 + 1, 3))
If p > 0 Then Textt = Wort(p) & Tausender(i - 1) & Textt
Next
Else
Textt = "#Ganzzahl!"
End If
If Right(Textt, 3) = "ein" Then Textt = Textt & "s"
End Function
In einer Tabelle:
ID Zahl
1 25
2 6,15
soll auf die Spalte "Zahl" eine Funktion angewandt werden und das Ergebnis in einer neuen Spalte gezeigt werden. Mit vorgegebenen Funktionen aus Base geht das problemlos, z.B. mit der Wurzelfunktion SQRT. Mit
SELECT "ID", "Zahl", SQRT( "Zahl" ) AS "Wurzel" FROM "TestTabelle" AS "TestTabelle"
ergibt sich das gewünschte Abfrageergebnis:
ID Zahl Wurzel
1 25 5
2 6,15 2,48
Dasselbe Vorgehen mit mit der Abfrage
SELECT "ID", "Zahl", ZWort( "Zahl" ) AS "Zahl_in_Wort" FROM "TestTabelle" AS "TestTabelle"
wobei ZWort die unten angegebene nutzerdefinierten Funktion ist , führt zu einer Fehlermeldung. Die Funktion ZWort funktioniert in calc einwandfrei.
Nach allen Recherchen habe ich jetzt den Eindruck, dass nutzerdefinierte Funktionen in Abfragen doch nicht eingesetzt werden können. Oder habe ich etwas falsch gemacht??
Viele Grüße, Fritz
Hier die Funktion ZWort:
____________________________________________________________
'In Anlehnung an eine Klassenprogrammierung von Hans W. Hofmann
Function ZWort(dZahl As Double, Optional bln As Boolean)
'bln nicht angegeben: "xx/00" wird angegeben. bln = 0: Bruchteilangabe
'wird unterdrückt
Dim dRest As Double
dRest = Fix((dZahl - Fix(dZahl)) * 100 +0.5)
dZahl = Fix(dZahl)
BisNeunzehn = Array("", "ein", "zwei", "drei", "vier", _
"fünf", "sechs", "sieben", "acht", "neun", "zehn", _
"elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", _
"sechzehn", "siebzehn", "achtzehn", "neunzehn")
Zehner = Array("", "zehn", "zwanzig", "dreißig", _
"vierzig", "fünfzig", "sechzig", "siebzig", _
"achtzig", "neunzig")
Tausender = Array("", "tausend", "millionen", "milliarden")
If dRest = 0 Then
ZWort = Textt(dZahl)
Else
If bln Then
ZWort = Textt(dZahl) & " " & dRest & "/00"
Else
ZWort = Textt(dZahl)
End If
End If
End Function
Private Function Wort(wert As Integer) As String
Dim h As Integer
h = wert Mod 100
If h < 20 Then
Wort = BisNeunzehn(h)
Else
Wort = BisNeunzehn(h Mod 10) & IIf(h Mod 10 > 0, "und", "") & _
Zehner(Int(h / 10))
End If
h = (wert Mod 1000 - h) / 100
If h > 0 Then Wort = BisNeunzehn(h) & "hundert" & Wort
End Function
Private Function Textt(wert As Double)
Dim l As Integer, i As Integer, p As Integer
If InStr(1, Str(wert), ",") = 0 And InStr(1, Str(wert), ".") = 0 Then
For i = 1 To 1 + Int(Len(Str(wert)) / 3)
p = Val("0" & Mid("000" & Str(wert), _
Len("000" & Str(wert)) - i * 3 + 1, 3))
If p > 0 Then Textt = Wort(p) & Tausender(i - 1) & Textt
Next
Else
Textt = "#Ganzzahl!"
End If
If Right(Textt, 3) = "ein" Then Textt = Textt & "s"
End Function
Re: Ratschlag gesucht!!
Hallo Fritz,
so ist das mit ungenauen Fragestellungen.......
In Base kannst Du selbstverständlich eigene Funktionen erstellen...... aaaaaber in SQL ist das so nicht möglich!
SQL hat eine Menge eingebauter Funktionen, aber die selbst geschriebenen Funktionen sind für SQL nicht existent.
Schau Dir die Doku von der HSQLDB oder Deiner externen Datenbank an. Möglicherweise findest Du darin das was Du suchst.
Für die interne Datenbank HSQLDB: http://hsqldb.org/web/hsqlDocsFrame.html
Und hier was allgemeineres: http://sql.1keydata.com/de/
Gruß eBayer
so ist das mit ungenauen Fragestellungen.......
In Base kannst Du selbstverständlich eigene Funktionen erstellen...... aaaaaber in SQL ist das so nicht möglich!
SQL hat eine Menge eingebauter Funktionen, aber die selbst geschriebenen Funktionen sind für SQL nicht existent.
Schau Dir die Doku von der HSQLDB oder Deiner externen Datenbank an. Möglicherweise findest Du darin das was Du suchst.
Für die interne Datenbank HSQLDB: http://hsqldb.org/web/hsqlDocsFrame.html
Und hier was allgemeineres: http://sql.1keydata.com/de/
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: Ratschlag gesucht!!
Hallo eBayer, Dank für die Klarstellung. Dann weiß ich wenigstens, das meine Pläne so nicht aufgehen. Viele Grüße, Fritz
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Ratschlag gesucht!!
Hallo Fritz,
in eine SQL-Abfrage lässt sich das nicht einbauen, aber...
Du möchtest Spendenquittungen erstellen (Info per PM)
Und Du verwendest Base...
Mein Vorschlag:
Erstelle Deine Abfrage und verknüpfe das Ergebnis mit einer Calc-Datei (ggfs. Vorlage).
Das füllt Dir bspw. die Spalte A bis C: id, SpenderID und Betrag
In Spalte D ziehst Du die benutzerdef. Funktion =ZWort( C1 ) runter.
Diese Daten nimmst Du als Quelle eines Serienbriefs.
Hilft Dir das weiter?
in eine SQL-Abfrage lässt sich das nicht einbauen, aber...
Du möchtest Spendenquittungen erstellen (Info per PM)
Und Du verwendest Base...
Mein Vorschlag:
Erstelle Deine Abfrage und verknüpfe das Ergebnis mit einer Calc-Datei (ggfs. Vorlage).
Das füllt Dir bspw. die Spalte A bis C: id, SpenderID und Betrag
In Spalte D ziehst Du die benutzerdef. Funktion =ZWort( C1 ) runter.
Diese Daten nimmst Du als Quelle eines Serienbriefs.
Hilft Dir das weiter?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)