Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Wechselkurse von der EZB

466 views
Skip to first unread message

Günter Gerold

unread,
Feb 27, 2008, 2:32:58 PM2/27/08
to
Hallo NG,

ich wollte in einem Datenbankprojekt den aktuellen Wechselkurs anzeigen
lassen. Dazu habe ich mal bei der EZB nachgefragt, ob ich denn per
Automatismus diesen Wechselkurs aus der Internetseite saugen darf.
Ich bekam folgende positive Antwort:

Dear Mr Gerold,
you are welcome to use the eurofxref, but for automatically feed a database
I suggest you to use this file instead
http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml

Concerning any legal basis please check our Disclaimer & copyright at
http://www.ecb.europa.eu/home/html/disclaimer.de.html (in German)

Kind regards
Marcello Di Pietro


Thomas Möller

unread,
Feb 27, 2008, 2:51:58 PM2/27/08
to
Hallo Günter,

Günter Gerold <t...@gerold-online.dede> schrieb:

vielen Dank, dass Du Dir die Mühe gemacht hast!

CU
--
Thomas

Homepage: www.Team-Moeller.de

Jens Schilling

unread,
Feb 27, 2008, 3:02:53 PM2/27/08
to
Hallo, Günter

Günter Gerold wrote:
> Hallo NG,
>
> ich wollte in einem Datenbankprojekt den aktuellen Wechselkurs
> anzeigen lassen. Dazu habe ich mal bei der EZB nachgefragt, ob ich
> denn per Automatismus diesen Wechselkurs aus der Internetseite saugen
> darf.
> Ich bekam folgende positive Antwort:
>
> Dear Mr Gerold,
> you are welcome to use the eurofxref, but for automatically feed a
> database I suggest you to use this file instead
> http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml

Das schaut doch gut aus.
Recht herzlichen Dank an Dich !!

Tschüs
Jens


Günter Gerold

unread,
Feb 27, 2008, 4:06:19 PM2/27/08
to
Werde dann mal folgendes einsetzen:


Public Function getUmrechnungskursSF() As Currency
Dim strAdresse As String
Dim objWeb As Object
Dim strXML As String
Dim strMarke As String
Dim intMarkeAnfang As Integer
Dim intLaenge As Integer

'Initialisieren
On Error GoTo getUmrechnungskursSF_Error

strAdresse =
"http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
strMarke = "Cube currency='CHF' rate='"
'Web-Zugriff
Set objWeb = CreateObject("Microsoft.XMLHTTP")
objWeb.Open "GET", strAdresse, False
objWeb.Send
strXML = objWeb.responseText
intMarkeAnfang = InStr(1, strXML, strMarke)
intLaenge = InStr(intMarkeAnfang, strXML, "'/>") - intMarkeAnfang -
Len(strMarke)
getUmrechnungskursSF = format(1 / CCur(Replace(Mid(strXML,
intMarkeAnfang + Len(strMarke), intLaenge), ".", ",")), "0.0000")

Ausgang:
On Error Resume Next
Exit Function

getUmrechnungskursSF_Error:
Select Case Err.Number
Case 0
Resume Ausgang
Case Else
Call fncErrorHandler("mdlGerold", "getUmrechnungskursSF")
Resume Ausgang
End Select

End Function


Klaus Oberdalhoff

unread,
Feb 27, 2008, 5:49:30 PM2/27/08
to
Hi,

DANKE vielmals

das ist das, was ich für mich draus gemacht habe <g>
Idee: Für alle Währungen und Rückgabe entweder Originalkurs oder 1 /
Originalkurs


Public Function getUmrechnungskurs(Optional strCurr As String = "CHF", _
Optional VonEuro As Boolean = False) As Currency

' Autor: Günter Gerold (Newsgroup) ' Änderungen: Klaus Oberdalhoff
' Für alle Währungen der EZB und Rückgabe entweder Originalkurs oder 1 /
Originalkurs

Dim strAdresse As String
Dim objWeb As Object
Dim strXML As String
Dim strMarke As String
Dim intMarkeAnfang As Integer
Dim intLaenge As Integer

Dim OrgWert As Currency

' Legalitätscheck - Erlaubte Abfrage ...
' http://www.ecb.europa.eu/home/html/disclaimer.de.html

' <Cube currency="USD" rate="1.5044" /> USD US dollar 1.5044
' <Cube currency="JPY" rate="159.95" /> JPY Japanese yen 159.95
' <Cube currency="BGN" rate="1.9558" /> BGN Bulgarian lev 1.9558
' <Cube currency="CZK" rate="25.048" /> CZK Czech koruna 25.048
' <Cube currency="DKK" rate="7.4546" /> DKK Danish krone 7.4546
' <Cube currency="EEK" rate="15.6466" /> EEK Estonian kroon 15.6466
' <Cube currency="GBP" rate="0.75760" /> GBP Pound sterling 0.75760
' <Cube currency="HUF" rate="257.98" /> HUF Hungarian forint 257.98
' <Cube currency="LTL" rate="3.4528" /> LTL Lithuanian litas 3.4528
' <Cube currency="LVL" rate="0.6965" /> LVL Latvian lats 0.6965
' <Cube currency="PLN" rate="3.5385" /> PLN Polish zloty 3.5385
' <Cube currency="RON" rate="3.6498" /> RON New Romanian leu 1 3.6498
' <Cube currency="SEK" rate="9.3356" /> SEK Swedish krona 9.3356
' <Cube currency="SKK" rate="32.817" /> SKK Slovak koruna 32.817
' <Cube currency="CHF" rate="1.6074" /> CHF Swiss franc 1.6074
' <Cube currency="ISK" rate="98.65" /> ISK Icelandic krona 98.65
' <Cube currency="NOK" rate="7.8540" /> NOK Norwegian krone 7.8540
' <Cube currency="HRK" rate="7.2770" /> HRK Croatian kuna 7.2770
' <Cube currency="RUB" rate="36.3680" /> RUB Russian rouble 36.3680
' <Cube currency="TRY" rate="1.7793" /> TRY New Turkish lira 2 1.7793
' <Cube currency="AUD" rate="1.6021" /> AUD Australian dollar 1.6021
' <Cube currency="BRL" rate="2.5185" /> BRL Brasilian real 2.5185
' <Cube currency="CAD" rate="1.4742" /> CAD Canadian dollar 1.4742
' <Cube currency="CNY" rate="10.7444" /> CNY Chinese yuan renminbi
10.7444
' <Cube currency="HKD" rate="11.7148" /> HKD Hong Kong dollar 11.7148
' <Cube currency="IDR" rate="13619.33" /> IDR Indonesian rupiah 13619.33
' <Cube currency="KRW" rate="1415.72" /> KRW South Korean won 1415.72
' <Cube currency="MXN" rate="16.1525" /> MXN Mexican peso 16.1525
' <Cube currency="MYR" rate="4.8186" /> MYR Malaysian ringgit 4.8186
' <Cube currency="NZD" rate="1.8365" /> NZD New Zealand dollar 1.8365
' <Cube currency="PHP" rate="60.507" /> PHP Philippine peso 60.507
' <Cube currency="SGD" rate="2.1013" /> SGD Singapore dollar 2.1013
' <Cube currency="THB" rate="44.900" /> THB Thai baht 44.900
' <Cube currency="ZAR" rate="11.2168" /> ZAR South African rand

'Initialisieren
On Error GoTo getUmrechnungskursSF_Error

strAdresse =
"http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
strMarke = "Cube currency='" & strCurr & "' rate='"


'Web-Zugriff
Set objWeb = CreateObject("Microsoft.XMLHTTP")
objWeb.Open "GET", strAdresse, False
objWeb.Send
strXML = objWeb.responseText
intMarkeAnfang = InStr(1, strXML, strMarke)
intLaenge = InStr(intMarkeAnfang, strXML, "'/>") - intMarkeAnfang -
Len(strMarke)

OrgWert = CCur(Replace(Mid(strXML, intMarkeAnfang + Len(strMarke),

intLaenge), ".", ","))

If VonEuro = False Then
getUmrechnungskurs = Format(1 / OrgWert, "0.0000")
Else
getUmrechnungskurs = OrgWert
End If

Ausgang:
On Error Resume Next
Exit Function

getUmrechnungskursSF_Error:
Select Case Err.Number
Case 0
Resume Ausgang
Case Else

MsgBox "fehler"
' Call fncErrorHandler("mdlGerold", "getUmrechnungskursSF")
Resume Ausgang
End Select

End Function


--
mit freundlichen Grüßen aus Nürnberg

Klaus Oberdalhoff KO...@gmx.de
Ich unterstütze PASS Deutschland e.V. (http://www.sqlpass.de)
Nächstes Treffen in Nürnberg am 11.03.2008

Thomas Winkler

unread,
Feb 28, 2008, 2:22:51 AM2/28/08
to
Klaus Oberdalhoff schrieb:
> Hi,
>
> DANKE vielmals

hier hättest Du endlich mal einem G*ü*nter danken können...aber
nein...er verpatzt die Chance. ;-)

SCNR

Thomas

--
"Access? Damit arbeite ich nicht. Das ist doch nur ein abgespecktes Excel."

Günter Gerold

unread,
Feb 28, 2008, 2:37:30 AM2/28/08
to
Hallo Klaus,

danke für deine Korrekturen. So ist das universell einsetzbar.

Wichtig finde ich noch, daß das Ergebnis dieser Abfrage mit Datum in einer
Tabelle im Backend landet, damit nicht jeder User mehrmals am Tag auf diese
Internetseite zugreift. Erstens ists nicht nötig und "So was tut man nicht".

wäre es dehalb nicht besser alle Währungen auf einmal aus dem String zu
sägen und komplett mit Datum zu übergeben? Im 2. Schritt alle in eine
Tabelle schreiben. Mit dieser Tabelle wird dann intern gearbeitet.

Günter


Günter Gerold

unread,
Feb 28, 2008, 4:55:26 AM2/28/08
to
Hallo Thomas,

> hier hättest Du endlich mal einem G*ü*nter danken können...aber
> nein...er verpatzt die Chance. ;-)

?? das verstehe ich jetzt nicht

> "Access? Damit arbeite ich nicht. Das ist doch nur ein abgespecktes
Excel."

Aha! Excelnutzer! Die versteht hier eh keiner ;-)


Thomas Winkler

unread,
Feb 28, 2008, 5:22:10 AM2/28/08
to
Hi,

> ?? das verstehe ich jetzt nicht

Dann hast Du gestern nicht mitgelesen. ;-)
http://groups.google.de/group/microsoft.public.de.access/tree/browse_frm/thread/b878ba3819a81dde

> Aha! Excelnutzer!

Falsch!

> Die versteht hier eh keiner ;-)

Richtig!

Thomas

--

Klaus Oberdalhoff

unread,
Feb 28, 2008, 10:23:57 AM2/28/08
to
Hi,

> wäre es dehalb nicht besser alle Währungen auf einmal aus dem String
> zu sägen und komplett mit Datum zu übergeben?

Ja, das wäre natürlich noch besser. Kannst du ja machen <g>

Frage ist, ob man diese Währungstabelle dann historisiert (d.h. die alten
Werte beibehält) oder man zwar das Datum mitspeichert und nur dann die neuen
Werte holt, wenn das Datum älter ist und die neuen Werte einfach
überschreibt...

Günter Gerold

unread,
Feb 28, 2008, 11:32:17 AM2/28/08
to
Hallo Klaus,

> Ja, das wäre natürlich noch besser. Kannst du ja machen <g>

Ärmelhochstürmel... ;-)

Stefan Wirrer

unread,
Feb 28, 2008, 11:30:38 AM2/28/08
to
Hallo Klaus,

Klaus Oberdalhoff wrote:
>> wäre es dehalb nicht besser alle Währungen auf einmal aus dem String
>> zu sägen und komplett mit Datum zu übergeben?
>

> Frage ist, ob man diese Währungstabelle dann historisiert (d.h. die
> alten Werte beibehält) oder man zwar das Datum mitspeichert und nur
> dann die neuen Werte holt, wenn das Datum älter ist und die neuen
> Werte einfach überschreibt...

Eine Historie der Wechselkurse gibt's bei der EBZ auch.
Nur mal einen Chart anschauen, dann findest du am rechten Rand:
Alternative data format
XML (SDMX-ML) data file

--
Gruß
aus München

Stefan

Stefan...@volke-muc.de
---------------------------------------------------------------------
Access-FAQ: http://www.donkarl.com/AccessFAQ.htm
KnowHow-MDB: http://www.freeaccess.de/
Infos für Neulinge in den Access-Newsgroups:
http://www.doerbandt.de/access/Newbie.htm
Stammtisch: http://www.access-muenchen.de/


Klaus Oberdalhoff

unread,
Feb 28, 2008, 7:53:47 PM2/28/08
to
Hi,

vielleicht nicht perfekt, aber sowas in der Art (beim CreateTable bin ich
mir nicht ganz sicher)

Achtung wg. der zusätzlichen Zeilenumbrüche durchs Posten ...

mfg Klaus


Public Function getUmrechnungskursAlle() As Boolean

' Autor: Günter Gerold (Newsgroup) ' Änderungen: Klaus Oberdalhoff

' Legalitätscheck - Erlaubte Abfrage ...
' http://www.ecb.europa.eu/home/html/disclaimer.de.html


Dim strCtry As Variant
Dim AnzCtry As Long

strCtry = Array("USD", "JPY", "BGN", "CZK", "DKK", "EEK", "GBP", _
"HUF", "LTL", "LVL", "PLN", "RON", "SEK", "SKK", "CHF", "ISK", _
"NOK", "HRK", "RUB", "TRY", "AUD", "BRL", "CAD", "CNY", "HKD", _
"IDR", "KRW", "MXN", "MYR", "NZD", "PHP", "SGD", "THB", "ZAR")
AnzCtry = UBound(strCtry)

' Autor: Günter Gerold (Newsgroup) ' Änderungen: Klaus Oberdalhoff

Dim strAdresse As String


Dim objWeb As Object
Dim strXML As String
Dim strMarke As String
Dim intMarkeAnfang As Integer
Dim intLaenge As Integer
Dim OrgWert As Currency

Dim I As Long
Dim UmrechnungskursVon As Double
Dim UmrechnungskursNach As Double

Dim DB As DAO.Database
Dim rst As DAO.Recordset

'Initialisieren
'On Error GoTo getUmrechnungskursSF_Error

If Not ObjectExists("Table", "tblProperty") Then
CurrentDb.Execute ("CREATE TABLE tblUmrechnungskurs _
(UmrLand TEXT(3), UmrWertVon DOUBLE, UmrWertNach DOUBLE, _
CreateDate DATETIME, CONSTRAINT PrimKey PRIMARY KEY (UmrLand));")
End If
DoEvents

CurrentDb.Execute ("DELETE * FROM tblUmrechnungskurs;")

strAdresse =
"http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
' strMarke = "Cube currency='" & strCurr & "' rate='"
'Web-Zugriff
Set objWeb = CreateObject("Microsoft.XMLHTTP")
objWeb.Open "GET", strAdresse, False
objWeb.Send
strXML = objWeb.responseText

Set DB = CurrentDb
Set rst = DB.OpenRecordset("SELECT * FROM tblUmrechnungskurs;")

For I = 0 To AnzCtry
strMarke = "Cube currency='" & strCtry(I) & "' rate='"


intMarkeAnfang = InStr(1, strXML, strMarke)
intLaenge = InStr(intMarkeAnfang, strXML, "'/>") - intMarkeAnfang -
Len(strMarke)
OrgWert = CCur(Replace(Mid(strXML, intMarkeAnfang + Len(strMarke),
intLaenge), ".", ","))

UmrechnungskursNach = Format(1 / OrgWert, "0.0000")
UmrechnungskursVon = OrgWert

With rst
.AddNew
rst.Fields("UmrLand").Value = strCtry(I)
rst.Fields("UmrWertNach").Value = UmrechnungskursNach
rst.Fields("UmrWertVon").Value = UmrechnungskursVon
rst.Fields("CreateDate").Value = Now()
.Update
End With
Next I

rst.Close
Set rst = Nothing
Set DB = Nothing
getUmrechnungskursAlle = True

Ausgang:
On Error Resume Next
Exit Function

getUmrechnungskursSF_Error:
getUmrechnungskursAlle = False


Select Case Err.Number
Case 0
Resume Ausgang
Case Else
MsgBox "fehler"
' Call fncErrorHandler("mdlGerold", "getUmrechnungskursSF")
Resume Ausgang
End Select


End Function

' Hilfsfunktion um zu Testen, ob die Tabelle existiert (aus der KnowHow) ...

Function ObjectExists(strObjectType As String, strObjectName As String) As
Boolean
' Pass the Object type: Table, Query, Form, Report, Macro, or Module
' Pass the Object Name
Dim DB As DAO.Database
Dim tbl As DAO.TableDef
Dim qry As DAO.QueryDef
Dim I As Integer

Set DB = CurrentDb()
ObjectExists = False

If strObjectType = "Table" Then
For Each tbl In DB.TableDefs
If tbl.Name = strObjectName Then
ObjectExists = True
Set DB = Nothing
Exit Function
End If
Next tbl
ElseIf strObjectType = "Query" Then
For Each qry In DB.QueryDefs
If qry.Name = strObjectName Then
ObjectExists = True
Set DB = Nothing
Exit Function
End If
Next qry
ElseIf strObjectType = "Form" Or strObjectType = "Report" Or
strObjectType = "Module" Then
For I = 0 To DB.Containers(strObjectType & "s").Documents.Count -
1
If DB.Containers(strObjectType & "s").Documents(I).Name =
strObjectName Then
ObjectExists = True
Set DB = Nothing
Exit Function
End If
Next I
ElseIf strObjectType = "Macro" Then
For I = 0 To DB.Containers("Scripts").Documents.Count - 1
If DB.Containers("Scripts").Documents(I).Name = strObjectName
Then
ObjectExists = True
Set DB = Nothing
Exit Function
End If
Next I
Else
MsgBox "Invalid Object Type passed, must be Table, Query, Form,
Report, Macro, or Module"
End If

Set DB = Nothing

End Function

Klaus Oberdalhoff

unread,
Feb 28, 2008, 8:54:30 PM2/28/08
to
Hi,

nicht mein bester Tag heute, Copy & paste Fehler ...

Hier ist's falsch

If Not ObjectExists("Table", "tblProperty") Then

Es muss natürlich

If Not ObjectExists("Table", "tblUmrechnungskurs") Then

heissen

--

mit freundlichen Grüßen aus Nürnberg

Klaus Oberdalhoff

Untere Schmiedgasse 8
D-90403 Nürnberg
Germany

Tel : +49(0911)2369666
Handy: 0160 93133556
Skype: klaus.oberdalhoff
eMail: KO...@gmx.de
XING : https://www.xing.com/profile/Klaus_Oberdalhoff/

Jens Schilling

unread,
Feb 29, 2008, 1:05:16 AM2/29/08
to
Hallo, Klaus

> Public Function getUmrechnungskursAlle() As Boolean

Das werd' ich mir (wenn ich vom Kurztrip zurück bin) genau anschauen, das
sieht interesssant aus.

> CurrentDb.Execute ("DELETE * FROM tblUmrechnungskurs;")

OK, beim schnellen Überfliegen sehe ich, dass ich hier wohl Hand anlegen
werde - ich bräuchte eine echte Historie.
Aber das ist mein Problem - Dir vielen Dank !

Gruss
Jens

Klaus Oberdalhoff

unread,
Feb 29, 2008, 1:28:52 AM2/29/08
to
Hi,

a) bitte Korrektur beachten

> OK, beim schnellen Überfliegen sehe ich, dass ich hier wohl Hand
> anlegen werde - ich bräuchte eine echte Historie.

b) du hast gelesen, was Steffan dazu geschrieben hat ?

Eine Historie der Wechselkurse gibt's bei der EBZ auch.
Nur mal einen Chart anschauen, dann findest du am rechten Rand:
Alternative data format
XML (SDMX-ML) data file

Jens Schilling

unread,
Feb 29, 2008, 1:35:46 AM2/29/08
to
Hallo, Klaus

Doch noch eine sachliche Anmerkung :

> rst.Fields("CreateDate").Value = Now()

Im Allgemeinen wird wohl auch der Wechselkurs eines/des Tages interessant
sein; wenn ich aber jetzt Deine Funktion aufrufen würde - also am 29.2.
früh morgens - würden diese mit dem heutigen Datum in die Tabelle
geschrieben, also nicht mit dem Tag, für den sie gelten ( 28.2.)

Da aber ein kurzer Klick auf Günters Link zeigt, dass im XML eine "Cube
time" enthalten ist, stellt es also grundsätzlich kein Problem dar, und sei
hier von mir nur als Hinweis für die verstanden, die wie ich eher an einem
stichtagsbezogenen Wechselkurs interessiert sind.

Gruss
Jens


Jens Schilling

unread,
Feb 29, 2008, 1:40:40 AM2/29/08
to
Hallo, Klaus

> Eine Historie der Wechselkurse gibt's bei der EBZ auch.

Ja - das würde mir aber so nicht reichen...

Gruss
Jens

Klaus Oberdalhoff

unread,
Feb 29, 2008, 6:39:42 AM2/29/08
to
Hi,

> Da aber ein kurzer Klick auf Günters Link zeigt, dass im XML eine
> "Cube time" enthalten ist, stellt es also grundsätzlich kein Problem
> dar, und sei hier von mir nur als Hinweis für die verstanden, die wie
> ich eher an einem stichtagsbezogenen Wechselkurs interessiert sind.

OK, aber die Historisierung ist dein Bier ...

mfg

Klaus

Public Function getUmrechnungskursAlle() As Boolean

' Autor: Günter Gerold (Newsgroup) ' Änderungen: Klaus Oberdalhoff

' Legalitätscheck - Erlaubte Abfrage ...
' http://www.ecb.europa.eu/home/html/disclaimer.de.html

' <Cube currency="USD" rate="1.5044" /> USD US dollar

' <Cube currency="JPY" rate="159.95" /> JPY Japanese yen

' <Cube currency="BGN" rate="1.9558" /> BGN Bulgarian lev

' <Cube currency="CZK" rate="25.048" /> CZK Czech koruna

' <Cube currency="DKK" rate="7.4546" /> DKK Danish krone

' <Cube currency="EEK" rate="15.6466" /> EEK Estonian kroon

' <Cube currency="GBP" rate="0.75760" /> GBP Pound sterling

' <Cube currency="HUF" rate="257.98" /> HUF Hungarian forint

' <Cube currency="LTL" rate="3.4528" /> LTL Lithuanian litas

' <Cube currency="LVL" rate="0.6965" /> LVL Latvian lats

' <Cube currency="PLN" rate="3.5385" /> PLN Polish zloty

' <Cube currency="RON" rate="3.6498" /> RON New Romanian leu

' <Cube currency="SEK" rate="9.3356" /> SEK Swedish krona

' <Cube currency="SKK" rate="32.817" /> SKK Slovak koruna

' <Cube currency="CHF" rate="1.6074" /> CHF Swiss franc

' <Cube currency="ISK" rate="98.65" /> ISK Icelandic krona

' <Cube currency="NOK" rate="7.8540" /> NOK Norwegian krone

' <Cube currency="HRK" rate="7.2770" /> HRK Croatian kuna

' <Cube currency="RUB" rate="36.3680" /> RUB Russian rouble

' <Cube currency="TRY" rate="1.7793" /> TRY New Turkish lira

' <Cube currency="AUD" rate="1.6021" /> AUD Australian dollar

' <Cube currency="BRL" rate="2.5185" /> BRL Brasilian real

' <Cube currency="CAD" rate="1.4742" /> CAD Canadian dollar

' <Cube currency="CNY" rate="10.7444" /> CNY Chinese yuan renminbi

' <Cube currency="HKD" rate="11.7148" /> HKD Hong Kong dollar

' <Cube currency="IDR" rate="13619.33" /> IDR Indonesian rupiah

' <Cube currency="KRW" rate="1415.72" /> KRW South Korean won

' <Cube currency="MXN" rate="16.1525" /> MXN Mexican peso

' <Cube currency="MYR" rate="4.8186" /> MYR Malaysian ringgit

' <Cube currency="NZD" rate="1.8365" /> NZD New Zealand dollar

' <Cube currency="PHP" rate="60.507" /> PHP Philippine peso

' <Cube currency="SGD" rate="2.1013" /> SGD Singapore dollar

' <Cube currency="THB" rate="44.900" /> THB Thai baht

' <Cube currency="ZAR" rate="11.2168" /> ZAR South African rand


Dim strCtry As Variant
Dim AnzCtry As Long

Dim iJahr As Long
Dim iMon As Long
Dim iDay As Long
Dim dtDatum As Date

strCtry = Array("USD", "JPY", "BGN", "CZK", "DKK", "EEK", "GBP", _
"HUF", "LTL", "LVL", "PLN", "RON", "SEK", "SKK", "CHF", "ISK", _
"NOK", "HRK", "RUB", "TRY", "AUD", "BRL", "CAD", "CNY", "HKD", _
"IDR", "KRW", "MXN", "MYR", "NZD", "PHP", "SGD", "THB", "ZAR")
AnzCtry = UBound(strCtry)

' Autor: Günter Gerold (Newsgroup) ' Änderungen: Klaus Oberdalhoff

Dim strAdresse As String
Dim objWeb As Object
Dim strXML As String
Dim strMarke As String
Dim intMarkeAnfang As Integer
Dim intLaenge As Integer
Dim OrgWert As Currency
Dim I As Long
Dim UmrechnungskursVon As Double
Dim UmrechnungskursNach As Double

Dim DB As DAO.Database
Dim rst As DAO.Recordset

'Initialisieren
On Error GoTo getUmrechnungskursSF_Error

If Not ObjectExists("Table", "tblUmrechnungskurs") Then
CurrentDb.Execute ("CREATE TABLE tblUmrechnungskurs " & _
"(UmrLand TEXT(3), UmrWertVon DOUBLE, UmrWertNach DOUBLE, " & _


"CreateDate DATETIME, CONSTRAINT PrimKey PRIMARY KEY (UmrLand));")
End If
DoEvents

CurrentDb.Execute ("DELETE * FROM tblUmrechnungskurs;")

strAdresse =
"http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
' strMarke = "Cube currency='" & strCurr & "' rate='"
'Web-Zugriff
Set objWeb = CreateObject("Microsoft.XMLHTTP")
objWeb.Open "GET", strAdresse, False
objWeb.Send
strXML = objWeb.responseText

Set DB = CurrentDb
Set rst = DB.OpenRecordset("SELECT * FROM tblUmrechnungskurs;")

' <Cube time="2008-02-28">
strMarke = "Cube time='"


intMarkeAnfang = InStr(1, strXML, strMarke)

intLaenge = InStr(intMarkeAnfang, strXML, "'>") - intMarkeAnfang _
- Len(strMarke)
iJahr = CInt(Mid(strXML, intMarkeAnfang + Len(strMarke), 4))
iMon = CInt(Mid(strXML, intMarkeAnfang + Len(strMarke) + 5, 2))
iDay = CInt(Mid(strXML, intMarkeAnfang + Len(strMarke) + 8, 2))
dtDatum = DateSerial(iJahr, iMon, iDay)

For I = 0 To AnzCtry
strMarke = "Cube currency='" & strCtry(I) & "' rate='"
intMarkeAnfang = InStr(1, strXML, strMarke)

intLaenge = InStr(intMarkeAnfang, strXML, "'/>") - intMarkeAnfang _
- Len(strMarke)
OrgWert = CCur(Replace(Mid(strXML, intMarkeAnfang + _


Len(strMarke), intLaenge), ".", ","))

If OrgWert <> 0 Then
UmrechnungskursNach = 1 / OrgWert
Else
UmrechnungskursNach = 0
End If
UmrechnungskursVon = OrgWert

With rst
.AddNew
rst.Fields("UmrLand").Value = strCtry(I)
rst.Fields("UmrWertNach").Value = UmrechnungskursNach
rst.Fields("UmrWertVon").Value = UmrechnungskursVon

rst.Fields("CreateDate").Value = dtDatum

Günter Gerold

unread,
Feb 29, 2008, 8:20:48 AM2/29/08
to
Hallo NG,

zum Programmieren ist da nicht mehr viel übriggeblieben ;-)

weitere Überlegungen

-Das berechnete Feld 1/Umrechnungskurs braucht nicht in der Tabelle
gespeichert werden,
-Für die History würde ich neue Datensätze einfach immer unten anfügen (wie
jetzt nur ohne löschen)
Würde es überhaupt lohnen aus Gründen der Normalisierung eine weitere
Tabelle anzulegen ?
Es ginge ja nur um das Textfeld UmrLand (nur 3 Zeichen)

zusätzlicher Luftcode für die History:

guck in tblUmrechnungskurs ob Datensätze mit heutigem Datum existieren
wenn nein: hole das <Cube time=" Datum und vergleiche es mit dem
aktuellsten aus tblUmrechnungskurs
wenn neuere Daten im Internet: abholen und in tblUmrechnungskurs
einfügen
endwenn
endguck

richtiger Code folgt....

Günter Gerold


Klaus Oberdalhoff

unread,
Feb 29, 2008, 11:30:15 AM2/29/08
to
Hi,

> weitere Überlegungen

Wenn du normalerweise nur die jeweils aktuellen Werte brauchst, dann
ist es wohl am Einfachsten, wie folgt vorzugehen:

2 identische Tabellen:

tblUmrechnungskurs
tblUmrechnungskursAlt

und beim holen des neuesten Wertes vor dem Löschen den dann "alten" Wert
einfach in tblUmrechnungskursAlt kopieren ?

Dann hast du eine sehr schnelle aktuelle Währungskurstabelle und bei Bedarf
die History (hängt aber vom Problem ab)

Wenn du das Problem hast, dass du beispielsweise für Rechnungen etc. immer
einen Umrechnungskurs für den jeweiligen Zeitraum benötigst, dann mach eine
einzige Tabelle, die auch die Historienwerte enthält und erledige den Rest
über Abfragen, die dir den jeweils den korrekten Wert für den Zeitraum
liefern. (Gib mir alle Datensätze für max(dtDatum) Where dtDatum <=
gewünschtes Datum ...)

Klaus Oberdalhoff

unread,
Feb 29, 2008, 12:14:28 PM2/29/08
to
Hi,

> -Das berechnete Feld 1/Umrechnungskurs braucht nicht in der Tabelle
> gespeichert werden,
> -Für die History würde ich neue Datensätze einfach immer unten
> anfügen (wie jetzt nur ohne löschen)

hier mit Historisierung (Achtung geänderte Tabellenstruktur)

mfg

Klaus


Abfrage Beispiel:

SELECT tblUmrechnungskurs.UmrLand, tblUmrechnungskurs.UmrWert,
Max(tblUmrechnungskurs.CreateDate) AS MaxvonCreateDate
FROM tblUmrechnungskurs
WHERE (((tblUmrechnungskurs.CreateDate)<=#2/28/2008#))
GROUP BY tblUmrechnungskurs.UmrLand, tblUmrechnungskurs.UmrWert;


' Die Funktion SQLDatum aus der KnowHow

Private Function SQLDatum(Datumx) As String
'Macht aus irgendeinem gültigen Datum einen
'String #yyyy-mm-dd# (ISO-Norm Datum)
If IsDate(Datumx) Then
SQLDatum = Format(CDate(Datumx), _
"\#yyyy\-mm\-dd\#", vbMonday, vbFirstFourDays)
Else
SQLDatum = ""
End If
End Function

"(UmrLand TEXT(3), CreateDate DATETIME, UmrWert DOUBLE, " & _
"CONSTRAINT PrimKey PRIMARY KEY (UmrLand, CreateDate));")
End If
DoEvents

strAdresse = _


"http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
' strMarke = "Cube currency='" & strCurr & "' rate='"
'Web-Zugriff
Set objWeb = CreateObject("Microsoft.XMLHTTP")
objWeb.Open "GET", strAdresse, False
objWeb.Send
strXML = objWeb.responseText

Set DB = CurrentDb
Set rst = DB.OpenRecordset("SELECT * FROM tblUmrechnungskurs;")

' <Cube time="2008-02-28">
strMarke = "Cube time='"
intMarkeAnfang = InStr(1, strXML, strMarke)
intLaenge = InStr(intMarkeAnfang, strXML, "'>") - intMarkeAnfang _
- Len(strMarke)
iJahr = CInt(Mid(strXML, intMarkeAnfang + Len(strMarke), 4))
iMon = CInt(Mid(strXML, intMarkeAnfang + Len(strMarke) + 5, 2))
iDay = CInt(Mid(strXML, intMarkeAnfang + Len(strMarke) + 8, 2))
dtDatum = DateSerial(iJahr, iMon, iDay)

CurrentDb.Execute ("DELETE * FROM tblUmrechnungskurs WHERE
CreateDate = " & SQLDatum(dtDatum) & ";")

For I = 0 To AnzCtry
strMarke = "Cube currency='" & strCtry(I) & "' rate='"
intMarkeAnfang = InStr(1, strXML, strMarke)
intLaenge = InStr(intMarkeAnfang, strXML, "'/>") - intMarkeAnfang _
- Len(strMarke)
OrgWert = CCur(Replace(Mid(strXML, intMarkeAnfang + _
Len(strMarke), intLaenge), ".", ","))

With rst


.AddNew
rst.Fields("UmrLand").Value = strCtry(I)

rst.Fields("CreateDate").Value = dtDatum
rst.Fields("UmrWert").Value = OrgWert

Günter Gerold

unread,
Feb 29, 2008, 1:37:08 PM2/29/08
to
Hallo Klaus,

da kann ich nichts mehr hinzuzufügen!

Ist toll geworden, universell einsetzbar und anpassbar, selbst wenn die EZB
die Seite oder den Aufbau ändert.

Danke für deine tatkräftige Unterstützung!

Günter Gerold


Klaus Oberdalhoff

unread,
Feb 29, 2008, 2:12:13 PM2/29/08
to
Hi,

danke für die Blumen <g>

nun ja, jetzt könnte man noch prüfen, ob man überhaupt Verbindung zum
Internet und eine Seite bekommen hat, und bei Nein, einfach die Funktion
abbrechen ...

Aber irgendwas muss ja auch für andere zu tun übrig bleiben <g>

Günter Gerold

unread,
Feb 29, 2008, 4:51:23 PM2/29/08
to
Hallo NG,

jetzt hats mich doch nochmal gepackt:

Die Ländrekürzel werden jetzt aus der XML-Datei selber geholt und nicht aus
einem Array.
So können jetzt neue Länder dazukommen oder die Reihenfolge der Länder von
der EZB gewechselt werden.

Public Function getUmrechnungskursAlle() As Boolean

' Legalitätscheck - Erlaubte Abfrage ...
' http://www.ecb.europa.eu/home/html/disclaimer.de.html

Dim iJahr As Long


Dim iMon As Long
Dim iDay As Long
Dim dtDatum As Date

Dim strAdresse As String
Dim objWeb As Object
Dim strXML As String
Dim strMarke As String

Dim strLand As String


Dim intMarkeAnfang As Integer
Dim intLaenge As Integer
Dim OrgWert As Currency
Dim I As Long
Dim UmrechnungskursVon As Double
Dim UmrechnungskursNach As Double

Dim DB As DAO.Database
Dim rst As DAO.Recordset

'Initialisieren
On Error GoTo getUmrechnungskursSF_Error

If Not ObjectExists("Table", "tblUmrechnungskurs") Then
CurrentDb.Execute ("CREATE TABLE tblUmrechnungskurs " & _
"(UmrLand TEXT(3), CreateDate DATETIME, UmrWert DOUBLE, " & _
"CONSTRAINT PrimKey PRIMARY KEY (UmrLand, CreateDate));")
End If
DoEvents

strAdresse =
"http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"


'Web-Zugriff
Set objWeb = CreateObject("Microsoft.XMLHTTP")
objWeb.Open "GET", strAdresse, False
objWeb.Send
strXML = objWeb.responseText

Set DB = CurrentDb
Set rst = DB.OpenRecordset("SELECT * FROM tblUmrechnungskurs;")

' <Cube time="2008-02-28">
strMarke = "Cube time='"
intMarkeAnfang = InStr(1, strXML, strMarke)
intLaenge = InStr(intMarkeAnfang, strXML, "'>") - intMarkeAnfang

iJahr = CInt(Mid(strXML, intMarkeAnfang + Len(strMarke), 4))
iMon = CInt(Mid(strXML, intMarkeAnfang + Len(strMarke) + 5, 2))
iDay = CInt(Mid(strXML, intMarkeAnfang + Len(strMarke) + 8, 2))
dtDatum = DateSerial(iJahr, iMon, iDay)

CurrentDb.Execute ("DELETE * FROM tblUmrechnungskurs WHERE
CreateDate = " & SQLDatum(dtDatum) & ";")

I = 1
Do
strMarke = "Cube currency='"
intMarkeAnfang = InStr(I, strXML, strMarke)
If intMarkeAnfang = 0 Then Exit Do
strLand = Mid(strXML, intMarkeAnfang + Len(strMarke), 3)
intLaenge = InStr(intMarkeAnfang, strXML, "'/>") - intMarkeAnfang -
Len(strMarke) - 11
OrgWert = CCur(Replace(Mid(strXML, intMarkeAnfang + Len(strMarke) +
11, intLaenge), ".", ","))
I = intMarkeAnfang + 1
With rst
.AddNew
rst.Fields("UmrLand").Value = strLand


rst.Fields("CreateDate").Value = dtDatum
rst.Fields("UmrWert").Value = OrgWert
.Update
End With

Loop

Klaus Oberdalhoff

unread,
Feb 29, 2008, 5:15:31 PM2/29/08
to
Hi,

> jetzt hats mich doch nochmal gepackt:
>

> Die Länderkürzel werden jetzt aus der XML-Datei selber geholt und


> nicht aus einem Array.
> So können jetzt neue Länder dazukommen oder die Reihenfolge der
> Länder von der EZB gewechselt werden.

gute Idee <g>

mfg

Klaus

Thomas Möller

unread,
Mar 1, 2008, 4:16:25 AM3/1/08
to
Hallo Günter,

Günter Gerold <t...@gerold-online.de> schrieb:


> jetzt hats mich doch nochmal gepackt:

mich auch ;-)


Die Ermittlung des Datums kannst Du etwas verkürzen. Dazu kannst Du die
Funktion CDATE verwenden.

Die folgenden Zeile kannst Du ersetzen...

> intLaenge = InStr(intMarkeAnfang, strXML, "'>") - intMarkeAnfang iJahr
> = CInt(Mid(strXML, intMarkeAnfang + Len(strMarke), 4)) iMon =
> CInt(Mid(strXML, intMarkeAnfang + Len(strMarke) + 5, 2)) iDay =
> CInt(Mid(strXML, intMarkeAnfang + Len(strMarke) + 8, 2)) dtDatum =
> DateSerial(iJahr, iMon, iDay)


... durch diese Zeile:


dtDatum = CDate(Mid$(strXML, intMarkeAnfang + Len(strMarke), 10))


> CurrentDb.Execute ("DELETE * FROM tblUmrechnungskurs WHERE
> CreateDate = " & SQLDatum(dtDatum) & ";")


Ich würde noch ein >>dbFailOnError<< ergänzen.

BTW: Auf das abschließende Semikolon kannst Du verzichten.

Peter Doering

unread,
Mar 1, 2008, 5:45:42 AM3/1/08
to
Hallo Thomas,

Thomas Möller wrote:
> Günter Gerold schrieb:


>>
>> ' <Cube time="2008-02-28">
>> strMarke = "Cube time='"
>> intMarkeAnfang = InStr(1, strXML, strMarke)
>
> Die Ermittlung des Datums kannst Du etwas verkürzen. Dazu kannst Du die
> Funktion CDATE verwenden.

Ich predige immer, CDate bzw. DateValue eben NICHT zu verwenden, und jetzt
du ... ;-)

Wenn das Datum immer in der Form YYYY-MM-DD daherkommt, ist CDate
unkritisch. Wenn nicht, bekommst du damit nur zufaellig ein richtiges
Ergebnis, je nach Regionaleinstellungen.

Gruss - Peter

--
2. SQL Server-Entwickler-Konferenz
Nürnberg, 12./13.4.2008 + 19./20.4.2008
http://www.donkarl.com/SEK

Klaus Oberdalhoff

unread,
Mar 1, 2008, 6:41:55 AM3/1/08
to
Hi,

also mit CDate habe ich schon zuu schlechte Erfahrungen gemacht, das lass
ich lieber. Da ist mir ein "absolutes" Auseinanderfieseln und wieder
Zusammensetzen via DateSerial doch sicherer.

Aber auch das hat hier, so wie ich es gemacht habe, auch den Haken, dass es
nur funktioniert, wenn Monat und Tag immer mit führender Nullen geliefert
wird. An sich müsste man die Bindestriche vor und nach dem Monat und den ">
auswerten um ganz sicher zu gehen...

Günter Gerold

unread,
Mar 1, 2008, 8:07:49 AM3/1/08
to
Hallo Peter,

> Wenn das Datum immer in der Form YYYY-MM-DD daherkommt, ist CDate
> unkritisch. Wenn nicht, bekommst du damit nur zufaellig ein richtiges
> Ergebnis, je nach Regionaleinstellungen.

Das dürfte in diesem Fall egal sein, da wir ja eh nur sehr abenteuerlich ein
Stück String einlesen.
Wenn die EZB am Aufbau der XML-Datei was ändert sind sowieso Anpassungen
notwendig.

Günter


Peter Doering

unread,
Mar 1, 2008, 10:27:52 AM3/1/08
to
Hallo,

Günter Gerold wrote:
> Peter:

Ok, bis dahin noch einen Alternativvorschlag:

Dim strDatum() As String



' <Cube time="2008-02-28">
strMarke = "Cube time='"

strDatum = Split(Mid(strXML, InStr(strXML, strMarke) + 11, 10), "-")
dtDatum = DateSerial(strDatum(0), strDatum(1), strDatum(2))

(Luftcode)

Damit fliegt DateSerial raus, sollte ein unerwartetes Datumsformat
geliefert werden. Im Gegensatz dazu wuerden DateValue/CDate das andere
Datumsformat bestmoeglich und daher evtl. auch falsch interpretieren.

Klaus Oberdalhoff

unread,
Mar 1, 2008, 10:37:48 AM3/1/08
to
Hi,

> Ok, bis dahin noch einen Alternativvorschlag:

klasse <g>

Damit hätte sich mein vorheriger Kommentar auch erübrigt <g>

mfg

Klaus

Klaus Oberdalhoff

unread,
Mar 1, 2008, 10:52:33 AM3/1/08
to
Hi,

> Dim strDatum() As String
>
> ' <Cube time="2008-02-28">
> strMarke = "Cube time='"
>
> strDatum = Split(Mid(strXML, InStr(strXML, strMarke) + 11, 10), "-")
> dtDatum = DateSerial(strDatum(0), strDatum(1), strDatum(2))

wäre das hier sicherer ?

dtDatum = DateSerial(CInt(strDatum(0)), _
CInt(strDatum(1)), CInt(strDatum(2)))

Jens Schilling

unread,
Mar 1, 2008, 11:50:25 AM3/1/08
to
Hi, Klaus

Klaus Oberdalhoff wrote:

> hier mit Historisierung (Achtung geänderte Tabellenstruktur)

Ach, Euch kann man aber auch keine 24 Stunden allein lassen ;-)

Dank Dir - und Allen, die im nachfolgenden Teilthread Ihren Senf noch
dazugegeben haben !

Tschüs
Jens


Peter Doering

unread,
Mar 1, 2008, 12:11:19 PM3/1/08
to
Hallo,

Klaus Oberdalhoff wrote:
>
>> Dim strDatum() As String
>>
>> ' <Cube time="2008-02-28">
>> strMarke = "Cube time='"
>>
>> strDatum = Split(Mid(strXML, InStr(strXML, strMarke) + 11, 10), "-")
>> dtDatum = DateSerial(strDatum(0), strDatum(1), strDatum(2))
>
> wäre das hier sicherer ?
>
> dtDatum = DateSerial(CInt(strDatum(0)), _
> CInt(strDatum(1)), CInt(strDatum(2)))

Ist eigentlich wurscht. Mir geht es darum, dass ein Fehler erzeugt wird,
falls das Datumsformat nicht stimmt. DateSerial akzeptiert Literale als
Parameter, solange sie numerische Werte enthalten, ansonsten Fehler 13.
Gleiches gilt fuer CInt.

Klaus Oberdalhoff

unread,
Mar 1, 2008, 12:46:55 PM3/1/08
to
Hi Peter,

> Ist eigentlich wurscht. Mir geht es darum, dass ein Fehler erzeugt
> wird, falls das Datumsformat nicht stimmt. DateSerial akzeptiert
> Literale als Parameter, solange sie numerische Werte enthalten,
> ansonsten Fehler 13. Gleiches gilt fuer CInt.

danke. Schon wieder was g'lernt ;-)

mfg

Klaus

Günter Gerold

unread,
Mar 1, 2008, 1:24:19 PM3/1/08
to
Darf ich noch ein bisscher rumschrauben ?

> strDatum = Split(Mid(strXML, InStr(strXML, strMarke) + 11, 10), "-")

statt der 11 ein len(strMarke)


Günter Gerold

unread,
Mar 1, 2008, 2:10:22 PM3/1/08
to
so, das Ganze noch ein bisschen gehübscht...

'---------------------------------------------------------------------------------------
' Modul : mdlWaehrung
' Autor : Klaus Oberdalhoff, Peter Doering, Thomas Möller, Jens
Schilling, Günter Gerold
' Datum : 01.03.2008
' Text :
'---------------------------------------------------------------------------------------

Option Compare Database
Option Explicit

'---------------------------------------------------------------------------------------
' Prozedur : getUmrechnungskursSF
' Autor : Klaus Oberdalhoff, Peter Doering, Thomas Möller, Jens
Schilling, Günter Gerold
' Datum : 27.02.2008
' Text :
'---------------------------------------------------------------------------------------

Public Function getUmrechnungskursAlle() As Boolean

' Legalitätscheck - Erlaubte Abfrage ...
' http://www.ecb.europa.eu/home/html/disclaimer.de.html

Dim dtDatum As Date
Dim strAdresse As String
Dim strDatum As Variant


Dim objWeb As Object
Dim strXML As String

Dim strDatumMarke As String
Dim strWaehrungMarke As String
Dim strWaehrungEndmarke As String


Dim strLand As String
Dim intMarkeAnfang As Integer
Dim intLaenge As Integer
Dim OrgWert As Currency
Dim I As Long

Dim DB As DAO.Database
Dim rst As DAO.Recordset

'Initialisieren
On Error GoTo getUmrechnungskursSF_Error

' Internetadresse mit den Kursen
strAdresse = "http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"

'Die Zeichenfolge mit der das Datum der Kurstabelle erkannt wird: <Cube
time='2008-02-28'>
strDatumMarke = "Cube time='"
Const constDatumLaenge = 10 ' 2008-02-28

'Die Zeichenfolge mit der eine Kurszeile erkannt wird: z.B. <Cube

currency='USD' rate='1.5044' />

strWaehrungMarke = "Cube currency='"
Const constLandLaenge = 3 ' USD
Const constZwischenTeilLaenge = 11 ' USD' rate='
strWaehrungEndmarke = "'/>"

If Not ObjectExists("Table", "tblUmrechnungskurs") Then
CurrentDb.Execute ("CREATE TABLE tblUmrechnungskurs " & _
"(UmrLand TEXT(3), CreateDate DATETIME, UmrWert DOUBLE, " & _
"CONSTRAINT PrimKey PRIMARY KEY (UmrLand, CreateDate));")
End If
DoEvents

'Web-Zugriff


Set objWeb = CreateObject("Microsoft.XMLHTTP")
objWeb.Open "GET", strAdresse, False
objWeb.Send
strXML = objWeb.responseText

Set DB = CurrentDb
Set rst = DB.OpenRecordset("SELECT * FROM tblUmrechnungskurs;")

strDatum = Split(Mid(strXML, InStr(strXML, strDatumMarke) +
Len(strDatumMarke), constDatumLaenge), "-")


dtDatum = DateSerial(strDatum(0), strDatum(1), strDatum(2))

CurrentDb.Execute ("DELETE * FROM tblUmrechnungskurs WHERE CreateDate =

" & _
SQLDatum(dtDatum))
I = 1
Do
intMarkeAnfang = InStr(I, strXML, strWaehrungMarke)


If intMarkeAnfang = 0 Then Exit Do

strLand = Mid(strXML, intMarkeAnfang + Len(strWaehrungMarke),
constLandLaenge)
intLaenge = InStr(intMarkeAnfang, strXML, strWaehrungEndmarke) -
intMarkeAnfang - _
Len(strWaehrungMarke) - constZwischenTeilLaenge


OrgWert = CCur(Replace(Mid(strXML, intMarkeAnfang +

Len(strWaehrungMarke) + constZwischenTeilLaenge, _


intLaenge), ".", ","))

I = intMarkeAnfang + 1 '+1 damit der erste Marker nicht zweimal
gefunden wird


With rst
.AddNew
rst.Fields("UmrLand").Value = strLand
rst.Fields("CreateDate").Value = dtDatum
rst.Fields("UmrWert").Value = OrgWert
.Update
End With
Loop

getUmrechnungskursAlle = True

Ausgang:
On Error Resume Next

rst.Close
Set rst = Nothing
Set DB = Nothing

Exit Function

getUmrechnungskursSF_Error:

Select Case Err.Number
Case 0
Resume Ausgang
Case Else

getUmrechnungskursAlle = True


Call fncErrorHandler("mdlGerold", "getUmrechnungskursSF")
Resume Ausgang
End Select

End Function


'---------------------------------------------------------------------------------------
' Prozedur : ObjectExists
' Autor : Klaus Oberdalhoff
' Datum : 01.03.2008
' Text :
'---------------------------------------------------------------------------------------

Function ObjectExists(strObjectType As String, strObjectName As String) As _


Boolean
' Pass the Object type: Table, Query, Form, Report, Macro, or Module
' Pass the Object Name

Dim DB As DAO.Database


Dim tbl As DAO.TableDef
Dim qry As DAO.QueryDef
Dim I As Integer

Set DB = CurrentDb()
ObjectExists = False

If strObjectType = "Table" Then
For Each tbl In DB.TableDefs
If tbl.Name = strObjectName Then
ObjectExists = True
Set DB = Nothing
Exit Function
End If
Next tbl
ElseIf strObjectType = "Query" Then
For Each qry In DB.QueryDefs
If qry.Name = strObjectName Then
ObjectExists = True
Set DB = Nothing
Exit Function
End If
Next qry
ElseIf strObjectType = "Form" Or strObjectType = "Report" Or

strObjectType _
= "Module" Then
For I = 0 To DB.Containers(strObjectType & "s").Documents.count -
1
If DB.Containers(strObjectType & "s").Documents(I).Name = _


strObjectName Then
ObjectExists = True
Set DB = Nothing
Exit Function
End If
Next I
ElseIf strObjectType = "Macro" Then

For I = 0 To DB.Containers("Scripts").Documents.count - 1


If DB.Containers("Scripts").Documents(I).Name = strObjectName

_


Then
ObjectExists = True
Set DB = Nothing
Exit Function
End If
Next I
Else

MsgBox _


"Invalid Object Type passed, must be Table, Query,

Form,Report, Macro, or Module"
End If

Set DB = Nothing

End Function

'---------------------------------------------------------------------------------------
' Prozedur : SQLDatum
' Autor : Klaus Oberdalhoff
' Datum : 01.03.2008
' Text : Macht aus irgendeinem gültigen Datum einen String #yyyy-mm-dd#
(ISO-Norm Datum)
'---------------------------------------------------------------------------------------

Private Function SQLDatum(Datumx) As String

If IsDate(Datumx) Then
SQLDatum = format(CDate(Datumx), "\#yyyy\-mm\-dd\#", vbMonday, _

Günter Gerold

unread,
Mar 1, 2008, 2:41:18 PM3/1/08
to
nochwas:

darf ich den von uns erstellten Code auf meiner Internetseite
www.gerold-online.de/cms
zusammen mit eueren Namen als frei verwendbaren Code veröffentlichen?


Klaus Oberdalhoff

unread,
Mar 1, 2008, 4:03:06 PM3/1/08
to
Hi,

> darf ich den von uns erstellten Code auf meiner Internetseite
> www.gerold-online.de/cms
> zusammen mit eueren Namen als frei verwendbaren Code veröffentlichen?

Die Frage find ich irgendwie urig.

a) der Code ist doch eh von dir, die paar Änderungen von uns ...
b) Newgroup-Infos sind doch per definitionem "für alle"
c) Google hat ihn eh schon gespeichert

also meinen Segen hast du schon mal (was immer das Wert sein mag) <g>

Günter Gerold

unread,
Mar 1, 2008, 4:25:39 PM3/1/08
to
Hallo,

es gehört sich so.


Jens Schilling

unread,
Mar 1, 2008, 6:13:35 PM3/1/08
to
Hallo, Günter

Ich sehe es im Grunde wie Klaus - es ist Dein Code bzw. Euer Code...

So gut es von Dir auch gemeint sein mag, mich namentlich aufgenommen zu
haben, ist zu viel des Guten; mein Beitrag z.B. bestand lediglich aus
einigen ( ungetesten ) Kommentaren zu Klaus' Code - aktiv hab' ich nichts
beigetragen ( ausser Wünsche zu äussern ;-) ) ...

Ich denke - und ich unterstelle einmal das auch Peter und Thomas Ihren
Beitrag als Diskussionsbeitrag verstehen - das Deine und Klaus namentliche
Nennung im Code ausreichend sind.

Aber ich möchte Dir auch noch einmal ausdrücklich für die Bemühungen danken,
die Klarstellung ( in diesem Falle Zustimmung ) der EZB eingeholt zu haben.

Tschüs
Jens


Michel Fouquet

unread,
Mar 2, 2008, 3:42:26 AM3/2/08
to
Hallo,
Günter Gerold schrieb:

> ich wollte in einem Datenbankprojekt den aktuellen Wechselkurs anzeigen
> lassen. Dazu habe ich mal bei der EZB nachgefragt, ob ich denn per
> Automatismus diesen Wechselkurs aus der Internetseite saugen darf.
> Ich bekam folgende positive Antwort:

aus verschiedenen Gründen komme ich z.Zt. nicht dazu, mich aktiv an der
NG zu beteiligen.

Da ich es war, der im Thread "Währung Umrechnungskurs einfügen" Deine
Nachfrage ausgelöst hat, möchte auch ich mich bei Dir für Deine
ausführliche und produktive Rückmeldung bedanken.

Gruß,
Michel

Thomas Möller

unread,
Mar 2, 2008, 4:17:48 AM3/2/08
to
Hallo Günter,

Günter Gerold <t...@gerold-online.de> schrieb:


> darf ich den von uns erstellten Code auf meiner Internetseite
> www.gerold-online.de/cms
> zusammen mit eueren Namen als frei verwendbaren Code veröffentlichen?

ich sehe das genauso wie die anderen hier.
Daher auch von mir: Meinen Segen hast Du. ;-)

THX
--
Thomas

Homepage: www.Team-Moeller.de

Peter Doering

unread,
Mar 2, 2008, 4:53:20 AM3/2/08
to
Thomas Möller wrote:
> Günter Gerold <t...@gerold-online.de> schrieb:
>> darf ich den von uns erstellten Code auf meiner Internetseite
>> www.gerold-online.de/cms
>> zusammen mit eueren Namen als frei verwendbaren Code veröffentlichen?
>
> ich sehe das genauso wie die anderen hier.
> Daher auch von mir: Meinen Segen hast Du. ;-)

Dto. hier.

Günter Gerold

unread,
Mar 2, 2008, 2:07:59 PM3/2/08
to
0 new messages