Newsgroup: it.comp.appl.access
Titolo: Problemi aggiornamento Access

Ciao a tutti,
vorrei sapere se esiste un metodo per aggiornare i database di Access.
Mi spiego meglio: ho un'applicazione con un DataBase in Access , adesso ho
fatto una nuova versione del programma ed ho dovuto aggiungere dei campi nel
DataBase e vorrei spedire ai clienti il nuovo programma ed aggiornare nello
stesso tempo il DataBase. Esiste un'utilità od un programma che confronti i
due DB ed aggiorni il vecchio?

 ha scritto nel messaggio
news:akhu65$fm8$1...@fe2.cs.interbusiness.it...

Non esiste proprio.
Ti toccherà fare tutto a manella.
Non solo: se tu avessi diviso il tuo applicativo in FE e BE, e non avevi
modificato le tabelle del BE, allora bastava inviare solo il FE ai vari
clienti che lo sostituivano al vecchio.
Ma così, soprattutto per il fatto di aver aggiunto campi, dovrai prendere le
tabelle dei clienti, piene di dati e aggiungervi i campi che tu hai
aggiunto.
Oppure prendere queste tabelle e fare un accodamento dei dati nelle nuove
tabelle che hanno campi in più, quindi ridargli il nuovo database.
Antonio

 ha scritto nel messaggio
news:akhu65$fm8$1...@fe2.cs.interbusiness.it...

Le versioni di Access sono le stesse? Sì?
Se devi aggiornare solo i campi aggiunti alle tabelle preesistenti si può
fare a patto che tu abbia diviso il db in BE con le tabelle e FE con le
maschere e il resto.
Se così non è ti conviene fare un nuovo DB con allegate le tabelle del
vecchio DB.
Questo db deve contenere una sola maschera di apertura con un bel pulsante
AGGIORNA.
Usa i metodi OpenDatabase, CreateField e Append per creare un nuovo campo
nella tabella desiderata.
Personalmente creo una funzione che verifica se il campo esiste utilizzando
l'errore
che si crea aprendo una query con il nuovo campo ( per esempio SELECT
First(Bolla.NFattMol) AS NFattMol
FROM Bolla;)
Se l'errore è uguale a zero vuol dire che il campo esiste, altrimenti no. In
questo
caso faccio partire una funzione del tipo:
Public Sub NuovoCampoNFattMol()
 On Error Resume Next
    Dim dbs As Database
    Dim tdf As TableDef, fld1 As Field
    Dim i As Integer
    Set dbs = OpenDatabase(MiaDir & "\MioDB.mdb")
    'MiaDir mi restituisce la cartella
    'puoi sostituirla con il percorso della cartella
    For i = 1 To dbs.TableDefs.Count
    If dbs.TableDefs(i).Name = "Bolla" Then
    Set tdf = dbs.TableDefs(i)
    Exit For
    End If
    Next i
    Set fld1 = tdf.CreateField("NFattMol", dbLong)
    tdf.Fields.Append fld1
    Set dbs = Nothing
  Exit Sub
End Sub
Ciao, Carlo

 ha scritto nel messaggio
news:Gq%a9.112693$lu5.2...@twister1.libero.it...

Dai Antonio...così me lo demoralizzi...ci sei passato pure tu.
Va a finire che elPerro non ci viene più su questo NG.
E tu, elPerro, non badare al Biso...non sempre è in vena.
In realtà il Biso sa benissimo come fare...ma a volte...
Ciao, Carlo

 In realtà il Biso sa benissimo come fare...ma a volte...
Guarda che se è come ho detto io, non è assolutamente semplice fare quello
che deve fare, diciamo che è da utente esperto...
Visto che lui cercava un'utility automatica...insomma...
Antonio

 Visto che lui cercava un'utility automatica...insomma...
    'Sta cosa interessa anche a me. Normalmente faccio tutto a manina in vb,
ma mi domandavo appunto se in Access ci fossero funzioni particolari che
potessero essere utili allo scopo.
    Poi... le repliche. Non ne so niente. Possono avere qualcosa a che
vedere con queste questioni o sono del tutto fuori strada?
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

 ha scritto nel messaggio
news:aki7tf$1i123f$1...@ID-52090.news.dfncis.de...

Le repliche permettono di fare degli aggiornamenti automatici di database
uguali.
Qui il problema è che la struttura del database è cambiata, sia il "motore"
che le tabelle.
Questo non permette una migrazione automatica da una versione all'altra,
visto anche che gli utenti avranno già popolato la versione in loro possesso
con i propri dati.
A questo punto bisogna mettersi lì e fare a manella quello che ho detto.
Prendere i dati reali, e accodarli alle nuove tabelle del database nuova
versione.
La complessità di questa operazione dipenderà dal numero di tabelle e dalle
eventuali relazioni che ci sono tra esse. Inoltre bisogna ricordarsi che le
nuove tabelle hanno nuovi campi, quindi bisognerà adottare una politica
adeguata per inserire valori opportuni (visto che sicuramente in seguito
saranno popolati dall'inserimento dell'utente stesso, ma per i record
vecchi, che si fa?)
Personalmente, realizzo applicativi divisi in FE e BE.
Questo mi permette di effettuare degli aggiornamenti del FE praticamente
indolore: sostituzione brutale della copia dell'utente con la nuova
Se intervengo invece sulla struttura delle tabelle del BE, mi faccio mandare
la copia dal cliente, magari la sera, la aggiorno con i nuovi campi
riempendoli secondo come stabilito col cliente stesso, quindi rimando
indietro il BE.
Antonio

 indolore: sostituzione brutale della copia dell'utente con la nuova
E vorrei vedere... č inutile sviluppare applicazioni con A 'XX se lasci
tutto insieme :-)

 ha scritto nel messaggio
news:li2b9.113389$lu5.2...@twister1.libero.it...

Vabbeh, dai...dipende
comunque il fatto di dividere comporta uno sforzo supplementare (io faccio
tutta la divisione a mano).
se non č necessario, e soprattutto se si prevede di non fare grossi
cambiamenti, si puņ anche evitare...
in generale comunque...
Antonio

 in generale comunque...
Boh, quando non è necessario?  :-))
Ciao: Oscar

 Ciao, Carlo
Oppure:
Dim dbs As Database
Dim tdf As TableDef
Dim MioInsieme As TableDefs
Set dbs = OpenDatabase("C:\Pippo\MioBE.mdb")
Set MioInsieme = dbs.TableDefs
Set tdf = MioInsieme("Bolla")
With tdf
    .Fields.Append .CreateField("NFattMol", dbLong)
End With
Set MioInsieme = Nothing
Set tdf= Nothing
Set dbs = Nothing
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:xFmb9.117914$lu5.3...@twister1.libero.it...

La tua sub è migliore: evita di ciclare sulle tabelle.
In effetti ho copiato la routine che usavo per altri scopi.
Ciao, Carlo