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

Aggiornamento DB via VBA.

3 views
Skip to first unread message

TANNHAUSER

unread,
Jul 2, 2009, 11:19:05 AM7/2/09
to
WXP Pro SP3/A03 SP3

Ciao a tutti,

ho provato, su un DB di prova, ad inserire il seguente codice su di una
maschera richiamata da una macro all'avvio di Access:

Private Sub Form_Open(Cancel As Integer)
Dim dbOld As Database
Dim dbNew As Database
Dim RelOld As Integer
Dim RelNew As Integer
Dim TitleOld, Msg As String
Dim TitleNew As String
Dim DBFileNew As String
Dim DBFileOld As String

DBFileNew = "X:ServerMio.mdb"
DBFileOld = "C:Documents and Settings" + LeggiUtenteCorrente() +
"DesktopMio.mdb"

Set dbOld = CurrentDb

If FileExist(DBFileNew) Then

Set dbNew = DBEngine.OpenDatabase(DBFileNew)
TitleOld = dbOld.Properties!AppTitle
TitleNew = dbNew.Properties!AppTitle
RelOld = CInt(Right(TitleOld, Len(TitleOld) - 1))
RelNew = CInt(Right(TitleNew, Len(TitleNew) - 1))
If RelNew - RelOld > 0 Then
CopyFile DBFileNew, DBFileOld, 0
MsgBox "File aggiornato, riavvia!"
DoCmd.Quit
End If

End If
End Sub

In teoria, ed anche in pratica, viene verificata l'esistenza di una
versione pi� recente di un DB su di una cartella fissa di un server e
copiata sulla scrivania dell'utente.
Dopo la prova ho messo il codice, con l'opportuna modifica del nome del
DB, in una form richiamata dalla macro Autoexec in un DB "ufficiale".
Beh, il messaggio appare sempre ma il DB non viene mai sovrascritto.

Qualche commento? Grazie.

--
TANNHAUSER
"I've seen things you people wouldn't believe..."

questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ab...@newsland.it


Pablitomf

unread,
Jul 2, 2009, 11:27:06 AM7/2/09
to
TANNHAUSER ha scritto:

> WXP Pro SP3/A03 SP3

> Ciao a tutti,

> Set dbOld = CurrentDb

> If FileExist(DBFileNew) Then

> End If
> End Sub

> Qualche commento? Grazie.

Problemi di spazi nei percorsi...? usa chr(34) per emulare le virgolette
all'inizio e alla fine del percorso (incluso il nome file) e vedi se funge.


--
Ciao
Pablitomf

----------------------------
http://www.accessgroup.it/
----------------------------
Non mi fido molto delle statistiche, perch� un uomo con la testa nel forno
acceso e i piedi nel congelatore statisticamente ha una temperatura media.

Geppo

unread,
Jul 2, 2009, 1:33:50 PM7/2/09
to
Ciao "TANNHAUSER" <tannau...@virgilio.it> ha scritto nel messaggio
news:h2ij59$415$1...@news.newsland.it...
> WXP Pro SP3/A03 SP3
>
--cut--

Oltre a quanto gi� suggerito da Pablitomf, controlla gli slash nel path.


> DBFileOld = "C:Documents and Settings" + LeggiUtenteCorrente() +
> "DesktopMio.mdb"


--
Ciao
Geppo

Karl Donaubauer

unread,
Jul 2, 2009, 2:07:20 PM7/2/09
to
TANNHAUSER wrote:
> ...

> If FileExist(DBFileNew) Then
>
> Set dbNew = DBEngine.OpenDatabase(DBFileNew)
> TitleOld = dbOld.Properties!AppTitle
> TitleNew = dbNew.Properties!AppTitle
> RelOld = CInt(Right(TitleOld, Len(TitleOld) - 1))
> RelNew = CInt(Right(TitleNew, Len(TitleNew) - 1))
> If RelNew - RelOld > 0 Then
> CopyFile DBFileNew, DBFileOld, 0
> MsgBox "File aggiornato, riavvia!"
> DoCmd.Quit
> End If
> ...

> In teoria, ed anche in pratica, viene verificata l'esistenza di una
> versione pi� recente di un DB su di una cartella fissa di un server e
> copiata sulla scrivania dell'utente.
> Dopo la prova ho messo il codice, con l'opportuna modifica del nome
> del DB, in una form richiamata dalla macro Autoexec in un DB
> "ufficiale". Beh, il messaggio appare sempre ma il DB non viene mai
> sovrascritto.
>
> Qualche commento?

Oltre a quanto gi� suggerito dagli altri:

Sei sicuro che a parte della copia tutto funziona?
Hai controllato i valori dei variabili RelOld e RelNew?
Come hai programmato i tuoi metodi FileExist e CopyFile?
Se p.e. usano delle API, sei sicuro che hai i diritti e funzionano
sul sistema?
Perch� non usi i metodi di VBA Dir e FileCopy?

Puoi anche provare di creare un file di testo nel percorso dell'utente
e poi se dalla finestra debug funziona:

Kill("PercorsoENomeDelFileDiTesto")

Vuol dire provare in pratica se tu e Access hanno i diritti necessari.

� anche meglio di non cancellare/copiare file in uso.
Cio� prima della riga con CopyFile:

dbOld.Close: Set dbOld = Nothing
dbNew.Close: Set dbNew = Nothing
DoEvents

--
HTH
Karl
*********
Access FAQ: www.donkarl.com/it


TANNHAUSER

unread,
Jul 3, 2009, 5:50:37 AM7/3/09
to
Karl Donaubauer ha scritto:


> Sei sicuro che a parte della copia tutto funziona?
> Hai controllato i valori dei variabili RelOld e RelNew?
> Come hai programmato i tuoi metodi FileExist e CopyFile?
> Se p.e. usano delle API, sei sicuro che hai i diritti e funzionano
> sul sistema?
> Perch� non usi i metodi di VBA Dir e FileCopy?

> Puoi anche provare di creare un file di testo nel percorso dell'utente
> e poi se dalla finestra debug funziona:

> Kill("PercorsoENomeDelFileDiTesto")

> Vuol dire provare in pratica se tu e Access hanno i diritti necessari.

> � anche meglio di non cancellare/copiare file in uso.
> Cio� prima della riga con CopyFile:

> dbOld.Close: Set dbOld = Nothing
> dbNew.Close: Set dbNew = Nothing
> DoEvents

Grazie a tutti per i preziosi consigli; ho verificato con tutti i vostri
suggerimenti ma non riuscivo a trovare dove fosse il problema. Alla fine
ho scoperto che la funzione LeggiUtenteCorrente() mi resitutiva "USERxxxx"
seguito da decine di caratteri non stampabili. A quel punto ho sostituito
LeggiUtenteCorrente() con Left(LeggiUtenteCorrente(),8) e la cosa si �
risolta.
Buona giornata.

0 new messages