Ratschlag gesucht!!

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Ratschlag gesucht!!

Re: Ratschlag gesucht!!

von komma4 » So, 22.11.2009 20:22

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?

Re: Ratschlag gesucht!!

von Fritz5 » Fr, 20.11.2009 18:20

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!!

von eBayer » Fr, 20.11.2009 17:53

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!!

von Fritz5 » Fr, 20.11.2009 15:36

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!!

von Fritz5 » Di, 17.11.2009 21:06

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!!

von eBayer » Di, 17.11.2009 17:35

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

Ratschlag gesucht!!

von Fritz5 » Di, 17.11.2009 16:06

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

Nach oben