Zilele trecute am fost contactat de un coleg care se confrunta cu problema importului cursului valutar în Microsoft Access.
El vroia să preia cursul la zi de pe site-ul BNR şi apoi vroia să realizeze o mică conversie a monedei în ceva mai simplu de utilizat.

Cum am procedat ?
– am salvat pagina bnr.ro ca HTML;
– dat fiind faptul că tabelul ce găzduieşte cursul de schimb include două coloane cu elemente ce nu ne ajută cu nimic, s-a trecut la editarea fişierului HTML;
– din codul tabelului au fost eliminate ultimele două coloane, astfel:

<table cellspacing=”0″><tr><th scope=”row”>1 EUR</th><td><span>4,3246</span></td><td><span>+0,0016</span></td><td><span>+0,04%</span></td></tr><tr><th scope=”row”>1 USD</th><td><span>3,1057</span></td><td><span>-0,0124</span></td><td><span>-0,40%</span></td></tr></table>

<table cellspacing=”0″><tr><th scope=”row”>1 EUR</th><td><span>4,3246</span></td><tr><th scope=”row”>1 USD</th><td><span>3,1057</span></td></table>

Mai departe, s-a început procedura de import.
După finalizare, în baza de date s-a creat un tabel link-uit către fişierul HTML.

În continuare, am creat un tabel care conţine cele două monede, noile prescurtări, dar şi valorile aferente.
Pentru a aduce noile valori în acest tabel, am folosit o interogare de tip UPDATE, cu următoarea sintaxă SQL:

UPDATE Curs, tblConversie_Simboluri SET tblConversie_Simboluri.Valoare = [Curs]![Curs]
WHERE (((Curs.Moneda)=[tblConversie_Simboluri]![Initial]));

O problemă o constituie faptul că această metodă nu actualizează cursul, dat fiind faptul că fişierul HTML este o copie a paginii.
Pentru a rezolva şi acest inconvenient, am folosit un script (vbs) pe care l-am transpus în VBA:

Option Explicit
Dim oXMLHTTP
Dim oStream
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.3.0")
    oXMLHTTP.Open "GET", "http://www.bnr.ro", False
    oXMLHTTP.Send
    If oXMLHTTP.Status = 200 Then
        Set oStream = CreateObject("ADODB.Stream")
            oStream.Open
            oStream.Type = 1
            oStream.Write oXMLHTTP.responseBody
            oStream.SaveToFile "F:Blog Stuff___Materiale de lucru__Video Tutoriale1) AccessImport Curs ValutarCurs ValutarCurs_Valutar.htm"
            oStream.Close
End If

În VBA arată astfel:

Option Compare Database
Sub Preluare_Curs()
On Error GoTo err
Dim oXMLHTTP
Dim oStream
'stergem (Kill) vechiul fisier html sau ii facem o copie (Name)
'Kill "F:Blog Stuff___Materiale de lucru__Video Tutoriale1) AccessImport Curs ValutarCurs ValutarCurs_Valutar.htm"
Name "F:Blog Stuff___Materiale de lucru__Video Tutoriale1) AccessImport Curs ValutarCurs ValutarCurs_Valutar.htm" _
    As "F:Blog Stuff___Materiale de lucru__Video Tutoriale1) AccessImport Curs ValutarCurs ValutarCurs_Valutar_" & Date & ".htm"
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.3.0")
    oXMLHTTP.Open "GET", "http://www.bnr.ro", False
    oXMLHTTP.Send
    If oXMLHTTP.Status = 200 Then
        Set oStream = CreateObject("ADODB.Stream")
            oStream.Open
            oStream.Type = 1
            oStream.Write oXMLHTTP.responseBody
            oStream.SaveToFile "F:Blog Stuff___Materiale de lucru__Video Tutoriale1) AccessImport Curs ValutarCurs ValutarCurs_Valutar.htm"
            oStream.Close
    End If
Exit Sub
err:
    MsgBox err.Description, vbOKOnly + vbInformation, "Eroare"
End Sub

După rulare, ne este descărcată o copie nouă a paginii băncii.

Pentru o demonstraţie a celor scrise mai sus, vă invit să urmăriţi un exemplu video: Import Curs Valutar în Microsoft Access

Materiale de lucru: resursa: Curs Valutar.7z

Dat fiind faptul că ieri am creat acea bază de date ce conţine cursul valutar, acum câteva momenta am testat scriptul pentru noul curs valutar:

Cursul din data de 24.10.2011

Cursul din data de 25.10.2011

 

UPDATE:
O variantă îmbunătăţită o găsiţi aici: [Aplicaţie] – Importul cursului valutar în Microsoft Access ? – UPDATE

Back To Top
Search