Seite 1 von 1
Ratschlag gesucht!!
Verfasst: Di, 17.11.2009 16:06
von Fritz5
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
Re: Ratschlag gesucht!!
Verfasst: Di, 17.11.2009 17:35
von eBayer
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
Re: Ratschlag gesucht!!
Verfasst: Di, 17.11.2009 21:06
von Fritz5
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
Re: Ratschlag gesucht!!
Verfasst: Fr, 20.11.2009 15:36
von Fritz5
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
Re: Ratschlag gesucht!!
Verfasst: Fr, 20.11.2009 17:53
von eBayer
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
Re: Ratschlag gesucht!!
Verfasst: Fr, 20.11.2009 18:20
von Fritz5
Hallo eBayer, Dank für die Klarstellung. Dann weiß ich wenigstens, das meine Pläne so nicht aufgehen. Viele Grüße, Fritz
Re: Ratschlag gesucht!!
Verfasst: So, 22.11.2009 20:22
von komma4
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?