Avatar billede per2edb Praktikant
18. oktober 2014 - 18:28 Der er 12 kommentarer og
1 løsning

Tilgængelig kilde med valutakurser

Jeg skal have daglig opdateret Valutakurser i hovedvautaerne fra en extern kilde ind i Access

Jeg har prøver forskellige web sider men kilden er ikke tilgængelig
Ër der nogen der kender en tilgængelig kilde
Avatar billede bvirk Guru
18. oktober 2014 - 19:13 #1
xml fil kan fås her:
  http://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesXML?lang=da

Vender tilbage hvis jeg får ide til fuldautomatisk tabelopdatering
Avatar billede bvirk Guru
19. oktober 2014 - 11:52 #2
Bortset fra tegnkonverteringsfejl (æ,ø,å) er her en løsning på tabelopdatering fra remote xml fil.
Givet en tabel Valuta(code text,desc text,rate number) er dette topniveau kaldet:

Sub stocks2table()
    Const table = "Valuta"
    Dim newValues, fldValues, fldVArr
    CurrentDb.Execute "delete from " & table
    newValues = Split(csvvaluesOfXML(), vbCrLf)
    If Not IsEmpty(newValues) Then
        With CurrentDb.OpenRecordset(table)
            For Each fldValues In newValues
                If Len(fldValues) Then
                    fldVArr = Split(fldValues, ",")
                    .AddNew
                    ![Code] = fldVArr(0)
                    ![desc] = fldVArr(1)
                    ![Rate] = Replace(fldVArr(2), ".", ",")
                    .Update
                End If: Next: End With: End If
End Sub

Denne sub kalder:

Function csvvaluesOfXML()
    Const xslFile = "D:\home\dev\devel\access\stock.xsl"
    Dim domIn As DOMDocument30, domStylesheet As DOMDocument30, xmlData, loadXMLSucces
    Set domIn = New DOMDocument30
    loadXMLSucces = domIn.loadXML(xmlresponseText( _
            "http://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesXML?lang=da"))
    If loadXMLSucces Then
        Set domStylesheet = New DOMDocument30
        domStylesheet.Load xslFile
       
        If Not domStylesheet Is Nothing Then
            csvvaluesOfXML = domIn.transformNode(domStylesheet)
        End If
    End If
    Set domIn = Nothing
End Function

Bemærk to ting der er hardcodet i csvvaluesOfXML()
1) url'en til natioalbankens valuta xml fil
2) filnavnet på en xsl fil - denne xml tekstfil ser såldes ud:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    <xsl:output method="text" version="1.0" omit-xml-declaration="yes" encoding="ISO-8859-1" />
    <xsl:template match="/exchangerates/dailyrates">
        <xsl:for-each select="currency">
            <xsl:value-of select="@code"/><xsl:text>,</xsl:text><xsl:value-of select="@desc"/><xsl:text>,</xsl:text>
            <xsl:choose><xsl:when test="string-length(@rate) < 2"><xsl:text>0</xsl:text></xsl:when>
                <xsl:otherwise><xsl:value-of select="translate(@rate,',','.')"/></xsl:otherwise>
            </xsl:choose><xsl:text>
</xsl:text>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

xsl'en ser lidt rodet ud, det er vigtigt at der ikke kommer linieskift i outputet og den er hacket sammen så det ikke skete. Man teste med ?csvvaluesOfXML() i immediate vinduet 
Og endeligt denne funktion som udfører http kaldet - det er her jeg ikke har kunnet fremeksperimentere adodb.stream konvertering der bringer æ,ø og å fra iso-8859-1 ind i tabellen:

Function xmlresponseText(url, Optional method = "GET")
    Dim xhr
    Set xhr = CreateObject("Microsoft.XMLHTTP")
    xhr.Open method, url, False
    xhr.send
    If xhr.Status = 200 Then
        With New ADODB.Stream
            .Type = adTypeText
            .Charset = "iso-8859-1"
            .Open
            .WriteText xhr.responseText
            .Position = 0
            .Charset = "utf-8" '"windows-1252"
            xmlresponseText = .ReadText
        End With
    End If
    Set xhr = Nothing
End Function
Avatar billede per2edb Praktikant
19. oktober 2014 - 12:03 #3
Det lyder spændende. Jeg prøver det
Avatar billede bvirk Guru
19. oktober 2014 - 12:05 #4
sådant et forum indlæg egner sig ikke rigtigt til xsl dump - jeg har følgende 10 tegn:
følgende 10 tegn '&','#','1','3',';','&','#','10',';'
og ikke linieskift mellem sidste <xsl:text> og </xsl:text> - måske er det lige fedt!
Avatar billede bvirk Guru
19. oktober 2014 - 13:33 #5
Men det er det ikke med test="string-length(@rate) < 2" - < tegnet skal erstattes med - uden mellem
& l t ;
Avatar billede finb Ekspert
19. oktober 2014 - 13:43 #6
valutakurser.dk
Avatar billede per2edb Praktikant
19. oktober 2014 - 15:52 #7
Jeg får fejl her:
Dim domIn As DOMDocument30
Not defined  ?
Avatar billede bvirk Guru
19. oktober 2014 - 17:50 #8
referencer til:
Microsoft dao.36
Microsoft active x data object 2.8
Microsoft xml v.3.0

Der er rettet en del i denne - xsl ligger i blob
https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxhbWFpbHVzZXJ8Z3g6NjQ3MWY3ZTEzOTU5N2EyOQ

Nu går aldrig på valutakurser.dk længere ;)
Avatar billede per2edb Praktikant
19. oktober 2014 - 18:13 #9
1000 tak - det er bare super
Avatar billede bvirk Guru
19. oktober 2014 - 22:10 #10
Selv tak, jeg havde fornøjelsen af flere nye koncepter - bla. blob's i stedet for lokale filer og tegnkonvertering fra iso-8859-1
Avatar billede per2edb Praktikant
19. oktober 2014 - 22:32 #11
Hej
ØV Det var der næsten, men da jeg lagde Microsoft dao.36 ind fik jeg
Name conflicts ........
De virker pånær Name conflicts...
Jeg bruger Access 2013 og Windows 7 prof
Det virker med dao .36 i dit eksempel som er baseret på en ældre version
Kan du fortælle hvad jeg skal bruge i stedet for dao.36 når det er en nyere version
Avatar billede per2edb Praktikant
20. oktober 2014 - 15:56 #12
Nu fik jeg det til at virke
Microsoft dao.36  skulle bare ikke med
Avatar billede bvirk Guru
21. oktober 2014 - 12:05 #13
Anede mig at referencer ved indlemning i andre projekter, kunne være allerede eksisterende, og det ikke nødvendigvis med helt samme referencenavn. Det fiksede din erhvervede erfaring jo fint, per2edb ;)
Ja - jeg anvender Access 2000 - under xp home.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester