Newsgroup: it.comp.appl.access
Titolo: Aggiorna campi in tabella

Ciao a tutti, vi spiego quale è il mio problema e se possibile
risolvere.
Ho un database che usiamo in azienda,  io continuo a sviluppare da
casa e periodicamente aggiorno delle tabelle creando campi nuovi. E'
possibile, senza che blocchi il sistema aggiornare le strutture delle
tabelle ?
Attendo Vs indicazioni se possibile.
Grazie

 ha scritto nel messaggio
news:1171281983.6...@s48g2000cws.googlegroups.com...
Ciao a tutti, vi spiego quale č il mio problema e se possibile

E' un casino se tocchi la struttura delle tabelle.
Diverso sarebbe se il tuo applicativo č diviso in FE e BE e tu cambi solo il
FE. Allora ti basta sostituire le copie del FE in ditta
Antonio

 ha scritto nel messaggio 
news:1171281983.6...@s48g2000cws.googlegroups.com...

------------------------------------
Possibilissimo...con le opportune precauzioni per la salvaguardia dei dati.
Personalmente è una cosa che faccio almeno 20 volte l'anno...
Verifico che il campo non esiste, creo una procedura per accodare il campo:
Public Sub NuovoCampo()
 On Error Resume Next
    Dim dbs As Database
    Dim tdf As TableDef, fld1 As Field
    Dim i As Integer
    Set dbs = OpenDatabase("MioPercorsoEFile.mdb")
    For i = 1 To dbs.TableDefs.Count
    If dbs.TableDefs(i).Name = "NomeTuaTabella" Then
    Set tdf = dbs.TableDefs(i)
    Exit For
    End If
    Next i
    Set fld1 = tdf.CreateField("NomeCampoDaCreare", dbSingle) 'se è un 
numero in precisione singola
    tdf.Fields.Append fld1
    Set dbs = Nothing
End sub
Per creare una nuova tabella faccio così: realizzo una tabella in locale, 
nell'mdb che diventerà mde, la chiamo con il nome che voglio aggiungendo 
"crea" (MiaTabellaCrea) e poi eseguo il seguente codice:
DoCmd.TransferDatabase acExport, "Microsoft Access", "MioPercorsoEFile.mdb", 
acTable, "MiaTabellaCrea", "MiaTabella", False
Ciao, Carlo

"Antonio Biso" <ch...@NOSPAMetruria.net> ha scritto nel messaggio 
news:uYZzh.6461$BP5....@twister2.libero.it...

Ciao Antonio
sbaglio o si riferiva all'aggiunta di nuovi campi in tabelle?
Tabelle allegate o meno non dovrebbe essere un problema.
Ciao, Carlo

 ha scritto nel messaggio
news:eqpqdg$h3e$1...@tdi.cu.mi.it...

A parte che parla di generica modifica della struttura dati delle tabelle
(Terrore) ma anche solo l'aggiunta di campi, comporterebbe poi la modifica
delle form, delle query, dei report e cosě via...
E poi dovrebbe congelare il database di lavoro per metterci le modifiche che
lui ha fatto, insomma, mamma mia, ho i brividi
Antonio

 Antonio
Comunque dovrà modificare il tutto anche se usa il BE...non vedo un grosso 
problema se si limita all'aggiunta di campi nelle tabelle.
Dovremmo sentire lui come ha strutturato il db.
Ciao, Carlo 

 ha scritto nel messaggio
news:eqpseb$k5p$1...@tdi.cu.mi.it...

Ma infatti il discorso è che per avere mal di pancia il database non
dovrebbe essere caricato finchè la struttura dati non è definitiva
Per lui invece sembra sia la norma smantruzzare il tutto
Antonio

Grazie amici, ho visto che la cosa può essere fatta, Vi spiego
meglio...
(Premetto che non sono molto pratico col codice, quindi se potete
postare qualcosa descritta  in seguito sarebbe grande)
Il database è strutturato così, Client_BE che usano i vari utenti e
Tabelle_BE che risiede sul server aziendale, diverso per
distaccamento.
Siccome lo stesso database è utilizzato in diversi distaccamenti
dell'azienda, ogni tanto capita di dover applicare qualche modifica,
io a quel punto la stessa modifica la applico agli altri client e
quindi capita che in quel distaccamento devo aggiornare le tabelle
aggiungendo il campo nuovo.
Chiaramente ogni volta che devo far ciò, nel distaccamento blocco
l'utilizzo del database e a manina vado ad aggiungere il campo, la
cosa però è lunga e laboriosa, sarebbe opportuno poterlo fare una
piccola procedura automatica, tipo :
Nome Tabella (ed io inserisco la tabella che voglio modiifcare)
Campo da Aggiungere:(inserisco ome campo)
Ecc. ecc.
Intanto Vi ringrazio nella speranza di riuscie nell'intento.
Mauro

 ha scritto nel messaggio 
news:1171306234.1...@q2g2000cwa.googlegroups.com...

..-----------------------------
Sì però non hai ancora detto se hai diviso il database tra BE (BackEnd con 
tutte le tabelle) e FE (FrontEnd con tutto il resto).
Tu parli di BE client e BE_Tabelle...
Questo è un primo punto importante da chiarire.
Se la struttura del db è BE sul server + vari FE allora puoi modificare il 
solo FE e distribuirlo ai vari client...il primo FE che accede al db BE 
(tabelle) farà le modifiche da codice.
E' chiaro che dovrai strutturare le modifiche in modo da evitare errori.
Quanto alla funzione ti ho già postato un esempio che può essere modificato 
a tuo piacimento.
Colgo l'occasione per sottolineare di come sia importante, nel porre una 
domanda, premettere la struttura del db, il sistema operativo e la versione 
di Access usata...per avere queste informazioni io ed Antonio dobbiamo 
attendere il settimo post...
Ciao, Carlo

Bene amici e scusate se ho inviato le informazioni necessarie per
l'aiuto.. eccole.
Uso WinXP con Office 2003 poi in locale ho il Client_FE e sui vari
server i vari Tabelle_BE
Gli aggiornamenti dovrei poterli fare io in un momento propizio con il
client che sto elaborando, poi distribuirò lo stesso per i vari
distaccamenti.
Il codice che hai inviato potrebbe andare sicuramente, posso provare o
ci sono altre cosette che mi dovrete dire.
Intanto Vi ringrazio caldamente per l'aiuto e sicuramente dovrò
chiederVi qualcos'altro.
Ciao e a presto
Mauro

 ha scritto nel messaggio 
news:1171355814.9...@a75g2000cwd.googlegroups.com...

-------------------------------------------
Definire: "...e sui vari server i vari Tabelle_BE".
I server sono molti? I DB con le tabelle sono molti?
Oppure una sola macchina server con un solo DB che contiene le varie 
tabelle?
Ciao, Carlo

 attendere il settimo post...
Vogliamo parlare dello sfoltimento selvaggio del quoting, nel senso che del
messaggio precedente proprio non c'è nulla?
Antonio

 ha scritto nel messaggionews:1171355814.9...@a75g2000cwd.googlegroups.com...

Allora, mi spiego
Tante Tabelle_BE sui vari server dei distaccamenti e un unico
Client_FE che tengo aggiornato e poi trasferisco.
Quando faccio un aggiornamento per un distaccamento mi serve poi
poterlo aggiornare sui vari server.
Grazie

 ha scritto nel messaggio 
news:1171379064.8...@h3g2000cwc.googlegroups.com...


Grazie
--------------------------------------
Mah! Sarò io che non capisco...
Facciamo chiarezza almeno sulla terminologia.
DB (dicesi database, un database) il quale contiene una o più tabelle, 
query, maschere, report ecc.
BE = DB che contiene solo tabelle e che serve come contenitore dei dati 
condivisi; in caso contrario si chiamerebbe DB.
FE = DB che contiene tutto tranne le tabelle condivise o allegate dal BE.
I BE sono database che in genere risiedono su una o più macchine e 
contengono SOLO i dati (tabelle).
I FE in genere risiedono su macchine diverse ed hanno, come già detto le 
tabelle allegate al o ai vari BE.
La tua situazione quale è?
Un solo BE, Tanti BE.
Un solo FE, Tanti FE
Il FE è uno solo con allegate le tabelle provenienti da vari BE localizzati 
in uno o più server?
Da quello che hai chiesto all'inizio sembrerebbe che devi aggiornare SOLO le 
tabelle del o dei BE, giusto?
Se le cose stanno così tutte le operazioni da fare le puoi scrivere nel solo 
FE che, una volta sostituito, provvederà ad aggiornare il o i BE.
Se i FE sono molti le modifiche che avrai fatto al FE, presso il tuo studio, 
casa ufficio o dove lavori, dovranno essere presenti anche sui vari FE, 
quindo dovrai sostituirli tutti (i FE).
In ogni caso, tra quelli qui esposti, NON dovrai MAI sostituire i BE, tutte 
le operazioni saranno eseguite dai FE. Se poi questo benedetto FE è UNICO, 
la cosa è ancora più semplice perchè ti bastera sostituire solo questo.
Le function che ti ho già inviato vanno benissimo.
Ciao, Carlo

 - Mostra testo tra virgolette -
Giusto allora come dici, in pratica ho tanti BE e molti FE
Ma forse è difficile piu a spiegare che a fare...
STRUTTURA_1   - Server con  Tabelle_BE e tanti Client_FE
STRUTTURA_2   - Server con  Tabelle_BE e tanti Client_FE
Fin quì ok ?
Anche se dislocate in zone diverse le STRUTTURE 1 e 2 hanno lo stesso
tipo di Tabelle_BE e Client_FE pertanto io che faccio,  lavorando in
locale apporto delle modifiche sia a Tabelle_BE (aggiungendo e/o
modificando qualche campo in tabella e aggiungendo qualche tabella
stessa) e di conseguenza anche il Client_FE.
Chiaramente poi cosa faccio, devo trasferfire le modifiche sui vari
server STRUTTURA_1 e STRUTTURA_2 e il client_FE che punta a Tabelle_BE
di STRUTTURA_1 o 2, installarlo sulle macchine che dovrano
utilizzarlo.
Penso di aver fatto + chiarezza ora, almeno spero...  Ciao Amici

 ha scritto nel messaggio 
news:1171385231.1...@q2g2000cwa.googlegroups.com...
cut
Giusto allora come dici, in pratica ho tanti BE e molti FE
Ma forse è difficile piu a spiegare che a fare...
STRUTTURA_1   - Server con  Tabelle_BE e tanti Client_FE
STRUTTURA_2   - Server con  Tabelle_BE e tanti Client_FE
Fin quì ok ?
Anche se dislocate in zone diverse le STRUTTURE 1 e 2 hanno lo stesso
tipo di Tabelle_BE e Client_FE pertanto io che faccio,  lavorando in
locale apporto delle modifiche sia a Tabelle_BE (aggiungendo e/o
modificando qualche campo in tabella e aggiungendo qualche tabella
stessa) e di conseguenza anche il Client_FE.
Chiaramente poi cosa faccio, devo trasferfire le modifiche sui vari
server STRUTTURA_1 e STRUTTURA_2 e il client_FE che punta a Tabelle_BE
di STRUTTURA_1 o 2, installarlo sulle macchine che dovrano
utilizzarlo.
Penso di aver fatto + chiarezza ora, almeno spero...  Ciao Amici
--------------------------------
Ora ci siamo: molti BE e Molti FE per ciascuna STRUTTURA;
Le varie strutture hanno comunque le stesse "strutture" di database anche se 
i dati possono cambiare.
OK?
Benissimo. Sei a cavallo.
Le modifiche vanno fatte su un solo FE e questo lo passi a tutti i pc che 
hanno il FE a qualunque STRUTTURA (1 o 2) essi appartengano sostituendo il 
solo FE.
MAI più lavorare sulle tabelle o sui BE! Si può fare tutto da codice e dal 
FE.
Veniamo al come.
Io ti dico quello che faccio per i miei lavori.
In locale, presso il mio studio e in una copia del db originale, apro la 
tabella (nel BE) a cui devo aggiungere un campo; lo aggiungo, p.e. AliqIVA 
di tipo numerico.
Chiudo il BE e apro il FE che ha già la tabella allegata. Da questa tabella 
mi costruisco una query raggruppata con il solo campo aggiunto, del tipo:
SELECT First(Bolla.AliqIVA) AS AliqIVA
FROM Bolla;
La salvo con il nome VerificaAliqIVA.
Riapro il BE e la tabella a cui prima avevo aggiunto il campo (AliqIVA) e lo 
cancello. Salvo la tabella e chiudo il BE. Questo mi serve per simulare la 
situazione sul reale ma nello stesso tempo mi permette di costruire la query 
che non avrei potuto fare senza il campo.
Chiaro fin qui?
Ora passiamo al codice. Nei miei lavori utilizzo sempre una maschera di 
apertura dove "su caricamento" metto il codice che mi serve per questo tipo 
di operazioni. Per esempio:
If DimmiSeAliqIVA = False Then
Call NuovoCampoAliqIVA
End If
DimmiSeAliqIVA  è una funzione pubblica che è più o meno così:
Public Function DimmiSeAliqIVA() As Boolean
Dim dbs As Database, rst As Recordset
    Set dbs = CurrentDb()
    On Error Resume Next
    Set rst = dbs.OpenRecordset("VerificaAliqIVA") 'la query che abbiamo 
creato
    If Err = 0 Then
        DimmiSeAliqIVA= True
        rst.Close
        Set dbs = Nothing
    Else
        DimmiSeAliqIVA= False
        rst.Close
       Set dbs = Nothing
    End If
End Function
In pratica se aprendo la query precedentemente salvata mi restituisce un 
errore diverso da zero (la funzione restituisce false) vuol dire che il 
campo non esiste e dunque con un altra funzione lo aggiungo. Se restituisce 
True esco dalla procedura perchè il campo c'è.
Ecco la Sub che aggiunge un campo:
Public Sub NuovoCampoAliqIVA()
 On Error Resume Next
    Dim dbs As Database
    Dim tdf As TableDef, fld1 As Field
    Dim i As Integer
    Set dbs = OpenDatabase("Percorso E Nome.mdb")
    For i = 1 To dbs.TableDefs.Count
    If dbs.TableDefs(i).Name = "NomeTabellaACuiAggiungereIlCampo" Then
    Set tdf = dbs.TableDefs(i)
    Exit For
    End If
    Next i
    Set fld1 = tdf.CreateField("AliqIVA", dbSingle) 'se di tipo testo basta 
("AliqIVA")
    tdf.Fields.Append fld1
    Set dbs = Nothing
    Exit Sub
End Sub
A questo punto creo il nuovo FE (in genere un mde) non senza avere fatto 
anche le modifiche che mi interessano alle varie maschere, report, query, 
ecc. ma che potrei anche non fare perchè non necessarie.
Il lavoro è pronto per essere inviato a tutti i PC che usano il FE.
(Io uso un sito ftp dal quale tutti si scaricano l'aggiornamento.)
Per l'installazione dovrai chiedere a tutti i FE (leggi utilizzatori o 
client) di chiudere tutti i FE e di copiarsi, sostituendolo il FE in uso con 
il nuovo. La riapertura di un singolo FE creerà il campo nel BE e tutti 
vissero felici e contenti.
Dimmi che mi sono spiegato.
Poi ti mando la parcella.
Ciao, Carlo

 Poi ti mando la parcella.
Ero partito per scriverlo io
FATTE PAGAAAAAAAAAAAAAAAAAA
Antonio

 ha scritto nel messaggionews:1171385231.1...@q2g2000cwa.googlegroups.com...

Certo Carlo, sei stato mooolto chiaro, mi sembra di aver capito, ci
provo e ti faccio sapere come è andata a finire e grazie per l'aiuto
comunque.
Magari potessimo incontrarci sarei felice di fare la tua conoscenza.
Grazie ancora e ciao

 Ciao, Carlo
Certo Carlo, sei stato mooolto chiaro, mi sembra di aver capito, ci
provo e ti faccio sapere come č andata a finire e grazie per l'aiuto
comunque.
Magari potessimo incontrarci sarei felice di fare la tua conoscenza.
Grazie ancora e ciao
Caro Mauretto,
per un messaggio di ringraziamento e saluto NON c'era bisogno di riquotare
tutto il messaggio!!!
Antonio

Grazie, è anche questa una cosa da imparare.
E ancora Grazie Carlo e Antonio