Il magazzino creato precedentemente può venire aggiornato in maniera automatica con una macro, nel caso in cui dobbiamo prelevare dei dati (tipico: articolo e prezzo) da dei files che otteniamo periodicamente, creando i nuovi rticoli mancanti e aggiornando quelli già presenti.
Si può fare creando un formulario molto semplice, con un solo campo di Selezione File, che troviamo negli Altri campi di controllo formulario, ed assegnando all'evento Testo modificato la sub CaricaAggiornaArticoli presente nella seguente macro:
REM ***** BASIC *****
Option Explicit
REM definizione delle variabili
Dim Context As Object
Dim Db As Object
Dim Conn As Object
Dim Stat As Object
Dim Result As Object
Dim m() As New com.sun.star.beans.PropertyValue
Dim oDesktop As Object
Dim oCell As Object
Dim oCell0 As Object
Dim oCell2 As Object
Dim oDoc As Object
Dim oSheet As Object
Dim oCursor As Object
Dim oAddress As Object
Dim nrCelle As Double
Dim Url As String
Dim sUrl As String
Dim i As Integer
Dim articolo As String
Dim prezzo As Currency
Sub CaricaAggiornaArticoli
rem ----------------------------------------------------------------------
Context = createUnoService("com.sun.star.sdb.DatabaseContext") REM connessione al db
Db = Context.getByName("MagProva") REM nome del db
Conn = Db.getConnection("user","password") REM se la connessione non richiede utente e password, lasciare vuoto ("","")
Stat = Conn.CreateStatement()
rem ----------------------------------------------------------------------
oDesktop = createUnoService("com.sun.star.frame.Desktop")
prelevaNome REM lanciamo la funzione che prende il nome del file attualmente indicato nel campo Selezione File del formulario
if msgBox ("Prelevo il file: " & Url , 4) = 7 then REM controlliamo se non è stato selezionato niente, in tal caso usciamo dalla sub
exit sub
else
sUrl = convertToUrl(Url)
REM carichiamo il foglio di calcolo con i dati degli articoli e cerchiamo l'ultima riga
oDoc = oDesktop.loadComponentFromUrl(sUrl , "_blank" , 0, m())
oSheet = oDoc.Sheets(0)
oCursor = oSheet.createCursor()
oCursor.gotoStart()
oCursor.gotoEnd()
oCell = oCursor.getCellByPosition(0,0)
oAddress = oCell.getCellAddress()
nrCelle = oAddress.Row
REM facciamo una loop su tutte le righe per cercare i dati, quindi controlliamo che siano presenti o no nel database, nel primo caso li aggiorniamo, nel
REM secondo li aggiungiamo
for i=1 to nrCelle
oCell0 = oSheet.getCellByPosition (0,i)
articolo = oCell0.string
oCell2 = oSheet.getCellByPosition (1,i)
prezzo = oCell2.getvalue
Result = Stat.executeQuery ("SELECT Articoli.ArtId , Articoli.descrizione , Articoli.prezzo FROM mag.Articoli "_
+" WHERE Articoli.descrizione = '"+articolo+"' ")
If Result.next Then
Stat.executeUpdate ("UPDATE mag.Articoli SET Articoli.prezzo="+prezzo+" WHERE Articoli.descrizione = '"+articolo+"'")
Else
Stat.executeUpdate ("INSERT INTO mag.Articoli ( descrizione, prezzo) VALUES ('"+articolo+"','"+prezzo+"') ")
EndIf
next i
endif
conn.close()
end sub
sub prelevaNome
Dim oForm, oControl
oForm = ThisComponent.Drawpage.Forms.getByName("Standard")
oControl = oForm.getByName("FileSelection")
Url = oControl.Text()
end sub
Questo qui sotto è il formulario. La macro sopra va assegnata all'evento Tasto del mouse premuto del campo PushButton Esegui l'aggiornamento.

Contatti, suggerimenti e, perché no, segnalazioni di errori: egio@tuxfamily.org
© 2007 Sergio Corato: tutti i documenti di questo sito sono rilasciati con licenza LGPL v. 2.1 o successiva.
Ultima modifica: